sub parseHoge {
my ($data, $ref_header, $ref_detail) = @_;
my %header = %$ref_header;
my %detail = %$ref_detail;
# TreeBuilderでparse
my $tree = HTML::TreeBuilder->new;
$tree->parse($data);
my @tables = $tree->find_by_tag_name("table");
my @trs = $tables[$header{tableindex}]->find_by_tag_name("tr");
# 解析結果格納配列
my @all = ();
foreach my $tr (@trs) {
my %data = ();
my %target_tags = ();
my $not_found = 0;
foreach my $key (keys % detail) {
# この項目は$tag_nameというタグで囲まれている
my $tag_name = $detail{$key}{tag};
# タグ解析済データがなければ作る
if (!$target_tags{$tag_name})
{
$target_tags{$tag_name} = [$tr->find_by_tag_name($tag_name)];
}
# index番目の$tag_nameに囲まれている値が欲しい値
my $target_tag = $target_tags{$tag_name}[$detail{$key}{index}];
# データが不完全なのでパス
if (!$target_tag) {
$not_found = 1;
last;
}
$data{$key} = $target_tag->as_text;
}
# 不完全データは保持しない
if ($not_found)
{
next;
}
push(@all, {%data});
}
return @all;
}