假设我将数组定义为:
my @my_array = ["hello", "world"]
在我的代码中使用$my_arrayvs以后有什么区别吗?\@my_array
我认为它们都是对 的标量引用@array,但我认为我已经看到我的一个程序的行为因我使用的程序而异。
他们之间有什么区别吗?
假设我将数组定义为:
my @my_array = ["hello", "world"]
在我的代码中使用$my_arrayvs以后有什么区别吗?\@my_array
我认为它们都是对 的标量引用@array,但我认为我已经看到我的一个程序的行为因我使用的程序而异。
他们之间有什么区别吗?
@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")。
\@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”的数组的引用。