我是由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 }
这是一个列表分配吗?
非常感谢答案 0 :(得分:2)
这是一个列表分配。子程序返回两件事。第一件事进入$callback
,第二件事进入$getter
:
my ($callback, $getter) = create_find_callbacks_that_sum_the_size( );
所以,是的,你的回答是正确的。每个都以create_find_callbacks_that_sum_the_size
工厂中创建的一个匿名子程序结束。