|
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プラスドライバー演算子 (Phillips) $x +=!! $y → $x ++ if $yトルクスドライバー演算子 (Trox) $x *=!! $y → $x = 0 unless $yドライバみたいな見た目の演算子。 Perl の真が 1、偽が 0 なのを利用している。 テスラ演算子 (Tesla operator)![]() 0 !~! 0 → 1NOR の動作。『!~』は正規表現の演算子。 モンゴル定数 (Mongolian constans)![]() !() → true前者は、『()』は要素数0個の空配列なので、 スカラーコンテキストなら0になるから、否定で真になる。 後者は、何で偽になるのか、分からないなあ?? どう解釈されるんでしょう? Perl のこういった楽しみ方もまた、面白いですね! |
| << 前記事(2008/08/22) | トップへ | 後記事(2008/08/24)>> |
| タイトル (本文) | ブログ名/日時 |
|---|---|
[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 |
| 内 容 | ニックネーム/日時 |
|---|---|
%! は、定義済みのハッシュ変数みたいですね。 |
BLUEPIXY 2008/08/24 18:31 |
perldoc perlvar |
BLUEPIXY 2008/08/24 18:43 |
| << 前記事(2008/08/22) | トップへ | 後記事(2008/08/24)>> |