Perl でファイルから行を読み込む

Perl はたまにしか使わないからいつまでたっても覚えない。のでメモ。

ファイルから1行だけ読み込むには:

use strict;
use warnings;

my $file = shift;
open(my $fh, '<', $file) or die "$file: $!";
my $line = <$fh>;

print $line;

実行結果:

^o^ > type sample.txt
sun
mon
tue
wed
thu
fri
sat

^o^ > perl read_line.pl sample.txt
sun

スカラー変数じゃなくて配列変数に代入すると、ファイル全体が1行ずつの配列になる。

use strict;
use warnings;

my $file = shift;
open(my $fh, '<', $file) or die "$file: $!";
my @lines = <$fh>;

foreach my $line (@lines) {
    print $line;
}

実行結果:

^o^ > perl read_lines.pl sample.txt
sun
mon
tue
wed
thu
fri
sat

1行ずつ読み込みながら処理するには、while ループと一緒に使う:

use strict;
use warnings;

my $file = shift;
open(my $fh, '<', $file) or die "$file: $!";

while (my $line = <$fh>) {
    print uc($line);
}

実行結果:

^o^ > perl read_lines_loop.pl sample.txt
SUN
MON
TUE
WED
THU
FRI
SAT