Hello Acme World!

2010-12-01

(firstly written in Japanese, later in English)

皆さんこんにちは。
「Perlと言えばAcme。Acmeと言えばPerl」と100人中3人ぐらいは思っているんじゃないかと淡い期待を抱いて悶々とした日々を過ごしているmakamakaです。

このアドベントカレンダーではAcmeに関することを取り上げます。

初日の今日はAcmeモジュールの紹介というよりは、「私のAcmeの楽しみ方」について語りたいと思います。モジュール紹介を期待した方、ごめんなさい><  本日のAcmeとかAcme大全で割と満たされているというか、あまり新しいネタがないんです(涙)

でも明日以降、素敵なAcmeモジュールもたくさん紹介されますよ! CPANに上がっていないモジュールも登場しますよ! 私も別の日の記事で昔つくりかけたモジュールの紹介をしますよ!(←投げやり)




さて、Acmeというと、冗談モジュールとしてその「機能」にばかり目が向きがちです。サンプルコードを試して結果を眺めて楽しむ、というところで終わってしまっていませんか? もったいないです!




Lesson1 ドキュメントやバージョンに着目する

例えばAcme::Pr0nについて見てみましょう。pr0nってporn(ポルノ)の隠語ですね。このモジュールは他のモジュールの中身を露わにしようというものなんです。

use strict;
use MyFunnyModule;
use Acme::Pr0n qw( MyFunnyModule );

hello(); # ←MyFunnyModuleの関数が晒された!

で、晒されるモジュールのバージョンが0.18未満だと「若すぎる!」って警告が出るんです(バージョンが無い場合はセーフ)。これだけでも、まあ冗談モジュールらしいのですが、このドキュメントのTODOには

Tell your mother what you're doing.
(君のやってることお母さんに言いつけちゃうよ)

って、むしろコレが書きたかったんじゃないかという感じなんです(あとSEE ALSOの所にa psychiatrist(精神科医)とあったり)。 ああ、そうそう、Acme::Pr0n自体はバージョンが0.04です。ませてますね!

他にも、Acme::Lingua::NIGERIANはコードをスパムメールで有名な「ナイジェリアの手紙」風に変えてくれますが、そのCOPYRIGHT AND LICENSEには「じゃんじゃんメールしてくれ」って書いてあったりと、ドキュメントも含めて楽しめます(Acme::Lingua::NIGERIANのライセンスについてはMint's logさんの記事で知りました)。

というわけで、このお正月はAcmeなモジュールのドキュメントやバージョンもじっくり眺めてみては如何でしょうか。




Lesson2 コード内で使われてる名前に着目する

さて、何しろAcmeのことですから、内部だけで使用されているサブルーチンの名前なども面白いものがあったりします。例えばAcme::Phlegethoth。下記はドキュメントのSYNOPSISからの引用です。

use Acme::Phlegethoth;
print "goodbye, world!\n";

すると

use Acme'Phlegethoth;
ia ia!  mnahN' NAflHriI R'LuHnyTh BUgoR SLl'HAog gOf'NN Hai ron
gOf'nn Nnn'aIog FHTagN LlLL YHlIRgHOG GoF'Nn naCh'!  nNNvuLgtlAGlN
thROD!  PhLeGetH StelL'BsNaoth sll'Ha!  aH NAfL'AIyAR H'EbUMna
HliRGHog eHYeOG nnnSgn'WAhL fm'laTgh ah ILYaA h'zHRO iLYaa
H'gnaIihNYtH EBumnA s'Uhnor [Text ends abruptly.]

とまあ、宇宙的恐怖に苛まれるコードに変換してくれるAcme::Bleach系モジュールなのですが、このモジュールのコードを覗いてみると、

sub roll_sanity_check { &see }

という具合になっています。これは「クトゥルフの呼び声」というTRPGで有名なSANチェック(恐ろしいモノに遭遇した時にサイコロを振って正気度をチェックする)を表してます。この手のゲームが好きな人はニヤリとなるわけです(クトゥルゥーを知らない方、ごめんんさい)。変数名の方も

my $hear_me   = "ia ia! ";

になってたり。

もちろん、Acmeモジュールにはこういった表には出てこない面白い関数名や変数名がまだまだたくさんあります!

このお正月は自分だけのお気に入りの名前を探してみては如何でしょうか。




Lesson3 モジュールの返り値に着目する

賢明な視聴者の皆様の中には、Lesson2から導き出される結論として、モジュールの返り値も何かあるんじゃないの? と感づかれた方もいらっしゃるのではないでしょうか?

そうなんです! モジュールファイルの最後の行に通常書かれている

1;

は、真値なら何でもいいわけですから、当然、Acme的なモノがあるはずです!

でもどんな値があったか覚えていないんです! 今これを書いてるのが1日の夜の2時で調べる気力もないんです!

どうしよう!?


「AcmeのことはAcmeに聞け」


古代ローマの有名な言葉ですね。


Acme::ReturnValue。これです。



use 5.010;
use Acme::ReturnValue;
my $arv = Acme::ReturnValue->new;

$arv->in_dir( $dir );

for ( @{ $arv->interesting } ) {
    say $_->{package} . ' returns ' . $_->{value};
}

# $arv->boring で面白くない値を返すモジュールもわかる


'1'以外の値が返るモジュールを調べてくれます! めでたしめでたし!


ん? で、実際にどういう値があったのかって?
はい! こちらをご覧下さい! →Acme::ReturnValue findings


Acme以外の方がいっぱいあるけど気にしないで!


さあ、このお正月は面白いReurnValueを暗記してカルタにしてはどうでしょうか!!!1


というわけで、駆け足で「Acmeの楽しみ方」をご紹介しましたが、如何でしたでしょうか。来年の貴方のAcmeライフが素敵なものになるよう心からお祈りしています!




最後に私的な宣伝になりますが、冬コミは12月31日(金)に東R57a 「どんぞこ楽屋」で出展します。ちょっと新刊出せそうにないですが、コピー誌か何かだけでも用意できればと考えています。その他配布物は『Acme大全2010』とデコシールになるかと。




明日はYAPC Asia 2010の忍者こと、真面目なモジュール紹介で疲れたtomi-ruさんが登場です!




* ----------------------------------------------------
* English version
* ----------------------------------------------------

Hello everyone. I'm makamaka, an ordinary perl user like you.
I love Acme and you love Acme. Yes, we love Acme.
Ok, this is the Japan Perl advent calendar for Acme. It's show time!

Today, the first day, I'm going to describe how we enjoy and love love love Acmes.


Lesson1 Check Acme documents and versions

For example, let's see Acme::Pr0n.
pr0n is a leet word. This module exposes other modules contents.

use strict;
use MyFunnyModule;
use Acme::Pr0n qw( MyFunnyModule );

hello(); # ←MyFunnyModule's function!

When the version of an exposed module is less than 0.18, it warns "Too young" (if no version, all right).
That's a just joke module, ok, ok. But the TODO in the document says

Tell your mother what you're doing.

Oh, the author only want to write it!? I feel so. (Well, SEE ALSO also includes 'a psychiatris'.)
Ah, I forgot to say... Acme::Pr0n version is 0.04. Oh terrible!


Other module, Acme::Lingua::NIGERIAN converts your script a famouse SPAM mail, NIGERIAN LETTER-like. COPYRIGHT AND LICENSE in the module says

THIS MODULE MAY BE MASS-EMAILED UNDER THE SAME TERMS AS PERL ITSELF.

Yes happy happy. (I owe this knowledge to Mint's log.)

Well, in this winter vacation, would you like to see Acme documents or versions?




Lesson2 Check the names using in code

Because Acmes are so interesting that they hold interesting subroutin names and variables.
Acme::Phlegethoth for example (Below codes are from SYNOPSIS.)

use Acme::Phlegethoth;
print "goodbye, world!\n";

then

use Acme'Phlegethoth;
ia ia!  mnahN' NAflHriI R'LuHnyTh BUgoR SLl'HAog gOf'NN Hai ron
gOf'nn Nnn'aIog FHTagN LlLL YHlIRgHOG GoF'Nn naCh'!  nNNvuLgtlAGlN
thROD!  PhLeGetH StelL'BsNaoth sll'Ha!  aH NAfL'AIyAR H'EbUMna
HliRGHog eHYeOG nnnSgn'WAhL fm'laTgh ah ILYaA h'zHRO iLYaa
H'gnaIihNYtH EBumnA s'Uhnor [Text ends abruptly.]

What a cosmic horror code!! Help me! ... yes it's an Acme::Bleach like module.

Look into the module code...

sub roll_sanity_check { &see }

Ok, this is the "roll sanity check" in RPG game "Call of Cthulhu".
And a variable is

my $hear_me   = "ia ia! ";

There are of cause a lot of nice name inner functions and variables!

Well, in this winter vacation, would you like to seek your own favorite names?




Lesson3 Check a return value from a module

Now, we arrive at one conclusion by Lesson2.
Ummm....perhaps, return values are interesting too?

Yes! the return value

1;

written in last script line is anyting good if it is true value.
So Acme values exist!

However I don't remember them... and I'm so sleepy!

What do I do?
.

Ask unto Acme the things which are Acme

.
A famous word in ancient Rome.


Acme::ReturnValue. That's it.



use 5.010;
use Acme::ReturnValue;
my $arv = Acme::ReturnValue->new;

$arv->in_dir( $dir );

for ( @{ $arv->interesting } ) {
    say $_->{package} . ' returns ' . $_->{value};
}


This module looks up return values other than '1'. Very happy!

Um? What value?
Ok, see to Acme::ReturnValue findings.

Most modules are other than Acme, but don't mind!

Well, in this winter vacation, would you like to remember funny return values and to make cards?

Now, you and I are Acme friend. I wish you A happy Acme year!

Thanks.




Private information: I join Comic Market, 31th Dec.
My booth : Donzoko Gakuya in East R 57a. I will write a info in my Dojin site.

The tomorrow writter is YAPC Asia 2010 Ninja tomi-ru!!