Text::MeCab v0.10

いくつかパッチあてましたが、Segfaultを起こすこともなく無事動きました。牧さんありがとう!
とりあえずバグフィックスのパッチ。

--- MeCab.xs.org	Fri Jul 14 13:31:28 2006
+++ MeCab.xs	Fri Jul 14 13:32:12 2006
@@ -231,9 +231,8 @@
 #endif
         len = av_len(args) + 1;
 #if MECAB_MAJOR_VERSION == 0 && MECAB_MINOR_VERSION < 92
-        len++;
-        Newz(1234, argv, len, char *);
-        for(i = 1; i < len; i++) {
+        Newz(1234, argv, len + 1, char *);
+        for(i = 0; i < len; i++) {
 #else
         if (len > 0)
             Newz(1234, argv, len, char*);

もうひとつ、poor puppyのためのパッチ。

--- probe_mecab.pl.org	Fri Jul 14 13:35:45 2006
+++ probe_mecab.pl	Fri Jul 14 13:36:30 2006
@@ -28,13 +28,13 @@
     chomp($version);
     die "no version specified! cowardly refusing to proceed." unless $version;
 
-    print "Additional compiler flags (e.g. -DWin32 -Ic:\\path\\to\\mecab)? [] ";
+    print "Additional compiler flags (e.g. -DWIN32 -Ic:\\path\\to\\mecab\\sdk)? [] ";
     if ($interactive) {
         $cflags = <STDIN>;
         chomp($cflags);
     }
 
-    print "Additional linker flags (e.g. -lc:\\path\\to\\mecab\\libmecab.lib? [] ";
+    print "Additional linker flags (e.g. -lc:\\path\\to\\mecab\\sdk\\libmecab.lib? [] ";
     if ($interactive) {
         $libs = <STDIN>;
         chomp($libs);

で、これはまあどうでもいいんですが、euc-jp辞書以外の辞書を使っているpoorest puppyのためのパッチ。

--- probe_mecab.pl.org	Fri Jul 14 13:35:45 2006
+++ probe_mecab.pl	Fri Jul 14 13:56:05 2006
@@ -6,6 +6,7 @@
 
 use strict;
 use File::Spec;
+use Encode;
 
 my $interactive = -t STDIN && (-t STDOUT || !(-f STDOUT || -c STDOUT)) ;
 my($version, $cflags, $libs);
@@ -91,5 +92,19 @@
 } else {
     print "No linker flags specified\n";
 }
+
+print "Encoding of your mecab dictionary? (shift_jis, euc-jp, utf8) [euc-jp] ";
+my $encoding = <STDIN>;
+$encoding ||= 'euc-jp';
+
+my $test_strings =<<'EOT';
+太郎は次郎が持っている本を花子に渡した。
+すもももももももものうち。
+EOT
+Encode::from_to($test_strings, 'euc-jp', $encoding);
+
+open my $fh, '>', 't/test_str.txt';
+print $fh $test_strings;
+close $fh;
 
 return { cflags => $cflags, libs => $libs };

--- 02-basic.t.org	Fri Jul 14 01:50:09 2006
+++ 02-basic.t	Fri Jul 14 13:51:40 2006
@@ -7,6 +7,10 @@
     use_ok("Text::MeCab");
 }
 
+open my $fh, '<', 't/test_str.txt';
+my @str = <$fh>;
+close $fh;
+
 my $mecab = Text::MeCab->new({ all_morphs => 1 });
 ok($mecab);
 
@@ -16,7 +20,7 @@
 }
 
 for (
-    my $node = $mecab->parse("太郎は次郎が持っている本を花子に渡した。");
+    my $node = $mecab->parse($str[0]);
     $node;
     $node = $node->next
 ) {
@@ -30,7 +34,7 @@
 ok($mecab);
 
 for (
-    my $node = $mecab->parse("太郎は次郎が持っている本を花子に渡した。");
+    my $node = $mecab->parse($str[0]);
     $node;
     $node = $node->next
 ) {

--- 04-dclone.t.org	Fri Jul 14 01:50:09 2006
+++ 04-dclone.t	Fri Jul 14 13:52:22 2006
@@ -7,12 +7,14 @@
     use_ok("Text::MeCab");
 }
 
-my $text_A = "太郎は次郎が持っている本を花子に渡した。";
-my $text_B = "すもももももももものうち。";
+open my $fh, '<', 't/test_str.txt';
+my @str = <$fh>;
+close $fh;
+
 my $mecab = Text::MeCab->new;
 
-my $node_A = $mecab->parse($text_A)->dclone;
-my $node_B = $mecab->parse($text_B)->dclone;
+my $node_A = $mecab->parse($str[0])->dclone;
+my $node_B = $mecab->parse($str[1])->dclone;
 
 # XXX - better be at least 5 nodes after parsing (this may actually depend
 # on the dictionary that you are using, but heck, if you are crazy enough