gpt4 book ai didi

perl - 如何在Perl子程序中使用$ a和$ b

转载 作者:行者123 更新时间:2023-12-04 03:30:08 25 4
gpt4 key购买 nike

我想在我的匿名二进制函数中使用$a$b变量,就像在sort {$a <=> $b} (1, 2, 3)中完成的一样,但是我不知道为什么这样的代码

#!/usr/bin/env perl
use strict;
use warnings;

Foo::Bar(sub { $a + $b });

package Foo;
sub Bar {
my ($function) = @_;

for my $i (1, 2, 3) {
local ($a, $b) = ($i, $i);
print $function->() . "\n";
}
}

不起作用。尽管
#!/usr/bin/env perl
use strict;
use warnings;

Foo::Bar(sub { $_ });

package Foo;
sub Bar {
my ($function) = @_;

for my $i (1, 2, 3) {
local $_ = $i;
print $function->() . "\n";
}
}

工作良好。

我究竟做错了什么?

最佳答案

$a$b是特殊的程序包变量。您是从Foo::Bar包中调用main的,所以您需要设置$main::a$main::b才能使其正常工作。您可以使用 caller 来获取调用包的名称。这应该工作:

#!/usr/bin/env perl
use strict;
use warnings;

Foo::Bar(sub { $a + $b });

package Foo;
sub Bar {
my ($function) = @_;
my $pkg = caller;

for my $i (1, 2, 3) {
no strict 'refs';
local *{ $pkg . '::a' } = \$i;
local *{ $pkg . '::b' } = \$i;
print $function->() . "\n";
}
}

关于perl - 如何在Perl子程序中使用$ a和$ b,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8704008/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com