Perl 从 HTML 表中打印行和列



这是我的temp.html

<table border="1">
<tr>
<td>row 1, cell 1</td>
<td>row 1, cell 2</td>
</tr>
<tr>
<td>row 2, cell 1</td>
<td>row 2, cell 2</td>
</tr>
</table>

我正在尝试使用以下代码打印上表中的每个元素 -

#!/usr/bin/perl
use strict;
use Data::Dumper;
use HTML::TableExtract;
my $tex = HTML::TableExtract->new(keep_html=>1);
$tex->parse_file('./temp.html');
my ($table) = $tex->tables;
#print Dumper($table);
my $numColumns = @{$table->rows->[0]};
print "n numColumns = $numColumnsn";
my $numRows = @{$table->rows};
print "n numRows = $numRowsn";
for my $rowIndex ( 0..$numRows-1 ) { 
    for my $columnIndex ( 0..$numColumns-1 ) { 
       print "n row $rowIndex column $columnIndex $table->rows->[$rowIndex][$columnIndex] ";
    }   
}

它打印 -

row 0 column 0 HTML::TableExtract::Table=HASH(0x8e7d7f8)->rows->[0][0] 
row 0 column 1 HTML::TableExtract::Table=HASH(0x8e7d7f8)->rows->[0][1] 
row 1 column 0 HTML::TableExtract::Table=HASH(0x8e7d7f8)->rows->[1][0] 
row 1 column 1 HTML::TableExtract::Table=HASH(0x8e7d7f8)->rows->[1][1]

如果我使用 @{$table->rows->[$rowIndex]}->[$columnIndex] 而不是 $table->rows->[$rowIndex][$columnIndex]我会得到正确的输出,但带有警告。如何删除警告?

Using an array as a reference is deprecated at t.pl line 21.
row 0 column 0 row 1, cell 1 
row 0 column 1 row 1, cell 2 
row 1 column 0 row 2, cell 1 
row 1 column 1 row 2, cell 2

不能在字符串中调用方法。虽然您可以取消引用字符串中的变量,也可以访问哈希或数组中的元素,但不支持方法调用。

而不是

print "... $table->rows->[$rowIndex][$columnIndex] ";

你想要

my $cell_value = $table->rows->[$rowIndex][$columnIndex];
print "... $cell_value ";

其他替代方法包括使用某种取消引用。您找到了这样的解决方案

print "... ${$table->rows->[$rowIndex]}[$columnIndex] ";

这是有效的,因为方法调用现在位于取消引用的块中,该块可以包含任意代码。一种更常见的方法是使用"购物车"伪运算符@{[ ... ]},它允许插值任意代码:

print "... @{[ $table->rows->[$rowIndex][$columnIndex] ]} ";

通了。

根据 https://stackoverflow.com/a/14065917/1729501

@Month_name->[$month] 

应该是

$Month_name[$month]

所以就我而言,

@{$table->rows->[$rowIndex]}->[$columnIndex]

应该是

${$table->rows->[$rowIndex]}[$columnIndex]

相关内容

  • 没有找到相关文章

最新更新