2009-03-23 12:48 追記
サンプルコードを修正しました.(thanks to @clairvy

はじめに

正規表現を使う方法の一つとして、qr// (quote regex) 演算子というのがあります。
正規表現愛 – にぽたん研究所

上記のエントリとか モダンPerl入門 とかを読んで qr// 演算子の存在を今さらながら知ったので,練習に励む(?)今日この頃,というか今日.

3月に入って何もアウトプットしていないので,メモだけでも.

メモ

とりあえず次のような感じで使ってみてます.

my $re = {
  null => qr{^\s*$},
  trim => qr{^\s* (\S(?:.*\S)?) \s*$}x,
  int  => sub {
    # 1引数: \d{m}, 2引数以上: \d{m,n}, 引数なし] \d{1,}
    my $mn = join ',', @_ ? ( $_[2] ? @_[0,1] : @_ ) : ( 1, '' );
    qr{^\s* (\d{$mn}) \s*$}x;
  },
};
 
my $hoge = '';
my $fuga = '  ほげほげ  ふがふが    ';
my $foo  = '2009';
my $bar  = ' 2008';
 
# 空白文字だけ
if( $hoge =~ $re->{null} ) {
  print '空白文字だけ.';
}
 
# 文字列の両端の空白を除去する
my $fuga_trimmed = sprintf '%s', $fuga =~ $re->{trim};
 
# 指定した桁数(の範囲)の整数としてマッチさせ,ついでに両端の空白も除去する
my $foo_int = sprintf '%d', $foo =~ $re->{int}->(4);
my $bar_int = sprintf '%d', $bar =~ $re->{int}->(2,4);

おわりに

個人的には,

qr/.../;

よりも

qr{...};

で書くことがほとんどですね..

参考

こちらもあわせてどうぞ

“[perl] qr//演算子を今さら知りました” への3件のコメント

  1. clairvy より:

    qr{…}; に同意.
    なんだけど,最近 qw/ … / とかをよく見るような気がするので,// 派に転向しそうになってる派です.
    http://search.cpan.org/~ribasu.....x/Class.pm
    とか.
    http://search.cpan.org/~mrambe.....atalyst.pm
    とか.

    長いものに巻かれろ派です.

  2. issm より:

    @clairvy

    これまで ‘/’ を含む文字列をパタンマッチにかける機会が多かった,というのが,’{}’ で囲むようになった唯一の理由ですね.

    しかしよく考えると,’{}’ と打つのと ‘//’ と打つのとでは,打鍵や指の移動の量がけっこう違うんですよね.最近その辺が気になりだしてますw

    ということで,明らかに ‘/’ を含まないような文字列を対象とする場合くらいは ‘//’ で囲うクセをつけてもいいよね,とか思っていたりはします.

  3. clairvy より:

    ふむふむ.打鍵数もそうか.
    大方の場合は // で良いのかもしれませんね.

    どうでもいい短所としては,// だとエディタとかが良い感じにパースしてくんなかったり.というのがちょっと嫌な感じかもですね.上のとか.

コメントをどうぞ