Webページの一部の次のhtmlコードがあります。
<h2 id="failed_process">Failed Process</h2>
<table border="1">
<thead>
<tr>
<th>
<b>pid</b>
</th>
<th>
<b>Priority</b>
</th>
</tr>
</thead>
<tbody>
<tr>
<td id="90"><a href="details.jsp?pid=p_201211162334&refresh=0">p_201211162334</a></td>
<td id="priority_90">NORMAL</td>
</tr>
<tr>
<td id="91"><a href="details.jsp?pid=p_201211163423&refresh=0">p_201211163423</a></td>
<td id="priority_91">NORMAL</td>
</tr>
<tr>
<td id="98"><a href="details.jsp?pid=p_201211166543&refresh=0">p_201211166543</a></td>
<td id="priority_98">NORMAL</td>
</tr>
</tbody>
</table>
<hr>
pid 列を抽出する必要があります。出力は次のようになります
pid
p_201211162334
p_201211163423
p_201211166543
「失敗したプロセス」テーブルのテーブル数は 4 です。ただし、問題は、テーブル数を 4 と指定すると、Web ページに失敗したタスクがない場合、次のテーブルに移動して次のテーブルの pid を取得することです。間違ったpidになります。
以下のコードを使用して結果を取得しています。
#!/usr/bin/perl
use strict;
use warnings;
use lib qw(..);
use HTML::TableExtract;
my $content = get("URL");
my $te = HTML::TableExtract->new(
headers => [qw(pid)], attribs => { id => 'failed_process' },
);
$te->parse($content);
foreach my $col ($te->rows) {
print ("\t", @$col), "\n";
}
しかし、次のエラーが発生します。
Can't call method "rows" on an undefined value