ここには3つの問題があります
次のような文字列を追加しようとしています'Samsung 46' + 'RIM 16'
ファイル全体を読み込んでから、ループ内@linesのファイルからさらに読み込もうとします。whileすでにファイルの最後まで読み取っているため、そのループには決して入りません
その逆ではなく、ループ内$totalの(宣言されていない)変数に追加しています。$lineだから$totalゼロのままで、それに$lineゼロを加え続けます
whileレコードへの順次アクセス以外の何かが必要でない限り、ファイルを読み取るために使用するのが最善です。そのため、削除すること@linesから始めます。
レコードのどの部分を蓄積したいかは完全には明らかではありません。このプログラムは空白で行を分割し、各行の最後のフィールドを一緒に追加します。
すべてのプログラムの開始時に常に 行う必要がuse strictあります。use warningsこれは、コード内のバグを見つけやすくする手段です。また、使用したグローバル ファイル ハンドルと、3 パラメータ形式の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