Perl:使用三元运算符未定义变量

Perl:使用三元运算符未定义变量,perl,Perl,其思想是:为$x提供一个默认值 问题是:为什么必须以这种方式预先声明$x?的结尾翻译为: # Does not work; after this line, defined( $x ) == false # my $x = defined( $$_ ) ? $$_ : "4321" for \$ENV{ASDF} my $x; # works fine $x = defined( $$_ ) ? $$_ : "4321" for \$ENV{ASDF} 因此,建立$x的词法范围的结尾翻译为:

其思想是:为
$x
提供一个默认值


问题是:为什么必须以这种方式预先声明
$x

结尾翻译为:

# Does not work; after this line, defined( $x ) == false
# my $x = defined( $$_ ) ? $$_ : "4321" for \$ENV{ASDF}
my $x;
# works fine
$x = defined( $$_ ) ? $$_ : "4321" for \$ENV{ASDF}

因此,建立
$x

的词法范围
的结尾翻译为:

# Does not work; after this line, defined( $x ) == false
# my $x = defined( $$_ ) ? $$_ : "4321" for \$ENV{ASDF}
my $x;
# works fine
$x = defined( $$_ ) ? $$_ : "4321" for \$ENV{ASDF}

因此,建立
$x

的词法范围,这一行相当于以下更简单的语句:


至于为什么有人会跳过这么多不必要的圈圈?不能说。

该行相当于以下更简单的语句:


至于为什么有人会跳过这么多不必要的圈圈?不能说。

这太糟糕了。我不能接受两个答案,但他们都回答了我的问题;一个是我想知道的,另一个是正确的方法。这太糟糕了。我不能接受两个答案,但他们都回答了我的问题;一个是我想知道的,另一个是正确的方法。原因:没有听说过
/
操作符。对于任何使用这个答案的人来说:这个操作符直到perl 5.10才存在。公平地说,这是我们所有人都这么做的原因之一,学习新东西:)。顺便说一句,引用也是不必要的。还可以执行
$x=defined($\ux)?$\ux:$ENV{ASDF}的“4321”
。然后,默认情况下,
defined
使用
$\uuz
,因此
$x=defined?$\ux:$ENV{ASDF}
的“4321”:为什么:没有听说过
/
操作符。对于任何使用这个答案的人来说:这个操作符直到perl 5.10才存在。公平地说,这是我们所有人都这么做的原因之一,学习新东西:)。顺便说一句,引用也是不必要的。还可以执行
$x=defined($\ux)?$\ux:$ENV{ASDF}的“4321”
。然后,默认情况下,
defined
使用
$\uuz
,因此
$x=defined?$\ux:$ENV{ASDF}的“4321”
my $x = $ENV{ASDF} // "4321";