scalar(keys(%hash)) 得出Hash的键的数量,在标量环境下得出的是一个用斜线分隔的已用空间和分配的总空
间的值组成的字串,。这个特点可以用于检查 Perl 的(编译好的)散列算法在你的数据集里
面性能是否太差.
=========================================
你可以用方括弧创建一个创建一个指向匿名数组的引用:
$arrayref = [1, 2, ['a', 'b', 'c', 'd']];
注意和@arrayref = (1, 2, ('a', 'b', 'c', 'd'));的区别
=============================================
区别以下两种付值,分别创建哈希和引用
%map = ('red', 0xff0000,'green', 0x00ff00,'blue',0x0000ff);
$hashref = {
'Adam' => 'Eve',
'Clyde' => $bonnie,}
箭头(->)操作符的类型是由右操作数决定的,也就是,由直接跟在箭头后面的东西决定。如果箭头后
面的东西是一个方括弧或者花括弧,那么左操作数就分别当作一个指向一个数组或者散列的
引用,由右边的操作数做下标定位。如果箭头后面的东西是一个左圆括弧,那么左操作数就
当作一个指向一个子过程的引用看待,然后用你在圆括弧右边提供的参数进行调用
==============================================
下面的东西每三行都是一样的,分别对应我们已经介绍过的三种表示法。(我们插入了一些
空白,以便将等效的元素对齐。)
$ $arrayref [2] = "Dorian"; #1
${ $arrayref }[2] = "Dorian"; #2
$arrayref->[2] = "Dorian"; #3
$ $hashref {KEY} = "F#major"; #1
${ $hashref }{KEY} = "F#major"; #2
$hashref->{KEY} = "F#major"; #3
& $coderef (Presto => 192); #1
&{ $coderef }(Presto => 192); #2
$coderef->(Presto => 192); #3
===================================
print $array[3]->{"English"}->[0];
请注意 $array[3] 和 $array->[3] 是不一样的。第一个东西讲的是 @array 里的第四
个元素,而第二个东西讲的是一个保存在 $array 里的数组(可能是匿名的数组)引用的
第四个元素
=========================================
@days : $#days得到的是最后脚标,即长度减一
undef(@days) 释放内存
-------------------------------------------
Hash的付值形式:
%map=();
%map=('red',1,'green',2);
%map=(red=>1,green=>2);
%map={red=>1,green=>2}
------------------------------------------------------------------------------------------
for $i (1..10) {
@array = somefunc($i);
$AoA[$i] = [ @array ]; # 正确!
$AoA = @array; # 错误!
$AoA[$i] = \@array; # 又错了!
}
相同的程序功能
for $i (1..10) { @array = somefunc($i); @{$AoA[$i]} = @array; }
概括来说:
$AoA[$i] = [ @array ]; # 最安全,有时候最快
$AoA[$i] = \@array; # 快速但危险,取决于数组的自有性
245
@{ $AoA[$i] } = @array; # 有点危险
2009年7月15日星期三
订阅:
博文评论 (Atom)
没有评论:
发表评论
写下你的意见和问题,一起进步。谢谢