Вы не указали, что вы хотите. Я предполагаю, что вы хотите значения из каждой строки, по одной строке за раз. (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;
}
Ссылки: