Вы не указали, что хотите. Я предполагаю, что вы хотите значения из каждой строки, по одной строке за раз.(2, 5 и 10, затем 3, 30 и 60)
Я не уверен, что вы знаете, что делает splice
.
my $first = splice @contents, 0;
my $second = splice @contents, 1;
my $third = splice @contents, 2;
должен быть
my $first = splice @fields, 0, 1;
my $second = splice @fields, 0, 1;
my $third = splice @fields, 0, 1;
Вы не указали вы только хотели, чтобы удалить один элемент, и вы не зарегистрированы для индекса сдвига, который происходит от ранних удалений из массива.
Возможно, нет причин удалить элементы из массива, так что это глупый код. Вы могли бы просто использовать
my $first = $fields[0];
my $second = $fields[1];
my $third = $fields[2];
Или даже
my ($first, $second, $third) = @fields;
Так как же получить поля из строки? split
.
my @fields = split(' ', $line);
Все вместе,
use strict;
use warnings;
use feature qw(say);
open(my $FILE, '<', shift) or die $!;
while (<$FILE>) {
my @fields = split(' ', $_);
my ($first, $second, $third) = @fields;
my $total = $first + $second + $third;
say $total;
}
Но это может быть упрощена.
use strict;
use warnings;
use feature qw(say);
use List::Util qw(sum);
while (<>) {
say sum split;
}
Ссылки:
Сообщение придет код, чтобы мы могли видеть, что вы в настоящее время пытается –
Покажите нам код. –
Я гарантирую, что perl читает каждую строку файла, а не только первый символ. Если вы публикуете свой код, мы можем сказать вам, что вы делаете неправильно. –