0

これが私の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 = $numColumns\n";
my $numRows = @{$table->rows};
print "\n numRows = $numRows\n";

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
4

2 に答える 2

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] ]} ";
于 2013-09-12T18:15:33.227 に答える
0

理解した。

https://stackoverflow.com/a/14065917/1729501によると

@Month_name->[$month] 

する必要があります

$Month_name[$month]

だから私の場合、

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

する必要があります

${$table->rows->[$rowIndex]}[$columnIndex]
于 2013-09-12T18:03:22.207 に答える