文档
函数参数
| sub hello{ |
| $len = @args = @_; |
| print "hello @args\n"; |
| } |
| |
| hello('ajanuw', 'alone'); |
传递hash参数
| sub hello{ |
| my (%args) = @_; |
| foreach my $k (keys %args) { |
| my $v = $args{$k}; |
| print "$k: $v\n"; |
| } |
| } |
| |
| %user = (name => 'ajanuw', age => 14); |
| hello(%user); |
return
如果没有使用 return 语句,则子程序的最后一行语句将作为返回值
| sub add{ |
| return @_[0] + @_[1]; |
| } |
| |
| print add(1,2)."\n"; |
静态变量
这个在js只能用闭包实现
| |
| use feature 'state'; |
| |
| sub add{ |
| my $num = @_[0]; |
| state $i = 0; |
| $i += $num; |
| return $i; |
| } |
| |
| add(1); |
| add(4); |
| |
| print add()."\n"; |
析构返回值
| sub add{ |
| qw/ajanuw alone/ |
| } |
| my ($a, $b) = add(); |
| print "$a and $b\n"; |
递归
| |
| |
| sub echo{ |
| my $n = @_[0]; |
| if($n eq 0){ |
| return 'done.'; |
| } |
| print "$n\n"; |
| return echo($n-1); |
| } |
| echo(3); |
回调
| |
| use autodie; |
| |
| sub asd{ |
| my ($n, $cb) = @_; |
| &$cb($n +1); |
| } |
| |
| asd(123, sub { |
| print "@_\n"; |
| }) |
闭包
| sub asd{ |
| my $n = shift @_; |
| return sub { |
| $n += shift @_; |
| print "$n\n"; |
| } |
| } |
| |
| $x = asd(1); |
| &$x(2); |
| &$x(3); |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步