"my $ foo = $ x if $ y"语法有什么问题?

Nem*_*emo 8 perl

在我上一期的问题中,@ amon给出了一个很好的答案.不过,他也说过:

首先,请不要这样做my $foo = $x if $y.您会遇到意外和未定义的行为,因此最好避免使用该语法.

因为上面的结构我在CPAN中看到了很多来源,我想知道如何,何时,哪里可能是错的.(一些示例代码会很好).想知道,为什么perl允许它,如果它是坏的.

ike*_*ami 11

他的措辞实际上有点松懈.这个措辞实际上是我的.让我们从文档开始:(原文强调)

注意:未定义 a my,stateour使用语句修饰符条件或循环结构(例如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中看到了很多来源

那个代码是错误的.