Perl “与”的区别是什么;我的";及;我们的";就符号参照而言?

Perl “与”的区别是什么;我的";及;我们的";就符号参照而言?,perl,Perl,我们的: 我的: 区别在于,将设置一个包变量,而设置一个词法变量 这意味着使用声明的变量可以在当前范围之外访问 my $ref = "test"; my $var = "ref"; print "$$var\n"; #the output is blank 5 而词汇变量只存在于给定的范围内 use strict; use warnings; { our $g = 5; } { print our($g), "\n"; } 5 6. 在-e第1行的打印中使用未初始化值$a。 当

我们的:

我的:

区别在于,将设置一个包变量,而设置一个词法变量

这意味着使用声明的变量可以在当前范围之外访问

my $ref = "test";
my $var = "ref";
print "$$var\n"; #the output is blank
5
而词汇变量只存在于给定的范围内

use strict;
use warnings;
{
  our $g = 5;
}
{
  print our($g), "\n";
}
5
6.
在-e第1行的打印中使用未初始化值$a。

当您试图访问
$$var
时,您使用的是;仅适用于包/全局变量的:

{
  # stored in this block
  my $l = 5;
  {
    # accessible from this block
    print $l, "\n";
    $l = 6;

    # new variable stored in this lower block
    my $l = 7;
  }
  print $l, "\n";
}
{
  # yet another new variable
  print my($l), "\n";
}
5
5.
5.
5.
5.

这是反对的

5
5.


很少有任何理由使用。

这个关于软引用的标题不好的问题没有得到上述问题的回答。答:软引用始终引用包/全局命名空间中的变量。词法(my)变量不需要应用。软引用也被认为是有害的,并且被
使用严格的vars
阻止。大多数时候你想使用软引用,你应该考虑使用哈希。好吧,问题是不同的,我想我可能会支持重新开放。问题是,这通常被视为糟糕的形式,OP不应该尝试这样做(应该使用严格的),直到他能够回答IMO的这个问题。你的问题完美地回答了你的问题。@tjd,很抱歉我的评论措词不当。符号引用被认为是糟糕的形式。与其教OP射中他/她自己的脚,我建议不要回答这个问题。可能从符号引用中获益的人已经知道如何恰当地使用包变量。我关于这个问题的有效性的观点实际上是没有意义的。它应该作为和其他几个的完全复制品关闭。
{
  # stored in this block
  my $l = 5;
  {
    # accessible from this block
    print $l, "\n";
    $l = 6;

    # new variable stored in this lower block
    my $l = 7;
  }
  print $l, "\n";
}
{
  # yet another new variable
  print my($l), "\n";
}
our $g = 5;

my $symbolic_ref = 'g';

{
  no strict 'refs';
  # these are symbolic refs
  print $$symbolic_ref, "\n";
  print ${ *{$symbolic_ref} }, "\n";
  print ${ *{$symbolic_ref}{SCALAR} }, "\n";
}

# access it through the magic %:: variable
print ${ $::{$symbolic_ref} }, "\n";
print ${ $main::{$symbolic_ref} }, "\n";
my $v = 5;

my $ref = \$v;

print $$ref, "\n";
print ${ $ref }, "\n";