3
所以,我是Perl的新手。我試圖創建一個遞歸子例程。邏輯似乎很簡單: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
。但是,在我的生活中,我無法弄清楚什麼是錯誤的,我完全不知道該往哪裏看!
當我打開錯誤報告,致命和警告時,什麼也沒有返回。我錯過了什麼可能會出錯?
'使用嚴格',避免全局變量。 – choroba
夥計,加上'my'修好了!在子程序中創建時,我完全不知道變量是全局默認的。謝謝!如果您想發佈答案,我會將其標記爲最佳答案! – Nathanael
@choroba,你會做出答案嗎? – ikegami