Max*_*ace 3 arrays perl reference list perl-data-structures
我是Perl的新手.我明白这my @a = ();
相当于my @a;
- 都初始化一个空数组.同样,my $a = [];
初始化一个引用的空数组$a
.
但是,我很困惑,my @arr = [];
这也是合法的Perl.根据ref()
和print
,@arr
是一个数组,而不是一个引用.它可以被推入,这似乎返回了数组中元素的数量.但它似乎包含对另一个数组的引用,也可以推送到:
#!/usr/bin/perl
use v5.16;
my @arr = [];
push(@arr, 1);
print join(", ", @arr) . "\n";
push(@arr[0], 11);
push(@arr[0], 12);
print "a[0]: " . join(", ", @{@arr[0]}) . "\n";
Run Code Online (Sandbox Code Playgroud)
输出
ARRAY(0xd6ede8), 1
a[0]: 11, 12
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?细节非常感谢.
@arr = [];
Run Code Online (Sandbox Code Playgroud)
是相同的
@arr = ([]);
Run Code Online (Sandbox Code Playgroud)
要么
@arr = (); $arr[0] = [];
Run Code Online (Sandbox Code Playgroud)
它创建一个包含一个元素的数组,一个对空数组的引用.
声明
@arr = [];
push @arr, 1;
Run Code Online (Sandbox Code Playgroud)
创建一个包含两个元素的数组:对空数组的引用和标量值1
,如说
@arr = ();
$arr[0] = [];
$arr[1] = 1;
Run Code Online (Sandbox Code Playgroud)
最后,在声明中
push(@arr[0], 11);
push(@arr[0], 12);
Run Code Online (Sandbox Code Playgroud)
第一个参数等效$arr[0]
于此示例中的数组引用.由于Perl> = v5.14,该push
函数可以对数组引用和数组进行操作,因此这些语句将元素添加到保存的(最初为空)数组引用中$arr[0]
.所以现在的内容与@arr
你说的相同
@arr = ();
$arr[0] = [ 11, 12 ]; # ref to array with two elements
$arr[1] = 1;
Run Code Online (Sandbox Code Playgroud)