所以,我是Perl的新手。我正在尝试创建一个递归子例程。逻辑似乎很简单:
sub directory_tree
{
my $sth = $dbh->prepare("
SELECT id, org_id, name
FROM media_directories
WHERE
org_id = ?
AND parent = ?
AND bucket = ?
");
$sth->bind_param(1, $_[0]);
$sth->bind_param(2, $_[1]);
$sth->bind_param(3, 'mfsermons.myflock2.com');
$sth->execute;
$result = '';
while(my($id, $org_id, $name) = $sth->fetchrow_array())
{
$result .= "<option value='$id'>$name</option>"; #377
$result .= directory_tree($org_id, $id); #378
}
return $result;
}
$directory_tree = '<select name="folder">';
$directory_tree .= directory_tree($churchid, 0);
$directory_tree .= '</select>';
为什么当我在第377行之后打印$result
它等于预期值时,但是当我在第378行打印时,什么都没有出现?不应该。=运算符只是再次运行该函数,然后附加到值?
我最好的猜测是Perl中存在一些我不理解的范围问题,特别是关于$result
。然而,对于我的生活,我无法弄清楚什么是错的,我完全不知道在哪里看!
当我打开错误报告,致命和警告时,不会返回任何内容。我错过了什么可能出错?
答案 0 :(得分:5)
use strict
,避免全局变量。换句话说:您正在重用全局$result
,在每次调用子例程时重置其值。