Почему Perl читает только половину строк в файле?

Я хочу читать файл построчно, и для каждой строки разбивать строку и распечатывать ее. Но сценарий печатает только четные строки.

Файл:

line1:item1
line2:item2
line3:item3
line4:item4
line5:item5
line6:item6

и сценарий:

$FILE = "file";
open($FILE, "<", "file") or die("Could not open file.");

while (<$FILE>) {
    my $number = (split ":", <$FILE>)[1];
    print $number;
}

выход:

item2
item4
item6

person Danilo    schedule 07.01.2013    source источник


Ответы (4)


Это потому, что вы читаете две строки за цикл

while (<$FILE>) { # read lines 1, 3, 5
    my $number = (split ":", <$FILE>)[1]; # read lines 2, 4, 6
    print $number;
}

используйте это вместо

while (<$FILE>) {
    my $number = (split /:/)[1];
    print $number;
}
person Olaf Dietsche    schedule 07.01.2013

<$FILE> прочитает строку. Вы читаете одну строчку в то время, а другую в разрезе.

person fefe    schedule 07.01.2013

Потому что вы читаете одну строку в то время, а другую при разделении.

person Toto    schedule 07.01.2013

Маленькая ошибка. Вы читаете одну строку в while, а другую - в следующей строке (где вы используете split).

person Bharath Mg    schedule 07.01.2013