本連載では第一線のPerlハッカーが回替わりで執筆していきます。今回は同人誌
Perlの徒花(あだばな)Acmeモジュール
Perlでいつもお世話になるCPANモジュールですが,
もともとCPANには特に名前付けのルールもなくジョークモジュールがリリースされていました。しかしそのようなモジュールが多くなるにつれ,
たとえばよく知られているAcmeモジュールの一つに,
AcmeモジュールをはじめとしてCPANモジュールのインストールにはcpanmがお勧めです。コマンドラインから,
$ curl -L http://cpanmin.us | perl - App:cpanminus
$ cpanm Acme::EyeDrops
などでインストールします。
次に,'print "Hello World\n"'
と指定しています。これが変換対象となるコードです。
そして,
リスト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
このように,
なお本稿の実行環境は,
- 注1)
- 紹介ページとしては
「Acme::EyeDropsでアナタも記号プログラマー! - JPerl Advent Calendar 2009」, 動作原理などについては 「Perl 記号ゴルフと Acme::EyeDrops - 兼雑記」 が詳しいです。