我是Perl的新手;这是我关于这个主题的第二堂课。
我理解如何在Perl中使用引用(在基本级别),但我无法理解为什么。这是一个在教科书中引入参考文献的例子,我添加了评论。
$array_ref = ["val1", "val2", "val3"]; #create an array reference
print("$$array_ref[1]\n"); #immediately dereference it to print the second element
为什么要使用引用,而不是写:
@array_name = ("val1", "val2", "val3"); #create an array
print("$array_name[1]\n"); #print the second element
如果在这种情况下使用引用没有任何优势,您能提供一个可以产生影响的示例吗?
答案 0 :(得分:8)
你不会在那里使用引用。
数组和散列的值只能是标量,因此您可以使用引用将数组或散列存储到其中一个。
push @a, \@b;
只有标量列表可以传递给子例程,因此您可以使用引用将数组或哈希传递给其中一个。
f(\@a, \@b);
子程序只能返回标量列表,因此您可以使用引用来返回数组或散列。
return ( \@a, \@b );
IO对象和(直到最近)正则表达式对象不能存储在变量中的变量中。那里使用了参考文献。
open(my $fh, '<', $0) or die $!;
print(ref($fh), "\n");
等
答案 1 :(得分:3)
Perl中的参考有助于制作复杂的数据结构。像Perl中的多维数组一样可以使用引用实现:
my $a = [
[1, 2],
[3, 4],
];
print $a->[1]->[0]; #Will print 3
通过帮助参考,您甚至可以轻松构建复杂的数据结构,例如:
my $employee = {
name =>"xyz",
age => 22,
contactnums => [ 9xxxxxxxx, 7xxxxxxxx ],
addresses => {
office => 'something1',
residential => 'something2',
permanent => 'something3',
}
id => '12121',
};