当我在Perl中声明/创建变量时,默认情况下是本地变量还是全局变量?

时间:2013-01-06 19:16:47

标签: perl scope

在这个例子中:

#!/usr/bin/perl

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

$ a 有哪种范围?

3 个答案:

答案 0 :(得分:7)

该特定变量$a是与sort一起使用的预定义变量。但是,如果您使用$x,则会将其视为

$main::x;

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

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

$x = 4;

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

my $x = 4;

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

答案 1 :(得分:3)

[我将假装您使用$x代替$a,因为$a有点特殊(由于sort使用它)。 ]

  

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

Perl中的两种变量是 lexical package

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

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



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

  2. 某些变量(例如$_$1$a等)是预先声明的,因此不会应用它们。

    < / LI>

答案 2 :(得分:0)

使用我的本地作为范围变量

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