【发布时间】:2019-04-14 12:40:39
【问题描述】:
我有一个函数func,它可以返回单个值或值列表,具体取决于函数的调用方式。所以对于这个特定的函数,调用者会知道什么时候只期望一个返回值,因此希望使用更简单的语法my $var = func( ... ) 而不是my ($var) = func( ... )。问题在于,在某些情况下,单个值会转换为具有一个元素的列表/数组的大小,而在某些情况下则不会。例如:
use feature qw(say);
use strict;
use warnings;
for (1..4) {
no strict 'refs';
my $a = &{"func".$_}();
say $a;
}
sub func1 {
return ("Hi");
}
sub func2 {
my @a = ("Hi");
return @a;
}
sub func3 {
my @a = ("Hi");
return (@a);
}
sub func4 {
my @a = ("Hi");
return (pop @a);
}
给出输出:
Hi
1
1
Hi
为什么我在某些情况下得到 1 而在其他情况下得到"Hi"?
【问题讨论】:
-
在两种中间情况下,您返回的是一个 array。标量上下文中数组的标准行为是返回元素的数量。
"Hi"是标量,pop也是。
标签: perl