2006/10/07 (土)
■ [perl] use Smart::Comments
![はてなブックマーク - [perl] use Smart::Comments - Bulknews::Subtech はてなブックマーク - [perl] use Smart::Comments - Bulknews::Subtech](http://b.hatena.ne.jp/entry/image/http://subtech.g.hatena.ne.jp/miyagawa/20061007/1160225272)
use Smart::Commentsはいらないと思う - ヒルズで働くholidays-lの技ログ
ソース中にuse Smart::Commentsは書かなくていいんじゃないかなあと思います。
use Smart::Commentsを消したり、no Smart::Commentsに変えたりするよりも、
デバッグ中だけperl -MSmart::Commentsするとか、PerlSwitches -MSmart::Commentsにしておくとかすれば、
環境によるソースの修正(それが自動で行なわれるとしても)が不要になっていいんじゃないかと思ったり。
発想としては同意したいところだけど、残念ながらコレじゃ動かないケースも。e.g. foo.pl が
use Foo; Foo->run;
で Foo.pm の中に ### ではじまる Smart Comments がある場合は、 perl -MSmart::Comments foo.pl では有効にならない。Smart::Comments はソースフィルタだから use したコンテキストでしかフィルタがきかない。というわけでこういうときは、やっぱり (Foo.pm の中で)use Smart::Comments が必要。
■ [Perl] Dumping variables Everywhere without use()
![はてなブックマーク - [Perl] Dumping variables Everywhere without use() - Bulknews::Subtech はてなブックマーク - [Perl] Dumping variables Everywhere without use() - Bulknews::Subtech](http://b.hatena.ne.jp/entry/image/http://subtech.g.hatena.ne.jp/miyagawa/20061007/1160224461)
2006/10/07 - memo - unknownplace.org
なんかいろいろやっているけど UNIVERSAL も CORE も CORE::GLOBAL もだめなんじゃないかという気がする。どれも perl -MP -e 'package XYZ; p "foo"' とすると
String found where operator expected at -e line 1, near "p "foo""
とか言われて怒られる。いっそのことこういうのはどうだ。
package P; use strict; use YAML; *CORE::GLOBAL::dump = sub { warn YAML::Dump(@_); }; 1;
perl のコア関数 dump を上書き。dump なんて誰も使わないでしょ。これならどの名前空間からもいける。
■ [perl] debugging
![はてなブックマーク - [perl] debugging - Bulknews::Subtech はてなブックマーク - [perl] debugging - Bulknews::Subtech](http://b.hatena.ne.jp/entry/image/http://subtech.g.hatena.ne.jp/miyagawa/20061007/1160156683)
みんな use Data::Dumper; dumper $obj; って書いてるのかなぁ。めどいので
use P;p $obj;
とかしてるよ。。
最近は use YAML; warn Dump $obj が多いんだけど、よりラクにやるなら Damian 先生の Smart::Comments か Ingy の XXX.pm かなぁ。よりによって Damian と Ingy ってのが対極な感じで面白いけど。
Smart::Comments は ### でコメントしてくれれば Dump してくれる。他にも require: で assertion したり、for/while ループでダイアログだしたりいろいろ Cool。
use Smart::Comments; $foo = some_complex_data; ### $foo
はずすときは use Smart::Comments の行だけコメントアウトすればいい、というのもいいですね。(またデバッグするときにラク)
XXX.pm は Spiffy から XXX/YYY/WWW/ZZZ だけ取り出したモジュール。なぜか cpan> install XXX できないので、install INGY/XXX-0.10.tar.gz するといけます。
use XXX; $foo = some_complex_data; XXX $foo;
だけど、XXX はサブルーチンなので式の途中とか先頭にいれてもいい。
use XXX; XXX $foo = some_complex_data;
XXX は die, WWW は warn, YYY は print, ZZZ は stacktraceつき。この辺のセンスも ingy なんだよなー。