그래서 저는 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
과 관련하여 특히 그렇습니다. 그러나, 내 인생을 위해, 나는 틀린 것이 무엇인지 알 수 없다. 그리고 나는 볼 곳이 전혀 모른다!
오류보고, 치명적 오류 및 경고를 켜면 아무 것도 반환되지 않습니다. 내가 놓친 게 뭐가 잘못 될 수 있니?
'use strict'는 전역 변수를 사용하지 않습니다. – choroba
야, 내 '고정'추가! 변수가 서브 루틴 내부에서 생성 될 때 기본적으로 전역 변수라는 사실을 전혀 알지 못했습니다. 감사! 답변을 게시하려면 가장 좋은 답변으로 표시하겠습니다. – Nathanael
@ choroba, 대답 할거야? – ikegami