免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1731 | 回复: 1
打印 上一主题 下一主题

请教一个问题? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-07-28 11:47 |只看该作者 |倒序浏览
第一个程序如下:
#!/usr/bin/perl -w


use strict;
my @i = ('1', '2', '3');
my @j = ('a', 'b', 'c');
print "In main program before calling subroutine: i = " ."@i\n";
print "In main program before calling subroutine: j = " ."@j\n";

reference_sub(@i, @j);
print "In main program after calling subroutine: i = " ."@i\n";
print "In main program after calling subroutine: j = " ."@j\n";
exit;


sub reference_sub {
my(@i, @j) = @_;
print "In subroutine : i = " . "@i\n";
print "In subroutine : j = " . "@j\n";
push(@i, '4');
shift(@j);
}


结果:
In main program before calling subroutine: i = 1 2 3
In main program before calling subroutine: j = a b c
In subroutine : i = 1 2 3 a b c
In subroutine : j =
In main program after calling subroutine: i = 1 2 3
In main program after calling subroutine: j = a b c


第二个程序如下:
#!/usr/bin/perl


use strict;
use warnings;
my @i = ('1', '2', '3');
my @j = ('a', 'b', 'c');
print "In main program before calling subroutine: i = " ."@i\n";
print "In main program before calling subroutine: j = " ."@j\n";

reference_sub(\@i, \@j);
print "In main program after calling subroutine: i = " ."@i\n";
print "In main program after calling subroutine: j = " ."@j\n";
exit;


sub reference_sub {
my($i, $j) = @_;
print "In subroutine : i = " . "@$i\n";
print "In subroutine : j = " . "@$j\n";
push(@$i, '4');
shift(@$j);
}

结果:
In main program before calling subroutine: i = 1 2 3
In main program before calling subroutine: j = a b c
In subroutine : i = 1 2 3
In subroutine : j = a b c
In main program after calling subroutine: i = 1 2 3 4
In main program after calling subroutine: j = b c


我现在不能理解的是子程序中的这两句:

   push(@$i, '4');
   shift(@$j);

   为何在第一个程序中这两句不起作用,而第二个中起到了作用,并烦劳大家讲解一个这两句在程序中的意思,尽管单独列出这两句我能理解,但是在这两个程序中我却不理解了!!
   谢谢!!                       

论坛徽章:
0
2 [报告]
发表于 2007-07-28 13:03 |只看该作者

自己看看引用的章节吧

第一个程序的sub是对参数的拷贝进行的push和shift,不影响main里面的@i @j .
第二个用的是引用,就会影响。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP