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