Perl Hackers Hub

第19回 Acmeで広がるPerlの世界―CPANは愉快なジョークモジュールの宝庫(1)

この記事を読むのに必要な時間:およそ 3 分

本連載では第一線のPerlハッカーが回替わりで執筆していきます。今回は同人誌『Acme大全』の発行者として知られるまかまか般若波羅蜜(はんにゃはらみつ)さんで,テーマはAcmeモジュールです。

Perlの徒花(あだばな)Acmeモジュール

Perlでいつもお世話になるCPANモジュールですが,中には役に立たないジョーク系のモジュールもあります。そのようなモジュールには慣習的に「Acme」という名前が付けられていて,現在CPAN上には400個以上のディストリビューションが登録されています。

もともとCPANには特に名前付けのルールもなくジョークモジュールがリリースされていました。しかしそのようなモジュールが多くなるにつれ,何とかしようということでPerlコミュニティの重鎮Damian ConwayによってAcmeという名前空間が提唱されました。この名前の由来は,アメリカのアニメ「バッグス・バニー・ショー」で欠陥商品を送りつけてくる通販会社Acmeからきています

たとえばよく知られているAcmeモジュールの一つに,Acme::EyeDrops注1があります。これは,コードを「見栄えの良いもの」に変換するモジュールです。

AcmeモジュールをはじめとしてCPANモジュールのインストールにはcpanmがお勧めです。コマンドラインから,

$ curl -L http://cpanmin.us | perl - App:cpanminus
$ cpanm Acme::EyeDrops

などでインストールします。

次に,リスト1のような簡単なスクリプトを作成します。(1)でShapeにコマンドラインからの引数を渡しています。Shapeに指定した値がコードを変換する際の形を決定します。(2)でSourceStringに'print "Hello World\n"'と指定しています。これが変換対象となるコードです。

そして,コマンドラインから引数としてcoffee(数ある変換形のうちの一つ)を渡して実行してみます図1)。出力結果は,誰がどう見てもcoffee(コーヒーカップ)です。

リスト1 Acme::EyeDropsを使ったスクリプト

use strict;
use warnings;
use Acme::EyeDrops qw(sightly);
my $type = $ARGV[0] || 'beer';
print sightly( {
    Shape => $type, # (1)
    SourceString => 'print "Hello World\n"', # (2)
    Regex => 1,
} );

図1 Acme::EyeDropsを使ったスクリプトの実行結果

$ perl eyedrops.pl coffee > coffee.pl
1 shapes completed.
$ cat coffee.pl
''=~('('.'?'.'{'.('`'|'%').('['^'-').('`'|  '!').(
'`'|',').'"'.('['^'+').('['^')').('`'|')') .('`'|'.'
).('['^'/').('{'^'[').'\\'.'"'.('`'^'(').('`'    |((
'%'))).('`'|',').('`'|',').('`'|'/').("\{"^      '['
).('{'^',').('`'|'/').('['^')').('`'|',').       (((
 '`'))|'$').'\\'.'\\'.('`'|'.').'\\'.'"'.       '"'
 .'}'.')');$:='.'^'~';$~='@'|'(';$^="\)"^     '[';
  $/='`'|'.';$,='('^'}';$\='`'|('!');$:=    ')'^
   '}';$~='*'|'`';$^='+'^'_';$/='&'|'@'   ;$,=
    '['&'~';$\=','^'|';$:='.'^'~';$~=('@')|
     '(';$^=')'^'[';$/='`'|'.';$,='('^'}'
      ;$\='`'|'!';$:=')'^'}';$~='*'|
       '`';$^='+'^'_';$/=('&')|
        '@';$,='['&'~';#;#

もちろん実行すれば期待どおりの動作をします。

$ perl coffee.pl
Hello World

このように,一見何の役に立つかわからないけれども,やはり実際役に立たないようなモジュールに代表されるのがAcmeモジュールです。筆者は年に一度『Acme大全』という同人誌を発行していて,CPANに登録されている全Acmeモジュールを紹介しています。そのようなこともあって,Acmeモジュールに対しては並々ならぬ思い入れがありますので,今回はみなさんにAcmeモジュールのすばらしさをお伝えできればと思います。

なお本稿の実行環境は,特に断りがない限りPerl 5.14.2を使用しています。

注1)
紹介ページとしては「Acme::EyeDropsでアナタも記号プログラマー!- JPerl Advent Calendar 2009」,動作原理などについてはPerl 記号ゴルフと Acme::EyeDrops - 兼雑記が詳しいです。

著者プロフィール

まかまか般若波羅蜜(まかまかはんにゃはらみつ)

日本でも数少ないPerlの同人サークル「どんぞこ楽屋」を主催(メンバーは本人しかいない)。年1回,CPANにリリースされている全てのAcmeモジュールを紹介する「Acme大全」を発行,コミックマーケットや各種PM(Perl Mongerの集まり)にて頒布している。YAPC::AsiaでもスピーカーとしてPerlの自作カードゲームやボードゲームなどの発表をしている。Hachioji.pmによく出没。

Twitter:@maka2_donzoko

email:makamaka.donzoko@gmail.com

url:http://www.donzoko.net/gakuya/

コメント

コメントの記入