无法在未定义的值上调用方法“get_token”

时间:2012-11-06 23:59:31

标签: html perl parsing web-crawler

每当我运行TokeParser时,我都会遇到这个未定义的错误。我认为这是因为它从HTML中提取的最后一件事是'undef'导致了错误,但我确定这是否正确或者如果是这样的话该怎么做。

#!usr/bin/perl
use warnings;
use strict;

use HTML::TokeParser;

sub findTokens {
    my $htmlFileName = "83.html";

    my $p = HTML::TokeParser->new($htmlFileName);
    my @tokens;

    while (my $newChunk = $p->get_token) {
            if ($newChunk->[0] eq 'T') {
                my @lineArray = split(' ', $newChunk->[1]);
                foreach my $i (@lineArray) {
                    if ( lc($i) =~ /^[a-z]*\-?'?s?$/) {
                        push(@tokens, lc($i));
                    }
                }
            }
    }
    return @tokens;
}

1 个答案:

答案 0 :(得分:2)

很明显$p是undef,而$pHTML::TokeParser->new($htmlFileName)的结果。这意味着打开文件时出错。如概要中所述,使用以下内容确定错误是什么:

my $p = HTML::TokeParser->new($htmlFileName)
   or die("Can't open $htmlFileName: $!\n");