ファイルを1行ずつ読む
ファイルハンドルをopenで開き、失敗したらdieで理由を表示します。UTF-8を明示して、入力の改行をchompで処理します。
read.plPERL
use strict;
use warnings;
use utf8;
binmode STDOUT, ':encoding(UTF-8)';
open my $fh, '<:encoding(UTF-8)', 'scores.txt'
or die "開けません: $!";
while (my $line = <$fh>) {
chomp $line;
print "読み込み: $line\n";
}
close $fh;scores.txt / 実行結果TEXT / OUTPUT
Aki,84
Ren,67
読み込み: Aki,84
読み込み: Ren,67ファイルへ書き込む
write.plPERL
use strict;
use warnings;
use utf8;
open my $out, '>>:encoding(UTF-8)', 'memo.txt'
or die "書き込めません: $!";
print {$out} "Perlを学習しました。\n";
close $out;確認COMMAND / OUTPUT
cat memo.txt
Perlを学習しました。>は上書き、>>は追記です。利用者が指定したパスをそのまま受け取る場合は、意図しないファイルを上書きしない検証が必要です。
正規表現で抽出する
regex.plPERL
use strict;
use warnings;
my @lines = ('連絡先: aki@example.com', '電話: 03-1234-5678');
for my $line (@lines) {
if ($line =~ /([\w.+-]+@[\w.-]+\.[A-Za-z]{2,})/) {
print "メール: $1\n";
}
}実行結果OUTPUT
メール: aki@example.com=~で文字列にパターンを適用します。$1は1つ目の丸括弧で捕まえた文字列です。実際のメールアドレス検証を完全に行うには、仕様と専用モジュールを確認してください。
練習
アクセスログを1行ずつ読み、ステータスコードが404の行だけを別ファイルへ保存してください。件数も最後に表示し、空ファイルの場合も正しく動かしましょう。