서브 루틴을 선언 한 후 my
을 사용하여 어휘 적으로 변수를 선언하려고하면 Perl에서이 서브 루틴에이 변수가 표시되지 않습니다. 모두 서브 루틴이 변수를 볼 수 있습니다, 당신이 그것을 (@arr = (1,2,3);
)를 선언하지 않고 변수를 설정하면, 그러나서브 루틴을 정의한 후 어휘 변수를 정의하십시오.
sub lol {
if (@arr) {
print "defined\n";
} else {
print "not defined\n";
}
}
my @arr = (1,2,3);
sub lol2 {
if (@arr) {
print "defined\n";
} else {
print "not defined\n";
}
}
lol; #prints "not defined"
lol2; #prints "defined"
또는 our
으로 변수를 선언 그러나, 서브 루틴은 변수가 변수가 표시됩니다 후에 선언했다.
버그 또는 기능인가요?
이 부분은 다음과 같습니다. "그러나 변수를 변수로 설정하면 선언하면 [...] 선언은 이해하기 어렵습니다. – asjo
@asjo 오, 통보하지 않았다, 미안, 바로 수정했다 – Vantuz
시원하고 훨씬 이해하기 쉽다. "엄격한 사용; 경고 사용"; 변수를 사용하기 전에 모든 변수를 선언해야하기 때문에 실수를 피하기 쉽습니다. 의도 한대로 작동합니다. – asjo