Perl の“隠し演算子”ドライバー、テスラ、モンゴル…

YAPC::Europe 2008 に行ってきました。1日目のライトニングトークで、
Perl の“隠し演算子”ネタが面白かったのでご紹介。
Dmitry Karasik さんの Fun with perl - Secret operators というトークです。

Secret operators と言っても、実際には隠されてるんではなくて、
複数の演算子の組み合わせで、あたかも新しい演算子のような動作をさせるもの。

LT とは別の BooK さんのセッション でも、Xウイング演算子 (X-wing operator) などが紹介されていました。
例えば、Xウイング演算子はスター・ウォーズの戦闘機 X-wing みたいな見た目の演算子。
@match =<>=~ $re
実際の動作は、標準入力から1行読み取って、
正規表現 qr/~/g を格納した変数 $re でマッチさせて
マッチした内容を配列に取り出す。ほとんど実用ではない。

さて、Dmitry Karasik さんの見つけた“演算子”は…

ドラバー演算子 (Screwdriver operators)

マイナスドライバー演算子 (Flathead)
$x -=!! $y → $x -- if $y
$x -=! $y → $x -- unless $y
プラスドライバー演算子 (Phillips)
$x +=!! $y → $x ++ if $y
$x +=! $y → $x ++ unless $y
トルクスドライバー演算子 (Trox)
$x *=!! $y → $x = 0 unless $y
$x *=! $y → $x = 0 if $y
ドライバみたいな見た目の演算子。
Perl の真が 1、偽が 0 なのを利用している。

テスラ演算子 (Tesla operator)

0 !~! 0 → 1
0 !~! 1 → 0
1 !~! 0 → 0
1 !~! 1 → 0
NOR の動作。『!~』は正規表現の演算子。

モンゴル定数 (Mongolian constans)

!() → true
!%! → false
前者は、『()』は要素数0個の空配列なので、
スカラーコンテキストなら0になるから、否定で真になる。

後者は、何で偽になるのか、分からないなあ??
どう解釈されるんでしょう?
 
Perl のこういった楽しみ方もまた、面白いですね!

ブログ気持玉

クリックして気持ちを伝えよう!

ログインしてクリックすれば、自分のブログへのリンクが付きます。

→ログインへ

なるほど(納得、参考になった、ヘー)
驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

気持玉数 : 1

なるほど(納得、参考になった、ヘー)

この記事へのコメント

BLUEPIXY
2008年08月24日 18:31
%! は、定義済みのハッシュ変数みたいですね。
0,空文字列,空リスト以外なのでundef を返す(そうでない時は1を返す)
BLUEPIXY
2008年08月24日 18:43
perldoc perlvar
で定義済み変数としての説明が載っています。

この記事へのトラックバック