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