Perl函数未显式return却返回6而非7的原因咨询
Perl子例程返回值疑问
代码示例
sub func1 { my $x = shift; #print(" $x "); ++$x; #print(" $x "); $x++; #print (" $x "); } my ($v1) = func1(5); print("this is op: $v1");
运行输出
this is op: 6
疑问点
程序运行后输出值为6,但函数中既没有显式print或return语句,还对变量$x做了两次自增操作,为何返回的是6而非7?
问题解析
- Perl子例程的默认返回规则:Perl子例程如果没有写
return语句,会默认返回最后一条执行语句的计算结果。 - 自增运算符的行为差异:
++$x(前置自增):先将$x的值加1,再返回更新后的值。传入初始值5时,执行这条语句后$x变为6,该语句的返回值也是6。$x++(后置自增):先返回$x当前的数值,再将$x的值加1。执行这条语句时,它的返回值是当前的6,之后$x才会变成7,但这个7不会作为子例程的返回值——因为子例程默认返回的是最后一条语句的结果,也就是$x++返回的6。
综上,子例程func1最终返回的是最后一条语句$x++的结果6,因此$v1的值为6,输出对应结果。
内容的提问来源于stack exchange,提问作者bilal rumani
相关产品推荐
相关产品推荐

