《perl语言入门》的 高级perl技巧章节里有下面的内容:
如果需要对按元素组处理列表的话,可以用natatime来取出对应位置上的元素:
use List::MoreUtils qw(natatime);
my $iterator = natatime 3, @array;
while (my @triad = $iterator->())
{ print "Got @triad\n"; }
这看起来让初学者难以理解。现在我们来逐行分析。
第一行 "use List::MoreUtils qw(natatime);" 表示需要使用模块List::MoreUtils,该模块不是perl自带的模块,需要进行下载。
第二行 "my $iterator = natatime 3, @array;" 是在调用natatime这个函数,并传递了两个参数 3 和@array。直到目前为止,都还可以理解。
第三行 "while (my @triad = $iterator->())",可能就难以理解了。首先需要说明 $iterator->() 是一个解引用的形式(perl引用的相关知识可以自行搜索),我们打印$iterator的值的话会打印以下内容:
List::MoreUtils::XS_sa=CODE(0x17d3628)
说明$iterator->()是对子程序的解引用,$iterator怎么会指向一个子程序呢? 唯一的可能就是natatime这个函数的返回值是一个子程序,这里是迭代器的用法。
未完待续