加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl中的sub(zz)

发布时间:2020-12-15 21:00:59 所属栏目:大数据 来源:网络整理
导读:基本sub格式 sub subname{? ? ? ? ? ? ? ? ? ? ? ? ? local ($filevar) = @_;? ? ? ? ? ? ? ? ? ? ? local ($s1,$s1);? ... … ? ?}? ? subname;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? ? ? 调用加 do my_sub(1,2,3);? ? ? ?另一种调用方式: do调用 等价于my
基本sub格式
sub subname{?????????????
local ($filevar) = @_;???????????
local ($s1,$s1);?
...

??}??
&subname;?????????????????????调用加&
do my_sub(1,2,3);????另一种调用方式:do调用
等价于&my_sub(1,3);

?
??
?sub中局部变量的定义有两种方法:my和local。
my($scalar) = 43;
my定义的变量只在该子程序中存在;(在PERL4中没有my)?local(@array) = (1,3);
而local定义的变量不仅存在于该子程序中,还存在于该子程序调用的子程序中
local($i,$wildmask)=0; 等于只初始化了一个值。
应该local($i,$wildmask)=(0,0);
sub中三种变量的应用例子
#!/usr/bin/perl

&gotest;
print "---------------main--------------------n";
print "$glo is:",$glo;
print "$local is:",$local;
print "$my is:",$my;
print "n";

sub gotest{
print "---------------sub gotest--------------------n";

$glo="glon";
sub中使用不用local 和my而直接定义的变量,必然是全局变量或上级变量
local($local)="localn";
my($my)="myn";

print "$glo is:",$glo;
print "$local is:",$my;

print "n";
&subgotest;
}


sub subgotest{

print "---------------sub subgotest-----------------n";
print "$glo is:",$my;
sub中使用不用local 和my而直接定义的变量,必然是全局变量或上级变量
print "n";

}
[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:????
不用local,my而直接定义的变量,可以用在任何地方,存活时间等于程序运行时间,其实就是全局变量,所以建议少用。还是经常用local和myperl 真正的全局变量,用our,其实不用local和my的都是全局变量
our @int_name;
our @int_address;
our $int_num=0;
不要把my用在while语句里,要提前用
while (my($line)=<MYFILE>) {
?print $line;
???}
[macg@localhost perltest]$ ./tip.pl
total 16?
只显示一行,为什么?
因为等于每次循环都初始化一次变量。
my($line);
while ($line=<MYFILE>) {
?print $line;
???}
[macg@localhost perltest]$ ./tip.pl
total 16
-rw-rw-r--??1 macg macg???6 Mar 16 13:06 gogo
-rwxrwxr-x??1 macg macg 195 Mar 17 17:22 tip.pl??
最基本的sub参数传递--------实际是将参数@_赋值给局部变量
????sub参数 的两种表示方式:
整体形式(数组形式)?
?@_?单独形式(数组元素形式)??$_[ ]
#!/usr/bin/perl
&gotest("stringgogo",1,3,"4test");

sub gotest{
local($tmp1,$tmp2,$tmp3,$tmp4)=@_;
或my(@tmp)=@_;

print "no.1 para is ",$tmp1,"n";
print "no.2 para is ","n";
print "no.3 para is ","n";
print "no.4 para is ",$tmp4,"n";

}??
?#!/usr/bin/perl
&gotest("stringgogo","4test");

sub gotest{


print "no.1 para is ",$_[0],$_[1],$_[2],$_[3],"n";

}
[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
传送数组到sub 中的数组变量
#!/usr/bin/perl
@go=qw(a b cc dd);
&gotest(@go);

sub gotest{
my(@tmp)=@_;
foreach (@tmp) {
?print $_,"n";
???}
}??
[macg@localhost perltest]$ ./tip.pl
a
b
cc
dd);?
sub返回值,两种方式
最后一条语句的最大值
return语句,直接返回
#!/usr/bin/perl

@go=qw(a b cc dd);
$ret=&gotest(@go);
print $ret,"n";

sub gotest{
my(@tmp)=@_;

9;
}

sub gotest{
my(@tmp)=@_;

return 9;
}
[macg@localhost perltest]$ ./tip.pl
9
?[macg@localhost perltest]$ ./tip.pl
9
sub 传参传字符串
1。可以传入字符串
2。可以return 字符串
#!/usr/bin/perl -w

sub test
{
local($a)=@_;?????????
local($retstring);

?if($a eq "mac")?????????????????
??{
???$retstring="hahaha";
???return $retstring;?
???}
?if($a eq "macg")
??{
???$retstring="hahaha+ggg";
???return $retstring;
???}

}

$ret=&test("mac");
print $ret,"n";
$ret=&test("macg");
print $ret,"n"
[root@nm testpl]# ./tip.pl hahaha hahaha+ggg

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读