【SWIG】DxLibのラッパーファイルを一から作り直してみる2

前回の続き
 1 use 5.12.0;
 2 use warnings;
 3 use utf8;
 4 use autodie;
 5 use FindBin;
 6 use Encode;
 7 
 8 
 9 sub _IO::new {
10     use IO::File;
11     my $obj = {}; $obj->{class} = shift;
12 
13     $obj->{write_array} = sub {
14         my ($file, $array_ref) = @_;
15         open my $fh, '>', "$file";
16         $fh->autoflush(1);
17         for my $data (@$array_ref) {
18             $fh->print($data."\n");
19         }
20         $fh->close;
21     };
22 
23     $obj->{write_all} = sub {
24         my ($file, $data) = @_;
25         open my $fh, '>', "$file";
26         $fh->autoflush(1);
27         $fh->print($data);
28         $fh->close;
29     };
30 
31     $obj->{read_all} = sub {
32         my ($file) = @_;
33         open my $fh, '<', "$file";
34         my $content = do { local $/; <$fh> };
35         $fh->close;
36         return $content;
37     };
38     $obj;
39 }
40 
41 sub _Parse::new {
42     use HTML::TreeBuilder;
43     my $obj = {}; $obj->{class} = shift;
44     my $tree_builder = HTML::TreeBuilder->new;
45 
46     $obj->{steal_dxlib_func} = sub {
47         my ($file) = @_;
48 
49         $tree_builder->parse_file($file);
50         $tree_builder->eof();
51         my @func_list;
52         for my $tag ($tree_builder->find("tr")) {
53             my $data = $tag->as_text;
54             $data = decode('cp932', $data);
55             if ($data =~ /.*宣言.*/) {
56                 $data =~ s/(概略|引数|戻り値|解説|サンプル).*//gsm;
57                 $data =~ s/宣言//g;
58                 $data =~ s/(;|;).*//gsm;
59                 push @func_list, encode('cp932', $data) if defined($data) && $data ne '';
60             }
61         }
62         @func_list = do { my %h; grep { !$h{$_}++ } @func_list };
63         return @func_list;
64     };
65     $obj;
66 }
67 
68 my $my_content_path = "$FindBin::Bin"."/content/";
69 my $io = _IO->new;
70 
71 my @file_list = glob "$my_content_path*.html";
72 my $parse = _Parse->new;
73 
74 my @func_list;
75 for my $file (@file_list){
76     push @func_list, $parse->{steal_dxlib_func}->($file);
77 }
78 
79 $io->{write_array}->("func_list.txt", \@func_list);
80 
81 __END__

前回、取得したHTMLから関数群だけを抜き出すスクリプト
次はこっから、いい感じにラップしていくスクリプトを組む予定。
また、クロージャーで実装していこうと思ったけど
チョイ修正しつつMouseあたりでも使用してみようと思った。