Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Perl中声明/创建变量时,默认情况下是局部变量还是全局变量?_Perl_Scope - Fatal编程技术网

在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
    唯一的特殊之处是它不会发出严格的警告。(不同于,比如说,
    $。
    ,这意味着无论你在哪个软件包中,
    $::。
    )我投了赞成票,但我认为添加“本地”和“我们的”关键字可能也会有所帮助。