Shibuya.pm #14 でライトニングトークをしてきました

先週Shibuya.pm Tech Talk #14が開催されました。最近セキュリティホールを作りにくいミドルウェアに関心があるので、とてもためになりました。なかでも「バグがあってもセキュリティホールがあるよりははるかにマシ」というid:kazuhoさんの言葉が印象的でした。

私もLT枠をいただきましたので、Perl 5.13.5の新機能について発表致しました。
Perl Parser Hacks vol.2

Perl 5.12から導入されたPL_keyword_pluginを使った非常に簡単な例としては、Keyword::Booleanなどがあります。これはtrue/falseというキーワードを追加するモジュールで、定数関数による定数と異なる証拠に、&trueなどとして呼び出すことができません。

#!perl -w
use strict;
use Keyword::Boolean;
warn true;  # 1
warn &true; # Undefined subroutine &true called

さらに、PL_keyword_pluginのなかでPerl 5.13.5から導入されたparse_fullstmt()というPerl APIをつかうと、「次の1ステートメント」をパースしてコンパイルすることができます。この「ステートメント」は、「ラベルをつけられるカタマリ」と考えてください。つまり、foreach/ifなどの前でparse_fullstmt()をよぶと、ブロック全体をパースします。
サンプルコードも書いてみました。これはパースした結果を無視するだけのものですが、ステートメントの範囲は分かるかと思います。
リポジトリ: http://github.com/gfx/Void

サンプルコード:http://github.com/gfx/Void/blob/master/example/eg1.pl

#!perl -w
use 5.13.5; # automatically turns on strict
use Void;

void if(1) {
    ...
}
else {
    ...
}

void if(0) {
    ...
}
else {
    ...
}
say 'Hello, Perl world!';

上記のスクリプトを実行すると、単に「Hello, world!」とだけ印字されます。...はdieを発生させる式*1ですが、voidキーワードにより無効化されるため実行はされません。
これを使って何か楽しいことができるといいですね!!!

さてところで、YAPC::Asia Tokyo 2010開催まで残り10日あまりとなりました*2YAPC::AsiaでもHow Xslate worksというタイトルで、Xslateの実装について発表致します。どちらかというと実装よりの話を中心にする予定ではありますが、Xslateをご存じない方でも問題ないように、前半は使い方なども解説するつもりです。

*1:Perl 5.12から導入されたyada yada yada operatorです。

*2:Shibuya.pmの会場でチケットの再販が発表されましたね!