此代码段基本上逐行读取文件,类似于:
Album=In Between Dreams
Interpret=Jack Johnson
Titel=Better Together
Titel=Never Know
Titel=Banana Pancakes
Album=Pictures
Interpret=Katie Melua
Titel=Mary Pickford
Titel=It's All in My Head
Titel=If the Lights Go Out
Album=All the Lost Souls
Interpret=James Blunt
Titel=1973
Titel=One of the Brightest Stars
所以它以某种方式将“Interpreter”与专辑和这张专辑连接起来。但我不太明白的是:
while ($line = <IN>) {
chomp $line;
if ($line =~ /=/) {
($name, $wert) = split(/=/, $line);
}
else {
next;
}
if ($name eq "Album") {
$album = $wert;
}
if ($name eq "Interpret") {
$interpret = $wert;
$cd{$interpret}{album} = $album; // assigns an album to an interpreter?
$titelnummer = 0;
}
if ($name eq "Titel") {
$cd{$interpret}{titel}[$titelnummer++] = $wert; // assigns titles to an interpreter - WTF? how can this work?
}
}
答案 0 :(得分:2)
只要文件句柄while
中有新行,$line
循环就会继续运行并将当前行放入<IN>
。 chomp
删除每行末尾的换行符。
split
将该行分为两等部分(/=/
是正则表达式)并将第一部分放在$name
和第二部分中参与$wert
。
%cd
是一个包含对其他哈希值的引用的哈希。第一个“级别”是解释器的名称。
(如果您仍然不理解,请提出更具体的问题。)
答案 1 :(得分:2)
cd
是哈希的散列。
$cd{$interpret}{album}
包含翻译专辑。
$cd{$interpret}{titel}
包含一个Titel数组,在最后if
中逐步填充。
Perl是一种非常简洁的语言。
答案 2 :(得分:2)
找出正在发生的事情的最佳方法是检查数据结构。在while循环之后,暂时插入此代码:
use Data::Dumper;
print '%cd ', Dumper \%cd;
exit;
如果输入很大,则输出可能很大。