gpt4 book ai didi

perl - 为什么我不能在 Perl 中做 "shift subroutine_name()"?

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

为什么此代码返回 Not an ARRAY reference错误?

sub Prog {
my $var1 = 1;
my $var2 = 2;
($var1, $var2);
}

my $variable = shift &Prog;
print "$variable\n";

如果我使用中间数组,我可以避免错误:
my @intermediate_array = &Prog;
my $variable = shift @intermediate_array;
print "$variable\n";

上面的代码现在输出“1”。

最佳答案

子程序Prog返回标量列表。 shift函数只对数组进行操作。数组和列表不是一回事。数组有存储,但列表没有。

如果您想要的是获取列表的第一个元素 Prog返回,请执行以下操作:

sub Prog {
return ( 'this', 'that' );
}

my $var = (Prog())[0];
print "$var\n";

我将子调用更改为 Prog()而不是 &Prog因为后者绝对是旧风格。

您还可以将第一个元素分配给其他人显示的标量:
my ($var) = Prog();

这与以下内容大致相同:
my ($var, $ignored_var) = Prog();

然后忽略 $ignored_var .如果你想清楚地表明你忽略了第二个值而不实际给它一个变量,你可以这样做:
my ($var, undef) = Prog();

关于perl - 为什么我不能在 Perl 中做 "shift subroutine_name()"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28310118/

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