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