要想高效使用 Perl,理解引用是基础。由于引用是标量,而数组和哈希只能包含标量,所以引用是嵌套这些数据结构的关键。
可以使用反斜杠运算符\为已有的变量和子程序创建引用:
\$scalar创建标量引用(可以是任何标量,例如\1,而不只是变量)。\@array创建数组引用。\%hash创建哈希引用。\&sub创建代码引用。你还可以为数组、哈希和子程序创建所谓的匿名引用:
['Alice', 'Bob', 'Charlie']创建匿名数组引用。{foo => 'a', bar => 'b', baz => 'c'}创建匿名哈希引用。sub { return 1 }创建匿名代码引用。警告:在某些上下文里,Perl 中的花括号可能会产生歧义。如果你没有得到预期的哈希引用,可以在前面加上一个加号来消除歧义,例如+{}。更多信息请参见花括号。
可以使用箭头运算符->访问引用:
$ref->[0]访问数组引用中的元素。$ref->{foo}访问哈希引用中的值。$ref->($arg)通过代码引用调用子程序。复杂数据结构中的数据,例如多维数组和嵌套哈希,可以通过链式下标访问,例如$ref->{foo}[0]{bar}(等同于$ref->{foo}->[0]->{bar})。
如果要解引用整个数组或哈希,可以使用箭头运算符后接@*或%*,例如$ref->@*或$ref->%*。
你还可以把*替换成一个下标,来获取数组引用或哈希引用的切片,例如$ref->@[0..2]或$ref->@{'Foo', 'Bar'}。
对于切片,符号变化的规则与数组变量和哈希变量相同。