子过程:
对于没有 NAME 的形式,你还必须提供调用子过程的方法.因此你必须保存返回值,因为
这种形式的 sub 声明方法不但在编译的时候编译,同时也产生一个运行时的返回值,所以
我们就可以保证保存它:
可以用下面的方法引入在另一个模块中定义的子过程:
use MODULE qw(NAME1 NAME2 NAME2...)
[root@wx03 2]# cat Horse.pm
package Horse;
use Exporter 'import';
our $days="test111";
@EXPORT = qw(fun1);
sub fun1 {
my $a=shift;
my $b=shift;
return $a + $b;
};
1;
[root@wx03 2]# cat a1.pl
unshift(@INC,"/root/big/2");
use Horse qw/fun1/;
print $Horse::days;
print "\n";
Horse::fun1(55,23);
print "\n";
print fun1(131,23);
print "\n";
[root@wx03 2]# perl a1.pl
test111
154
间接调用子过程(通过名字或引用),可以使用下面的任何一种方法:
[root@wx03 3]# cat t1.pl
sub fun1 {
my $a =shift;
my $b = shift;
return $a + $b
};
$subref=\&fun1;
print "第一种........\n";
print &$subref(23,45);
print "\n";
print "第二种.........\n";
print $subref->(20,30);
print "\n";
print "第三种.........\n";
print &$subref(23,323);
print "\n";
[root@wx03 3]# perl t1.pl
第一种........
68
第二种.........
50
第三种.........
346
2.0 语意
2.1 参数列表的技巧
[root@wx03 3]# cat t2.pl
sub aysetenv {
my ($key, $value) = @_;
$hash{$key} = $value unless $ENV{$key};
};
&aysetenv(a,a1);
&aysetenv(b,b1);
&aysetenv(c,c1);
print %hash;
print "\n";
print $hash{a};
print "\n";
[root@wx03 3]# perl t2.pl
cc1aa1bb1
a1
你可以一次将 @_ 填入一个散列:
2.2 错误指示
3.0 传入引用:
[root@wx03 3]# cat t3.pl
@a=qw/a1 b2 c3 d4/;
sub sum {
my ($aref) = @_;
my ($total) = 0;
foreach (@$aref) { print "\$_ is $_\n"; }
};
sum(\@a);
[root@wx03 3]# perl t3.pl
$_ is a1
$_ is b2
$_ is c3
$_ is d4
4.0 函数原型
5.0 子过程属性:
子过程
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
上一篇:高德地图-添加自定义图标
下一篇:集腋成裘
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
PMP子过程定义总结
是制定项目和产品详细描述的过程。本过程的主要作用是,描述产品、服务或成果的边界和验收标准。
java 开发语言 项目管理 项目进度 质量管理 -
in mysql 子查询的表 mysql子查询执行过程
想象子查询的执行方式想象中子查询的执行方式是这样的: 如果该子查询是不相关子查询, 比如下边这个查询:
in mysql 子查询的表 mysql 数据库 database 子查询