gpt4 book ai didi

perl - 为什么不能在 Perl 中本地化词法变量?

转载 作者:行者123 更新时间:2023-12-01 09:27:46 25 4
gpt4 key购买 nike

我有以下 Perl 代码。

use warnings;
use strict;

my $x = "global\n";



sub a {
print $x;
}

sub b {
local $x = "local\n";
a();
}

a();
b();
a();

即使 $x 在 b() 子例程中具有作用域,为什么 Perl 不允许本地化它?

最佳答案

您不能将 my 使用的词法范围与包变量的命名空间全局范围混合(关键字 local 只能用于后者)。一旦你定义了源代码中的 $x ,Perl 就会把它当作词法范围的变量。你仍然可以访问包变量(使用 $::x)——尽管这只是意味着你有两个完全独立的变量在使用中,并且不允许你同时引用任何一个$x.

您可以通过使用 our 而不是 my 来实现与您似乎正在尝试做的事情非常相似的事情:

our $x = "global\n";

our 关键字创建包变量的词法范围别名。

然后输出:

global
local
global

关于perl - 为什么不能在 Perl 中本地化词法变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20176433/

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