4.子程序

#声明与调用
sub hello{
    say "hello";
}
hello();    #5.0以下版本调用函数方式:&hello();

子程序传参:参数保存在@_列表里。参数为数组时,会按元素进行拆分传递

sub hello{
    foreach(@_){
        say "hello $_";    #默认循环变量$_
    }
    say "first para:$_[0]";    #直接访问参数列表@_的元素,此处为第一个参数
    say "second para:$_[1]";
}
hello("a","b");
my $var = 1;
my @array = qw(2 3 4);
hello($var,@array);    #second para:2
hello(@array,$var);    #second para:3

子程序返回值:有return返回return值,否则返回最后一行值 

sub add{
    $_[0]+$_[1];    #同 return $_[0]+$_[1];
}
add(1,2);    #3
sub return_bollean{
    say $_[0];    #此种语句作为返回值,返回执行的布尔结果值:执行成功返回1
}
print return_bollean(1)    #可以不用分号,不能加“”

 

 私有变量

  1. my声明词法作用域变量,从声明开始有效,直到闭合作用域结尾({}中),子程序调用的子程序中无效。(our声明的为全局变量)
  2. local可临时将全局变量变为局部变量,退出作用域后,全局变量恢复前值;子程序调用的子程序中也有效。
  3. state声明静态变量,同sv中的static。
...
my $var = 0;
#my $var2 = 10;     my变量不能再用local声明
our $var2 = 10;
sub printVar{
    say $var;   #打印localVar外的变量值0
    say $var2;
}
sub localVar{
    my $var = 1;    #my变量在子程序中不起作用
    local $var2 = 11;
    say $var;
    say $var2;
    printVar(); #0,11
    #global $var    #wrong,没有global,sv中有
    our $var = 3;
    say $var;   #3
    printVar(); #say $var值仍为0
}
localVar(); 
say $var;   #0
say $var2;   #10

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值