Документация на CPAN на самом деле не объясняет это поведение, если я что-то упустил. Я собрал небольшой тестовый код, чтобы проиллюстрировать мою проблему:
#!/usr/bin/perl
use warnings;
use strict;
use HTML::TreeBuilder;
my $testHtml = "
<body>
<h1>
<p>
<p>HELLO!
</p>
</p>
</h1>
</body>";
my $parsedPage = HTML::TreeBuilder->new;
$parsedPage->parse($testHtml);
$parsedPage->eof();
my @p = $parsedPage->look_down('_tag' => 'p');
foreach (@p) {print $_->parent->tag, " : ", $_->tag, "\t", $_->as_text, "\n";}
После запуска вышеприведенного скрипта вы получите:
body : p
body : p HELLO!
Поскольку все теги вложены один за другим, я думаю, что родительский тег первого тега p
будет h1
, а родительский тег второго p
будет p
. Почему родительская функция показывает тег body
для обоих?