在我上一期的问题中,@ amon给出了一个很好的答案.不过,他也说过:
首先,请不要这样做
my $foo = $x if $y.您会遇到意外和未定义的行为,因此最好避免使用该语法.
因为上面的结构我在CPAN中看到了很多来源,我想知道如何,何时,哪里可能是错的.(一些示例代码会很好).想知道,为什么perl允许它,如果它是坏的.
ike*_*ami 11
他的措辞实际上有点松懈.这个措辞实际上是我的.让我们从文档开始:(原文强调)
注意:未定义 a
my,state或our使用语句修饰符条件或循环结构(例如my $x if ...)修改的行为.变量的值可以是任何先前分配的值,或者可能是任何其他值.不要依赖它.perl的未来版本可能会与您尝试使用的perl版本有所不同.这里是龙.myundef
更确切地说,问题是在my可能尚未执行时使用词法变量.
考虑:
# Usage:
# f($x) # Store a value
# f() # Fetch and clear the stored value
sub f {
my $x if !@_;
if (@_) {
$x = $_[0];
} else {
return $x;
}
}
f('abc');
say "<", f(), ">" # abc
Run Code Online (Sandbox Code Playgroud)
这显然不是记录在案的行为my.
因为上面的结构我在CPAN中看到了很多来源
那个代码是错误的.