Не может иметь смысла из этого кода Perl - PullRequest
0 голосов
/ 17 февраля 2011

Этот фрагмент в основном читает файл строка за строкой, которая выглядит примерно так:

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

Так что это как-то связывает «Интерпретатор» с альбомом, а этот альбом со списком названий. Но я не совсем понимаю, как:

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 ]

2 голосов
/ 17 февраля 2011

cd - это хэш хэшей.$cd{$interpret}{album} содержит альбом для переводчика.

$cd{$interpret}{titel} содержит массив Titel, который постепенно заполняется за последние if.

Perl - очень лаконичный язык.

2 голосов
/ 18 февраля 2011

Лучший способ выяснить, что происходит, - это проверить структуру данных. После цикла while временно вставьте этот код:

use Data::Dumper;
print '%cd ', Dumper \%cd;
exit;

Может иметь большой выход, если вход большой.

2 голосов
/ 17 февраля 2011

Цикл while продолжает работать и помещает текущую строку в $line, пока в дескрипторе файла <IN> появляются новые строки. chomp удаляет символ новой строки в конце каждой строки.

split разбивает строку на две части со знаком равенства (/=/ - это регулярное выражение ) и помещает первую часть в $name, а вторую - в $wert.

%cd - это хеш, который содержит ссылки на другие хеши. Первый «уровень» - это имя переводчика.

(Пожалуйста, задавайте более конкретные вопросы, если вы все еще не понимаете.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...