0

在这个例子中:

#!/usr/bin/perl

$a = 4; # Is $a a local variable or a global variable?
print $a, "\n";

$a有什么样的范围?

4

3 回答 3

7

该特定变量$a是与 一起使用的预定义变量sort。但是,如果您使用$x它将被考虑

$main::x;

它是包“main”中的一个全局变量,它是主脚本。

请注意,如果您use strict始终应该使用 , perl 将强制您在使用变量时要具体。在这种情况下,您不能只使用

$x = 4;

因为它会产生一个致命的异常Global symbol "$x" requires explicit package name at ...通常你会使用myorour来声明变量:

my $x = 4;

但是,您也可以使用$main::x,只要您指定完整的变量名。

于 2013-01-06T19:19:04.990 回答
3

[我会假装你用过$x,而不是$a因为$a有点特别(因为它的使用sort)。]

$xa 是局部变量还是全局变量?

Perl 中的两种变量是lexicalpackage

没有声明[1],变量是包变量[2]。这就是你所拥有的。具体来说,它是(编译代码的包在$main::x哪里)的简写。main

包变量是全局的,这意味着可以从代码中的任何位置看到它们。也就是说,可能需要使用他们的全名(例如$main::x)才能从某些地方看到他们。



  1. 您的问题是学术性的,因为您应该始终使用use strict;明确禁止您使用未声明变量的内容。

  2. 一些变量(例如$_, $1,$a等)是为您预先声明的,所以这并不适用。

于 2013-01-06T20:26:53.893 回答
0

使用mylocal作为范围变量

除非使用mylocal关键字声明,否则 Perl 中的变量通常在包命名空间内具有全局范围。

于 2013-01-06T19:21:30.060 回答