prototype &
run {
my $block = shift;
is(process($block->foo), $block->bar, $block->name);
};
って引数に関数渡せる。
これは perldoc perlsub の Prototypes の項目に載ってる
An "&" requires an anonymous subroutine, which, if passed as the first argument, does not require the "sub" keyword or a subsequent comma.
プロトタイプで & を第一引数に指定した場合その無名関数には sub つけなくても良い。
これは割と使えそうだ。
たとえば、STDERRとかになんか出力しちゃううざいモジュールを使ってtestを書いているときに
sub execute(&) {
my ($out, $err);
tie_output( *STDOUT, $out );
tie_output( *STDERR, $err );
my $res = shift->();
untie *STDOUT;
untie *STDERR;
$res;
}
とか作っとくと
my $res = execute { $suck_module_output_stderr->method };
とかでSTDERRだすことなくそのモジュールのテストかける。いいのー。
grep とかな実装しかあんまりみないから新鮮に見えるのかな。
OSXもうだめかもわからん
run_like が成功するときと失敗するときがあってこまった。
run_like input => 'results';
みたいなときなんかinputのフィルタがかからないときがあったりして失敗してるくさく、なんだと思ったら、うちのOSXの問題だったみたいだ。
use_ok
を1個するだけのテストでも何回もやってるとこけたりする。ひどい。。
こけるときも毎回違う出力。
$ prove -lv t/04simpleuse.t
t/04simpleuse....dubious
Test returned status 0 (wstat 10, 0xa)
FAILED--1 test script could be run, alas--no output ever seen
とかよくわからんのだったり、
$ prove -lv t/04simpleuse.t
zsh: segmentation fault prove -lv t/04simpleuse.t
セグフォってみたり。。
$ prove -lv t/04simpleuse.t
Operator or semicolon missing before %opts at /System/Library/Perl/5.8.6/Pod/Usage.pm line 487.
Ambiguous use of % resolved as operator % at /System/Library/Perl/5.8.6/Pod/Usage.pm line 487.
Bareword "key3" not allowed while "strict subs" in use at /System/Library/Perl/5.8.6/Pod/Usage.pm line 482.
Bareword "opts" not allowed while "strict subs" in use at /System/Library/Perl/5.8.6/Pod/Usage.pm line 482.
Compilation failed in require at /usr/bin/prove line 12.
BEGIN failed--compilation aborted at /usr/bin/prove line 12.
こんなすごいのもでたよ。
再起動したらとりあえずなんか直ったくさいけど。もー、やばいわうちのmac。
HDDぶっこわれてんかなーとおもってfsckってみたけど問題なさげだったし。なんだろうほんと。
MySQLのダブルクオートとsqlt
MySQLのsqlにダブルクオートが含まれてるとsqltがこける。
なんだろう。シングルクオートに置換すると通る。
とはいえ、便利すなぁ。sqlt。