Kawa.netブログ(川崎有亮)

アクセスカウンタ

help リーダーに追加 RSS Perl の“隠し演算子”ドライバー、テスラ、モンゴル…

<<   作成日時 : 2008/08/24 12:06   >>

トラックバック 1 / コメント 2

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件)

タイトル (本文) ブログ名/日時
[Perl]B::Deparseで隠し演算子がどのように解析されたかを見る
Perl の“隠し演算子”ドライバー、テスラ、モンゴル… Kawa.netブログ(川崎有亮)/ウェブリブログ B::Deparseを使えば分かり易いかも? % perl -MO=Deparse -e ’!%!’ use Errno (); not %!; -e syntax OK なお、perldoc Errnoには ”Errno” also makes ”%!” magic と書かれ ...続きを見る
holidays-l開発ブログ
2008/08/25 02:46

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(2件)

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

コメントする help

ニックネーム
本 文

EDGE Now!