我不明白这将如何返回 4 作为答案。不确定子程序内部发生了什么。
sub bar {@a = qw (10 7 6 8);}
my $a = bar();
print $a;
# outputs 4
我不明白这将如何返回 4 作为答案。不确定子程序内部发生了什么。
sub bar {@a = qw (10 7 6 8);}
my $a = bar();
print $a;
# outputs 4
在标量上下文中调用子例程。子例程中的最后一条语句是对 的赋值@a
,它是一个表达式,因此成为隐含的返回值。在标量上下文中,这计算为赋值右侧返回的元素数(恰好与 中的元素数相同@a
)。
每个子例程的返回表达式(即return
语句的操作数和 sub 的任何最终表达式)都在与子例程调用本身相同的上下文中进行评估。
sub f {
...
return THIS if ...;
return THIS if ...;
...
if (...) {
...
THIS
} else {
...
THIS
}
}
在这种情况下,返回表达式是一个列表赋值。( @a
andqw
是赋值的操作数,因此在赋值之前进行评估。) 标量上下文中的列表赋值计算为其右侧计算的元素的数量。
请参阅标量与列表赋值运算符
在 Perl 中,如果没有return
指定语句,子例程的返回值是最后计算的表达式。
来自perlsub文档:
如果没有找到返回并且最后一条语句是一个表达式,则返回它的值。如果最后一条语句是循环控制结构,如 foreach 或 while ,则返回值未指定。空子返回空列表。