需要知道这一点,
Open File;
map{ chomp; $isword{uc join "", sort /./g}.= "$_+" } <File>;
想知道这个地图的作用和它将返回的内容。。无法理解排序以及uc加入"的原因。
用于此程序的文件包含单词列表。
请找个人帮忙。。
它返回的内容是无意义的,因为它被丢弃了。这使得它成为map
的一个奇怪的用法。通常会写
for (<File>) { chomp; $isword{uc join "", sort /./g}.= "$_+"; }
与相比是浪费内存
while (<File>) { chomp; $isword{uc join "", sort /./g} .= "$_+"; }
对于它遇到的每一行,它都会对构成该行的字符进行规范化。
apple becomes AELPP
orange becomes AEGNOR
art becomes ART
rat becomes ART
tar becomes ART
etc
它使用规范化的形式作为散列的关键字,并将行存储在该关键字处。
$isword{AELPP} = 'apple+';
$isword{AEGNOR} = 'orange+';
$isword{ART} = 'art+rat+tar+';
假设每一行都是一个单词,就可以快速查找单词的变位词。
sub find_anagrams { split /+/, $isword{uc join "", sort /./g} // '' }