Perl

ファイル処理と正規表現

ファイルを安全に開き、1行ずつ読み、パターンに合う情報を取り出します。

Perl入門の講座一覧

01

ファイルを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
02

ファイルへ書き込む

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を学習しました。

>は上書き、>>は追記です。利用者が指定したパスをそのまま受け取る場合は、意図しないファイルを上書きしない検証が必要です。

03

正規表現で抽出する

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つ目の丸括弧で捕まえた文字列です。実際のメールアドレス検証を完全に行うには、仕様と専用モジュールを確認してください。

04

練習

アクセスログを1行ずつ読み、ステータスコードが404の行だけを別ファイルへ保存してください。件数も最後に表示し、空ファイルの場合も正しく動かしましょう。