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

时间:2014-10-06 11:20:37

标签: perl

这是我的Perl代码:

use strict;
use warnings;

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

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

print $word;

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

  1. 打印字符串" charlie",这是循环完成后$word的最终值。
  2. 包含编译错误,因为my $word是一个词法变量,其范围是foreach循环;它不存在于最后一行。
  3. 相反,似乎$word的值为undef,Perl会发出警告并打印空字符串。

    为什么?

1 个答案:

答案 0 :(得分:6)

来自perldoc perlsyn

  

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