在Perl中声明/创建变量时,默认情况下是局部变量还是全局变量?
在本例中:在Perl中声明/创建变量时,默认情况下是局部变量还是全局变量?,perl,scope,Perl,Scope,在本例中: #!/usr/bin/perl $a = 4; # Is $a a local variable or a global variable? print $a, "\n"; $a的作用域是什么?该特定变量$a是与排序一起使用的预定义变量。但是,如果您使用$x,则会考虑 $main::x; 它是主脚本包“main”中的一个全局变量 请注意,如果您使用使用strict,那么perl将强制您在使用变量时保持特定性。在这种情况下,您不能仅使用 $x = 4; 因为它将生成一个致命的异
#!/usr/bin/perl
$a = 4; # Is $a a local variable or a global variable?
print $a, "\n";
$a的作用域是什么?该特定变量
$a
是与排序一起使用的预定义变量。但是,如果您使用$x
,则会考虑
$main::x;
它是主脚本包“main”中的一个全局变量
请注意,如果您使用使用strict
,那么perl将强制您在使用变量时保持特定性。在这种情况下,您不能仅使用
$x = 4;
因为它将生成一个致命的异常全局符号“$x”需要在…
处显示包名,因此通常您会使用my
或our
声明变量:
my $x = 4;
但是,您也可以使用$main::x
,只要指定完整的变量名。使用my或local作为作用域变量
除非用或关键字声明,否则Perl中的变量通常在包名称空间中具有全局作用域。[我要假设您使用了$x
而不是$a
,因为$a
非常特殊(因为排序使用了它)。]
$x是局部变量还是全局变量
Perl中的两种变量是词法变量和包变量
没有声明[1],变量是包变量[2]。这就是你所拥有的。具体来说,它是$main::x
(其中main
是编译代码的任何包)的缩写
包变量是全局的,这意味着它们可以从代码中的任何地方看到。也就是说,可能需要使用他们的全名(例如,$main::x
)才能在某些地方看到他们
你的问题是学术性的,因为你应该始终使用严格
明确禁止您使用未声明的变量
某些变量(例如,$\uuu
,$1
,$a
等)是为您预先声明的,因此这不适用于它们
退房它可能有点过时了,但它将帮助您了解Perl中scope的主要特性代码>和使用严格代码>到Perl脚本的顶部<代码>使用严格代码>将帮助您捕获不需要的全局变量。我不想使用我的或本地的它来考虑哪种类型的variable@user1363308然后它在包名称空间中是全局的。local
不声明变量<代码>局部
定位现有变量。局部
不影响变量的范围。它只是改变了它的值。$a
唯一的特殊之处是它不会发出严格的警告。(不同于,比如说,$。
,这意味着无论你在哪个软件包中,$::。
)我投了赞成票,但我认为添加“本地”和“我们的”关键字可能也会有所帮助。