これはMoritz Lenz氏のWebサイトPerlgeek.deで公開されているブログ記事"Perl 5 to 6" Lesson 09 - Comparing and Matchingの日本語訳です。
原文はCreative Commons Attribution 3.0 Germanyに基づいて公開されています。
本エントリにはCreative Commons Attribution 3.0 Unportedを適用します。
Original text: Copyright© 2008-2010 Moritz Lenz
Japanese translation: Copyright© 2011 SATOH Koichi
NAME
"Perl 5 to 6" Lesson 09 - 比較とマッチング
SYNOPSIS
"ab" eq "ab" True
"1.0" eq "1" False
"a" == "b" True
"1" == 1.0 True
1 === 1 True
[1, 2] === [1, 2] False
$x = [1, 2];
$x === $x True
$x eqv $x True
[1, 2] eqv [1, 2] True
1.0 eqv 1 False
'abc' ~~ m/a/ True
'abc' ~~ Str True
'abc' ~~ Int False
Str ~~ Any True
Str ~~ Num False
1 ~~ 0..4 True
-3 ~~ 0..4 False
DESCRIPTION
Perl6もオペランドをスカラコンテキストで評価する文字列比較演算子(eq
, lt
, gt
, le
, ge
, ne
; cmp
はleg
になりました)を持っています。
同様にPerl5にあった数値比較演算子もまだ残っています。
オブジェクトは単なるbless
されたリファレンスではなくなったので、オブジェクト同士を比較する新しい方法が必要です。
===
は全く同一の値に対してのみ真を返します。数値や文字列などの不変型に対しては通常の等価性テストを行い、他のオブジェクトに対しては両辺が同じオブジェクトを参照している場合のみ(C++のアドレス比較のように)真を返します。
eqv
は両辺の等価性、つまり同じ型と値を持っているかどうかをテストします。
同じ手順で構築されたデータ構造は等価になります。
Smart matching
Perl6には「スマートマッチ」演算子と呼ばれる「何でも比較」演算子があり、~~
と書きます。
この演算子は不変型に対しては単に等値性の比較を行います。
型とのスマートマッチは型適合性をチェックします。
正規表現とのスマートマッチは正規表現とのマッチングを行います。
スカラとRange
オブジェクトのマッチングはスカラが範囲内にあるかどうか調べます。
他にももっと高度なマッチングがあります: 例えば引数リスト(Capture
)がサブルーチンのパラメータリスト(Signature
)と合うかどうか調べたり、(Perl5でいう-e
のような)ファイルテスト演算子を適用することができます。
「$x
は$y
に合うかな?」という疑問はどんなものであれ、Perl6ではスマートマッチとして表現されることを覚えておいて下さい。
SEE ALSO
http://perlcabal.org/syn/S03.html#Nonchaining_binary_precedence
コメント
コメントを投稿