0

我有一个通过另一个脚本调用的子例程来读取 HTML 文件。下面是代码。

sub read_html
{
    $data=`cat "$_[0]"`;
    use HTML::TableExtract;
    print "CALLING read_html to read $_[0]\n";
    #my $self = shift;
    print "$_[1]";
    $te = HTML::TableExtract->new( headers => [($_[1])] );
    $te->parse($data);
    my $line_cnt=0;
    # Examine all matching tables
    foreach $ts ($te->tables)
    {
        if ($ts->rows ne "")
        {
            foreach $row ($ts->rows)
            {
                foreach (@$row) { $_='' unless defined $_; }
                print @$row;
                if (@$row[0] ne ' '  and @$row[0] ne ''  and
                    @$row[0] ne "\n" and @$row[0] ne "\t")
                {
                    $line_cnt++;
                }
            }
        }
        return $line_cnt;
    }
}

当我运行上面的脚本时,当标题作为变量传递时,它不会显示 HTML 表格数据。

$te = HTML::TableExtract->new( headers => [($_[1])] );

但是,如果我用下面的硬编码值替换表达式$_[1],它将返回指定标题下的所有列值

$te = HTML::TableExtract->new(
    headers => [("PO Number",
                 "Invoice Number",
                 "DC Number",
                 "Store Number",
                 "Invoice Amount",
                 "Discount",
                 "Amount Paid")] );

我将子例程称为read_html($file, $headers)where$file是文件名并$headers保存标头值,逗号分隔。

任何帮助将不胜感激。

4

1 回答 1

1

我将子例程称为 read_html($file, $headers) ,其中 $file 是文件名,$headers 是逗号分隔的标头值。

的 headers 参数HTML::TableExtract->new需要一个对字符串数组的引用,其中每个字符串都是一个单独的标题。听起来您将其传递给包含单个字符串的数组的引用,该字符串包含逗号字符。

my @headers = split m(\s*,\s*), $_[1];
$te = HTML::TableExtract->new( headers => \@headers );

如果这不正确,那么您的问题需要更具体地说明您是如何打电话的read_html

于 2013-06-11T14:50:42.583 回答