函数参数
sub hello{
$len = @args = @_;
print "hello @args\n";
}
hello('ajanuw', 'alone'); # 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"; # 3
静态变量
这个在js只能用闭包实现
#!/usr/bin/perl
use feature 'state';
sub add{
my $num = @_[0];
state $i = 0;
$i += $num;
return $i;
}
add(1);
add(4);
print add()."\n"; # 5
析构返回值
sub add{
qw/ajanuw alone/
}
my ($a, $b) = add();
print "$a and $b\n"; # ajanuw and alone
递归
#!/usr/bin/perl
sub echo{
my $n = @_[0];
if($n eq 0){
return 'done.';
}
print "$n\n";
return echo($n-1);
}
echo(3);
回调
#!/usr/bin/perl
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);