Perl有一个系统变量,用于在给定的上下文中一般访问变量,例如,使用$1
在正则表达式之后访问第一个分组项或在循环中使用$_
来访问当前值。
我很好奇是否有来自子程序的返回值的类似系统变量。
离。
my $var = (format($num)) ? $_ : 'N/A';
其中$_
是系统变量,用于访问format($num)
的结果(如果已定义)。
答案 0 :(得分:6)
不,没有。
但是,您可以重写示例以使用or ||
或defined-or //
运算符。
my $foo = frobnicate() || 'N/A'; # only true values, so no 0, q{} or undef
my $bar = frobnicate() // 'N/A'; # no undef
当然,这不会保持价值一段时间在代码中进一步使用它。
这仅在sub的返回值只有一个值时才有效。如果返回了一个列表,它将使用列表中最右侧的值。
sub frobnicate { qw/a b 0/ }
my $var = frobnicate() || 'N/A';
say $var;
以上内容将打印N/A
。
sub frobnicate { qw/a b c/ }
my $var = frobnicate() || 'N/A';
say $var;
虽然这会打印c
。
为了拥有短代码,不要试图做空。大多数情况下,您想要的是易于阅读的代码。
请注意format
is a keyword。不要将它用作子程序标识符。