わたなべです。

TAKAHASHI Masayoshi <maki / rubycolor.org> writes:

:例えばPerlなひとには、「やっぱり正規表現ってオブジェクトだよね」
:とか言って、
:
:  UNAME_PAT = {"BSD" => /(Free|Net|Open)BSD/i, "Linux" => /Linux/i}
:
:  def machinename(uname)
:    UNAME_PAT.each{|name, pattern|
:      if pattern =~ uname
:        return name
:      end
:    }
:    nil
:  end
:
:  machinename("freebsd") #=> "BSD"
:
:みたいな、正規表現を値にしたハッシュを使ってみせるとか。

perl5.005以上ならqr//があるので、

  %UNAME_PAT = ("BSD" => qr/(Free|Net|Open)BSD/i, "Linux" => qr/Linux/i);

  sub machinename {
    my $uname = shift;
    while (my ($name, $pattern) = each %UNAME_PAT) {
      if ($uname =~ $pattern) {
	keys %UNAME_PAT;
        return $name;
      }
    }
    undef;
  }

  machinename("freebsd"); #=> "BSD"

と逆襲を喰らいます。

-- 
わたなべひろふみ