gpt4 book ai didi

perl - my 的词法范围

转载 作者:行者123 更新时间:2023-12-04 16:23:15 27 4
gpt4 key购买 nike

几乎每个编写的 perl 程序都使用这个习语:

{
open(my $fh, '>>', $filename) || die "you lose";
print $fh $blah;
}

但是,我不想死,我只想跳过打印。
所以我写:
{
print "you lose\n" unless (open(my $fh, '>>', $filename) and print $fh $blah);
}

并得到“不能在 ./o.pl 第 5 行使用未定义的值作为符号引用”来解决我的麻烦。

删除 my(错误形式)可消除此错误,如下所示:
{
my $fh;
print "you lose\n" unless (open($fh, '>>', $filename) and print $fh $blah);
}

但为什么?

为什么,在损坏的代码中,没有 $fh存在于 open(my $fh...到块的结束( })?

最佳答案

my直到语句结束才生效。

出于同样的原因,my $x = $x不会看到新的 $x在声明的右侧。它会看到旧的 $x .

例如

use strict;
use warnings;

my $x = 42;

{
my $x = $x + 1;
print "inside, x = $x\n";
}

print "outside, x = $x\n";

这打印:
inside, x = 43
outside, x = 42

您的 open语句大致相当于内部 my上面的声明。如果您有 $fh在外部作用域中声明,会发生令人惊讶的乐趣:您最终可能会打印到错误的文件。

关于perl - my 的词法范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20684010/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com