【问题标题】:getting uninitialized error with instantiation of HTML::TokeParser实例化 HTML::TokeParser 时出现未初始化错误
【发布时间】:2012-08-29 22:51:21
【问题描述】:

我在使用 HTML::TokeParser 时遇到未定义的错误。

print $agent->content();
my $stream = HTML::TokeParser->new($agent->{content});

第 1 行 - 我确实从我的打印语句中获得了所需的输出。

第 2 行 - 错误:在打印中使用了未初始化的值 $stream。

不知道为什么它不能工作?

【问题讨论】:

    标签: perl


    【解决方案1】:

    HTML::TokeParser 构造函数的标量参数被视为文件名或文件句柄,打开文件失败将导致构造函数返回undef 并设置$!

    如果要将实际的 HTML 传递给构造函数,则必须使用标量引用:

    my $stream = HTML::TokeParser->new( \$agent->content )
    

    【讨论】:

    • 正如@choroba 所说,$agent->content$agent->{content} 不同。前者调用一个名为<Package>::content 的方法(取决于$agent 被祝福到的包,后者将$agent 视为哈希引用并查找与字符串"content" 关联的值。对于某些类型对象它们都将返回相同的东西,但在 Perl 中没有任何东西需要这种情况。
    • 因为你说它有效:“ine 1 - 我确实从我的打印语句中得到了想要的输出。”
    【解决方案2】:

    $agent->content$agent->{content} 不同。前者是方法调用,后者是哈希解引用。

    【讨论】:

      猜你喜欢
      • 2023-03-20
      • 2017-03-13
      • 2021-06-17
      • 2015-08-03
      • 2013-07-04
      • 1970-01-01
      • 1970-01-01
      • 2021-12-12
      • 2021-09-22
      相关资源
      最近更新 更多