Есть три проблемы здесь
Вы пытаетесь добавить строки, как 'Samsung 46' + 'RIM 16'
Читает весь файл в @lines
, а затем попытаться прочитать больше из файл в цикле while
. Этот цикл никогда не вводится, потому что вы уже прочитали до конца файла
Вы добавляете $total
к (необъявленной) переменной $line
в пределах цикла, а не наоборот. Так $total
остается на нуле и $line
сохраняет с нулём к нему добавляется
Лучше использовать while
для чтения файлов, если вам нужно что-то другое, чем последовательный доступ к записям, поэтому удаление @lines
начало.
Непонятно, какую часть записей вы хотите скопировать. Эта программа разбивает строки на пробелы и объединяет последнее поле каждой строки.
Вы должны всегдаuse strict
и use warnings
в начале каждой программы. Это мера, которая облегчит поиск ошибок в вашем коде. Также лучше использовать лексические файлы, а не глобальные, и трехпараметрическую форму open
.
use strict;
use warnings;
open my $units, '<', 'units.txt' or die "Can't open it: $!";
my $total;
while (<$units>) {
my @fields = split;
$total += $fields[-1];
}
print $total;
выход
179
'моя = @ строка,' читают все строки файла, не оставляя ни для 'в то время как ()' читать. Тогда есть проблема, что 'pop @ lines' не имеет смысла. Вы хотите последнее поле строки, а не последнюю строку. –
ikegami
, возможно, вы хотите сказать (@lines), но pop @lines возвращает всю строку, которая оценивается в 0, поэтому вы добавляете 0 к сумме. Вам нужно разобрать каждую строку для этого номера – Davs
@Davs: вы должны представить это как ответ – Borodin