我正在从Randal Schwartz的中级Perl学习Perl。有人可以在下面的代码中解释变量$ callback和$ getter的分配吗?

use File::Find;
sub create_find_callbacks_that_sum_the_size {
my $total_size = 0;
return(sub {$total_size += -s if -f}, sub { return $total_size });
}

my %subs;
foreach my $dir (qw(bin lib man)) {
my ($callback, $getter) = create_find_callbacks_that_sum_the_size( );
$subs{$dir}{CALLBACK} = $callback;
$subs{$dir}{GETTER} = $getter;
}

for (keys %subs) {
  find($subs{S_}{CALLBACK}, $_);

for (sort keys %subs) {
my $sum = $subs{$_}{GETTER}->( );
print "$_ has $sum bytes\n";
}


我认为$ callback获得第一个子例程引用的值是对的吗?

sub {$total_size += -s if -f}


该$ getter获得第二个子例程引用:

sub { return $total_size }


这是列表分配吗?

非常感谢

最佳答案

这是一个列表分配。该子例程返回两件事。第一件事进入$callback,第二件事进入$getter

my ($callback, $getter) = create_find_callbacks_that_sum_the_size( );


所以,是的,您的答案是正确的。每一个都以create_find_callbacks_that_sum_the_size工厂中创建的匿名子例程之一结尾。

关于perl - 在Perl脚本中分配子例程引用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48411970/

10-13 00:51