Perl函数中的变量在函数外部具有意外值

时间:2012-11-16 00:08:58

标签: perl recursion dbi

所以,我是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。然而,对于我的生活,我无法弄清楚什么是错的,我完全不知道在哪里看!

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

1 个答案:

答案 0 :(得分:5)

use strict,避免全局变量。换句话说:您正在重用全局$result,在每次调用子例程时重置其值。