在这个例子中:
#!/usr/bin/perl
$a = 4; # Is $a a local variable or a global variable?
print $a, "\n";
$a有什么样的范围?
该特定变量$a
是与 一起使用的预定义变量sort
。但是,如果您使用$x
它将被考虑
$main::x;
它是包“main”中的一个全局变量,它是主脚本。
请注意,如果您use strict
始终应该使用 , perl 将强制您在使用变量时要具体。在这种情况下,您不能只使用
$x = 4;
因为它会产生一个致命的异常Global symbol "$x" requires explicit package name at ...
通常你会使用my
orour
来声明变量:
my $x = 4;
但是,您也可以使用$main::x
,只要您指定完整的变量名。
[我会假装你用过$x
,而不是$a
因为$a
有点特别(因为它的使用sort
)。]
$xa 是局部变量还是全局变量?
Perl 中的两种变量是lexical和package。
没有声明[1],变量是包变量[2]。这就是你所拥有的。具体来说,它是(编译代码的包在$main::x
哪里)的简写。main
包变量是全局的,这意味着可以从代码中的任何位置看到它们。也就是说,可能需要使用他们的全名(例如$main::x
)才能从某些地方看到他们。
您的问题是学术性的,因为您应该始终使用use strict;
明确禁止您使用未声明变量的内容。
一些变量(例如$_
, $1
,$a
等)是为您预先声明的,所以这并不适用。