为什么这个词法变量在循环后不保留其值?

qnt*_*ntm 1 perl

这是我的Perl代码:

use strict;
use warnings;

my @words = ("alpha", "bravo", "charlie");

(my $word = $_) foreach @words;

print $word;
Run Code Online (Sandbox Code Playgroud)

我希望这段代码可以做两件事之一:

  1. 打印字符串"charlie",这是$word循环完成后的最终值.
  2. 抱怨编译错误,因为它my $word是一个词法变量,其范围是foreach循环; 它不存在于最后一行.

相反,它似乎的价值$word就是undef,和Perl提出了警告,并打印出空字符串.

为什么?

Сух*_*й27 6

perldoc perlsyn

注意:my,state或我们使用语句修饰符条件或循环结构修改的行为(例如,我的$ x if ...)是未定义的.my变量的值可以是undef,任何先前分配的值,或者可能是其他任何值.不要依赖它.perl的未来版本可能会与您尝试使用的perl版本有所不同.这里是龙.

  • 因为它不完全等同.使用语句修饰符的版本不会创建新的词法范围,因此运行速度要快得多.(并且因为它不会创建一个新的词法范围,这也意味着词法变量不能仅限于该语句.) (2认同)