【问题标题】:Can't call method "get_token" on an undefined value无法对未定义的值调用方法“get_token”
【发布时间】:2012-11-06 23:59:30
【问题描述】:

每当我运行 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;
}

【问题讨论】:

    标签: html perl parsing web-crawler


    【解决方案1】:

    很明显$p是undef,$pHTML::TokeParser->new($htmlFileName)的结果。这意味着打开文件时出错。正如概要中所建议的那样,使用以下方法来确定该错误是什么:

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

    【讨论】:

    • 我认为这是解析文件末尾的错误,但就是这样。其中一个错误我花了几个小时思考,只需要第二双眼睛。谢谢!!
    • get_token$p 上被调用,$p 永远不会改变。因此,它必须在第一次评估 $p->get_token 时发生。
    猜你喜欢
    • 2011-06-04
    • 1970-01-01
    • 1970-01-01
    • 2019-03-27
    • 1970-01-01
    • 1970-01-01
    • 2016-06-23
    • 2013-09-25
    • 1970-01-01
    相关资源
    最近更新 更多