3

所以,我是 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>';

为什么当我$result在第 377 行之后打印它等于预期值,但是当我在第 378 行打印它时,什么都没有出现?.= 运算符不应该再次运行该函数,然后附加到该值吗?

我最好的猜测是 Perl 中存在一些我不理解的范围问题,尤其是关于$result. 但是,对于我的生活,我无法弄清楚出了什么问题,我完全不知道去哪里找!

当我打开错误报告、致命和警告时,没有返回任何内容。我错过了什么可能出了什么问题?

4

1 回答 1

5

use strict, avoid global variables. In other words: you are reusing the global $result, resetting its value in each call to the subroutine.

于 2012-11-16T08:10:43.653 回答