2

假设我将数组定义为:

my @my_array = ["hello", "world"]

在我的代码中使用$my_arrayvs以后有什么区别吗?\@my_array

我认为它们都是对 的标量引用@array,但我认为我已经看到我的一个程序的行为因我使用的程序而异。

他们之间有什么区别吗?

4

2 回答 2

11
  • @array是数组
  • $var是标量
  • \@array是标量 - 对数组的引用@array
  • ("hello", "world")是列表(兼容@array
  • ["hello", "world"]标量,对数组的引用。这与将数组存储("hello", "world")在变量中@array然后\@array从中获取引用相同。

当您使用:

my $my_array = ["hello", "world"]

$my_array您创建引用数组的变量("hello", "world")

当您使用:

my @my_array = ["hello", "world"]

您创建一个包含单个元素的数组:对数组的引用("hello", "world")

于 2013-07-29T03:27:27.083 回答
1

\@my_array和有区别$my_array吗?这取决于:

my @my_array = qw(hello world); #Note the use of parentheses
my $my_array = "Hello, I am just some random string!";

\@my_array在上述情况下,和之间存在差异$my_array。变量名称的相似性并不一定意味着关系。

然而:

my @my_array qw(hello world);
my $my_array = \@my_array;

\@my_array并且$my_array将是相同的。更改@my_array将反映在参考中$my_array

在您的代码中,您有:

my @my_array = ["hello", "world"];

这真是一个奇怪的语法......

[...]语法是定义对数组的引用。大多数时候,你会看到这样的东西:

my $array_ref = ["hello", "world"];  #Note the assignment to a scalar and not an array

或这个:

my @my_array = ("hello", "world");  #Note the parentheses and not straight brackets

使用Data::Dumper查看这个程序:

use strict;
use warnings;
use feature qw(say);
use Data::Dumper;
my @my_array = ["hello", "world"];
say Dumper \@my_array;

输出是:

$VAR1 = [
      [
        'hello',
        'world'
      ]
    ];

这是说有一个单一元素的数组(即你@my_array唯一的 contains $my_array[0]),并且该数组中的元素是对另一个包含两个元素“hello”和“world”的数组的引用。

于 2013-07-29T15:34:24.610 回答