【发布时间】:2012-08-29 22:51:21
【问题描述】:
我在使用 HTML::TokeParser 时遇到未定义的错误。
print $agent->content();
my $stream = HTML::TokeParser->new($agent->{content});
第 1 行 - 我确实从我的打印语句中获得了所需的输出。
第 2 行 - 错误:在打印中使用了未初始化的值 $stream。
不知道为什么它不能工作?
【问题讨论】:
标签: perl
我在使用 HTML::TokeParser 时遇到未定义的错误。
print $agent->content();
my $stream = HTML::TokeParser->new($agent->{content});
第 1 行 - 我确实从我的打印语句中获得了所需的输出。
第 2 行 - 错误:在打印中使用了未初始化的值 $stream。
不知道为什么它不能工作?
【问题讨论】:
标签: perl
HTML::TokeParser 构造函数的标量参数被视为文件名或文件句柄,打开文件失败将导致构造函数返回undef 并设置$!。
如果要将实际的 HTML 传递给构造函数,则必须使用标量引用:
my $stream = HTML::TokeParser->new( \$agent->content )
【讨论】:
$agent->content 与$agent->{content} 不同。前者调用一个名为<Package>::content 的方法(取决于$agent 被祝福到的包,后者将$agent 视为哈希引用并查找与字符串"content" 关联的值。对于某些类型对象它们都将返回相同的东西,但在 Perl 中没有任何东西需要这种情况。
$agent->content 与 $agent->{content} 不同。前者是方法调用,后者是哈希解引用。
【讨论】: