2008-03-05から1日間の記事一覧

6.10 変数を含むパターンの処理速度を向上させる

パターンが1つしか無い場合 while ($line = <>) { if ($line =~ /$pattern/o) { # 処理をここに書く } } 複数のパターンがある場合 @pats = map { qr/$_/ } @strings; while ($line = <>) { for $pat (@pats) { if ($line =~ /$pat/) { # 処理をここに書く }…

6.9 シェルのワイルドカードを使用する

次のサブルーチンを使用する。 sub glob2pat { my $globstr = shift; my %patmap = ( '*' => '.*', '?' => '.', '[' => '[', ']' => ']', ); $globstr =~ s{(.)} { $patmap{$1} || "\Q$1" }ge; return '^' . $globstr . '$';

6.8 特定範囲の行を抽出する

開始パターンにマッチする箇所から終了パターンにマッチする箇所までの全ての行を抽出したい。または、n行目からm行目までの全ての行を抽出したい。 ..演算子、もしくは、...演算子を使う。 ..演算子は、開始パターン(左オペランド)にマッチする部分文字列が…

6.7 セパレータ付きのレコードを読み込む

各種の文字列で区切られたレコードを読み込みたい。 ファイル全体を読み込んだ後、splitを使用する。 undef $/; @chunks = split(/pattern/, <FILEHANDLE>);</filehandle>