Perl中引用的目的是什么?

时间:2014-01-25 15:47:47

标签: perl

我是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

如果在这种情况下使用引用没有任何优势,您能提供一个可以产生影响的示例吗?

2 个答案:

答案 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',
};