这个Perl代码无法理解

时间:2011-02-17 19:50:47

标签: perl

此代码段基本上逐行读取文件,类似于:

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?
    }
}

3 个答案:

答案 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;

如果输入很大,则输出可能很大。