【发布时间】:2011-05-19 07:19:25
【问题描述】:
此代码通过一组路径中唯一基名存根的哈希键编译一组。
%stubs = map { $f=basename $_; $f =~ /^([A-Za-z]+[0-9]+)\./ ; $1=>() } @pathlist;
为什么我需要$f 引用?我以为我可以接受:
%stubs = map { basename; /^([A-Za-z]+[0-9]+)\./; $1=>() } @pathlist;
但我没有匹配。我不允许在地图块中修改 $_ 吗?
对于那些想知道代码在做什么的人:
对于每个 $path (@pathlist),它获取基本名称,匹配第一个字母数字序列,然后返回第一个括号匹配作为空列表值的键。示例:
/some/dir/foo123.adfjijoijb
/some/dir/foo123.oibhobihe
/some/dir/bar789.popjpoj
返回
foo123 => ()
bar789 => ()
之后,我使用地图的键作为值集进行处理。
【问题讨论】:
-
我想知道
$1=>()构造——它返回 1 元素列表,并且您分配给 hash 所以您必须有一个偶数大小的列表。试试看:perl -MData::Dumper -we 'my %hash = map { /(\d+)/; $1 => () } 1..5; print Dumper(\%hash)'
标签: perl map implicit local-variables