【发布时间】:2015-04-16 16:46:25
【问题描述】:
很抱歉用这么愚蠢的问题打扰您,我是 Perl 的新手。
我正在尝试修改由我的同事编写的解析子例程,并且在 perl 中的函数存在问题。
它返回空值,我不明白为什么?已经阅读过参考网站,看过示例,它们是显而易见的。函数代码如下:
sub parseHTML
{
my ($node, $depth) = @_;
my $str = ' ';
if (ref $node)
{
if ($node->tag () ne "script" && $node->tag () ne "style")
{
my @children = $node->content_list ();
for my $child_node (@children)
{
parseHTML ($child_node, $depth + 1);
}
}
}
else
{
$str = $str.$node."\n";
#print $str;
}
return $str;
}
然后我尝试使用它:
my $parser = HTML::TreeBuilder->new ();
$parser->parse ($cont);
my $Parsed = parseHTML ($parser, 0);
print "$Parsed\n";
#parseHTML ($parser, 0);
返回值为空。但是,如果我决定在函数中打印数据,请取消注释字符串:print $str; 并改用parseHTML ($parser, 0);,它可以工作,并且有输出。
哪里可能出错?函数中的数据似乎是本地的。
这也是complete code 列表。
【问题讨论】:
-
$str 在
ref $node== true 部分没有改变。 -
您永远不会在 if 语句的 true 部分设置
$str的值。 -
你确定不想要
$node->as_text吗? -
谢谢大家,现在我明白了
-
@Borodin,我不知道这可能...... :) 所以,一切都更简单了吗?)
标签: perl function return-value subroutine