为什么此代码返回Not a ARRAY引用错误?
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";
解决方法
子例程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();