ここには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