- #!perl
-
use strict;
-
use 5.010;
-
my $ref_to_anym;
-
{
-
my @array=qw(a b c d);
-
$ref_to_anym=\@array;
-
}
程序在匿名块中定义了一个数组@array,并在块中将@array的引用存入全局变量$ref_to_anym,当程序离开匿名块后,数组名array失效,$ref_to_anym指向内存中的一个匿名列表.这个例子中,数组名array只用了一次,之后就再也没用过.编写程序的时候还要先想个合适的名字,并要防止命名冲突.能够让事情更加简单.
可以使用匿名数组构造器来简化操作(We can create such a value directly using the anonymous array constructor,which is yet another use for square brackets).
- #!perl
-
use strict;
-
use 5.010;
-
my $ref_to_anym=[qw(a b c d)];
这样,$ref_to_anym就直接指向了一个匿名列表.
方括号([])用其包含的所有值来构建一个匿名数组,并且返回这个匿名数组的引用(The square brackets take the value within(evaluated in a list context);establish a new,anonymous array initialized to those values;and(here's the important part)return a reference to that array).
在直接构造匿名数组引用时,qw也是可以省掉的:
- #!perl
-
use strict;
-
use 5.010;
-
my $ref=['a','b','c','d'];
-
say "@$ref";
Perl的很多语法都是为了减少按键次数,所以是否使用qw可以按需处理,在这个程序中,不使用qw反而输入更加麻烦.
匿名数组引用也支持嵌套:
- #!perl
-
use strict;
-
use 5.010;
-
my $ref=['Hello',[qw(a b c d)]];
-
say "$ref->[0]:@{$ref->[1]}";
以这样的方式来定义嵌套的匿名数组引用,可以完全省略掉数组的临时名字.
可以将匿名数组引用直接作为子程序的参数列表
- #!perl
-
use strict;
-
use 5.010;
-
sub disp {
-
for(@{$_[0]}) {
-
say "|$_|";
-
}
-
}
-
&disp([qw(a b c d e f)]);
可以直接返回一个匿名数组引用
- #!perl
-
use strict;
-
use 5.010;
-
sub cons_anym {
-
return[qw(aaa bb cc)];
-
}
-
my $ref=&cons_anym();
-
say "@$ref";
阅读(624) | 评论(0) | 转发(0) |