追記
http://d.hatena.ne.jp/a666666/20090406/1238986138#c1238990265 でご指摘いただいたように、 yaml フィルターを使って - ~ で undef を表現してやれば良いそうです。
#!/usr/bin/perl use strict; use warnings; use Test::Base; plan tests => 1 * blocks; sub match { my $input = shift; my $re = qr/^(\w+)\s(\w+)\s(\w+)\s?(\w+)?$/; my @matched = $input =~ $re; return \@matched; } filters { expected => [qw(lines chomp array)], }; run_is_deeply input => 'expected'; __END__ === --- input chomp match foo bar baz --- expected foo bar baz --- LAST
結果
$ ./t.pl 1..1 not ok 1 # Failed test at /Library/Perl/5.8.8/Test/Base.pm line 338. # Structures begin differing at: # $got->[3] = undef # $expected->[3] = Does not exist # Looks like you failed 1 test of 1.
is_deeply で @matched と expected のデータ構造を比較したときに、合わなくなる。 expected を
--- expected foo bar baz --- LAST
などしてもダメ。 chomp で削られてしまうんだと思うけど、 chomp を外せば外したで改行の有無でマッチしなくなってしまうし。 undef になる特殊なシンボルとかがあるのかなと思って POD を undef で i-search してみたけど見つからず。