질문 서브 루틴 :펄 - CGI 모듈 매개 변수로 전달 PARAM()는 펄 CGI 모듈을 사용하는 방법에 대한
의 다음과 같이 내가 정의 된 두 개의 매개 변수를 받아들이는 하위라는 foo에 있다고 가정 해 봅시다 :
sub foo {
local($a, $b) = @_;
print "a= [$a]";
}
내 메인 루틴에서
, 나는이 같은 foo는 몇 가지 형태의 매개 변수를 사용하고 전달할 :
use CGI;
$cgi = CGI->new;
foo($cgi->param('field1'), $cgi->param('field2'));
양식 필드 1의 값을 전달하지 않은 경우
는 (내 경우, SELECT 필드는 필드 1 위스콘신라고 어떤 값도 선택하지 않았을 때), sub foo는 $ a를 $ cgi-> param ('field2')에 전달 된 값으로 설정합니다.이 값은 비어 있지 않은 값입니다.왜 이런 일이 일어나고 왜 $ a는 단순히 공백 (') 값이 아니고 $ b = $ cgi-> param ('field2 ')에서 전송 된 값이 아닌지 이해할 수 있습니까?
나는 논리적 인 이유가있을거야,하지만 난하지 펄 나는 그것이 내가 배우거나 펄에 대해 이해하는 것이 아직했습니다 뭔가 확신 그래서 프로입니다.
미리 감사드립니다.
(그리고 당신은'$의 A'와'사용하지 말아야합니다 $ b'를 특별히'sort'를 위해 사용하는 변수 이름으로 사용합니다.)'my ($ foo, $ bar) = @_;' – friedo
죄송합니다 - $ a와 $ b를 사용하여 방금 나타났습니다. 임의의 두 변수. 이것은 제가 성취하고자하는 것을 보여주기 위해 만들어지는 예일뿐입니다. 나는 하위 안에 실제 매개 변수로 사용하지 않습니다. 서브 루틴에서 수신되는 매개 변수 변수를 선언하기 위해 로컬이 부적절한 것으로 여겨지는 이유에 대해 궁금합니다. – Vinnie
'local'이라는 이름이 잘못 붙여 졌기 때문에. 로컬 변수는 생성하지 않습니다. 당신이 기대했던대로 작동하는 지역화 된 변수를 만들고, 항상'my'를 사용하십시오. –