Perl 如何使用HTML::Parser获取下一个立即标记?

Perl 如何使用HTML::Parser获取下一个立即标记?,perl,Perl,我试图获取在特定div标记之后立即出现的标记。例如,我有html代码 <div id="example"> <h2>Example</h2> <p>Hello !World</p> </div> 但这就产生了错误 在使用“strict refs”时不能将字符串(“”)用作哈希引用 如果我说的话,效果很好 $tag=$stream->get_tag('h2') $tag=$stream->get_标记('

我试图获取在特定
div
标记之后立即出现的标记。例如,我有html代码

<div id="example">
     <h2>Example</h2>
     <p>Hello !World</p>
</div>
但这就产生了错误
在使用“strict refs”时不能将字符串(“”)用作哈希引用

如果我说的话,效果很好
$tag=$stream->get_tag('h2')
$tag=$stream->get_标记('p')


但是我不能这样做,因为我需要立即获取两个标记,并验证它们是否是我所期望的。

如果您发布了一个可运行的示例程序,则更容易判断,但问题似乎是您没有意识到
get\u tag
同时返回开始和结束标记。结束标记没有属性。开始标记返回为
[$tag、$attr、$attrseq、$text]
,结束标记返回为
[“/$tag”、$text]
。所以在本例中,get_标记返回h2、/h2、div等。是吗?@Rajesh,是的。如果你试图在一个结束标记上执行
$tag->[1]{id}
,你会得到这个错误,因为
$tag->[1]
不是散列引用。你必须先检查
$tag->[0]
以查看当你使用
get\u tag
时,你是否有开始标记或结束标记,或者包含结束标记的标记列表。旁注:您可能更喜欢HTML::TokeParser::Simple——它与解析器完全相同,但它返回的是标记对象,而不是arrayrefs,您必须做一些愚蠢的事情才能从中获取数据:)
while ( $tag = $stream->get_tag('div') ) {
    if( $tag->[1]{id} eq 'Example' ) {
        $tag = $stream->get_tag;
        $tag = $stream->get_tag;
        if ( $tag->[0] eq 'div' ) {
        ...
        }
    }
}