sub subname{ local ($filevar) = @_; local ($s1, $s1); ... … |
&subname; |
do my_sub(1, 2, 3); 等价于&my_sub(1, 2, 3); |
my($scalar) = 43;
my定义的变量只在该子程序中存在;(在PERL4中没有my)
local(@array) = (1, 2, 3);
而local定义的变量不仅存在于该子程序中,还存在于该子程序调用的子程序中
sub subname{ local ($filevar) = @_; local ($s1, $s1); ... … |
&subname; |
do my_sub(1, 2, 3); 等价于&my_sub(1, 2, 3); |
#!/usr/bin/perl &gotest; print '---------------main--------------------'; print '\$glo is:',$glo; print '\$local is:',$local; print '\$my is:',$my; print ''; sub gotest{ print '---------------sub gotest--------------------'; $glo='glo'; sub中使用不用local 和my而直接定义的变量,必然是全局变量或上级变量 local($local)='local'; my($my)='my'; print '\$glo is:',$glo; print '\$local is:',$local; print '\$my is:',$my; print ''; &subgotest; } sub subgotest{ print '---------------sub subgotest-----------------'; print '\$glo is:',$glo; print '\$local is:',$local; print '\$my is:',$my; sub中使用不用local 和my而直接定义的变量,必然是全局变量或上级变量 print ''; } |
[macg@localhost perltest]$ ./tip.pl ---------------sub gotest-------------------- $glo is:glo $local is:local $my is:my ---------------sub subgotest-------------------- $glo is:glo $local is:local $my is: local可以传给下层子sub,my是真正的“局部变量,只在当前sub内使用 ---------------main-------------------- $glo is:glo 不用local和my定义的sub变量是全局变量,在所有地方都能使 $local is:$my is: |
while (my($line)=<MYFILE>) { |
[macg@localhost perltest]$ ./tip.pl total 16 只显示一行,为什么? 因为等于每次循环都初始化一次变量。 |
my($line); while ($line=<MYFILE>) { |
[macg@localhost perltest]$ ./tip.pl total 16 -rw-rw-r-- -rwxrwxr-x |
#!/usr/bin/perl &gotest('stringgogo',1,3,'4test'); sub gotest{ local($tmp1,$tmp2,$tmp3,$tmp4)=@_; 或my(@tmp)=@_; print 'no.1 para is ',$tmp1,''; print 'no.2 para is ',$tmp2,''; print 'no.3 para is ',$tmp3,''; print 'no.4 para is ',$tmp4,''; } |
&gotest('stringgogo',1,3,'4test'); sub gotest{ print 'no.1 para is ',$_[0],''; print 'no.2 para is ',$_[1],''; print 'no.3 para is ',$_[2],''; print 'no.4 para is ',$_[3],''; } |
[macg@localhost perltest]$ ./tip.pl no.1 para is stringgogo no.2 para is 1 no.3 para is 3 no.4 para is 4test |
[macg@localhost perltest]$ ./tip.pl no.1 para is stringgogo no.2 para is 1 no.3 para is 3 no.4 para is 4test |
#!/usr/bin/perl @go=qw(a b cc dd); &gotest(@go); sub gotest{ my(@tmp)=@_; foreach (@tmp) { } |
[macg@localhost perltest]$ ./tip.pl a b cc dd); |
#!/usr/bin/perl @go=qw(a b cc dd); $ret=&gotest(@go); print $ret,''; sub gotest{ my(@tmp)=@_; 9; } |
#!/usr/bin/perl @go=qw(a b cc dd); $ret=&gotest(@go); print $ret,''; sub gotest{ my(@tmp)=@_; return 9; } |
[macg@localhost perltest]$ ./tip.pl 9 |
9 |
#!/usr/bin/perl -w sub test { local($a)=@_; local($retstring); } $ret=&test('mac'); print $ret,''; $ret=&test('macg'); print $ret,'' |
[root@nm testpl]# ./tip.pl hahaha hahaha+ggg |