Perl은 오늘 나에게 좋은 점수를 주었고 질문이 있습니다. 다른 perl 스크립트에서 링크를 통해 펄 스크립트에 액세스하고 있습니다. agent.pl?agentid=40서브 루틴에서 사용할 수없는 쿼리 문자열에서 Perl 변수를 설정할 수 있습니다 (일부 서브 루틴에서 사용 가능).
나는 두 가지 방법으로 문제없이 쿼리 문자열을 표시 사용하고있어 agent.pl 스크립트에서:
my $thatagent = $q->param('agentid');
$form{agentid}
내가의 시작 부분에 어휘 변수를 설정 내 모든 서브 루틴 외부의 스크립트. 그런 다음 $ theagent를 사용하여 스크립트가 실행될 때 HTML을 표시하는 "기본"서브 루틴에 에이전트 ID 번호를 표시합니다. 여기에 어떤 문제도 없습니다.
$dbh->{AutoCommit} = 0;
my $q = CGI->new;
my $thatagent = $q->param('agentid');
my %form = $q->Vars;
if (! $q->param("savebtn")) {
&ViewAgent();
exit;
}
&UpdateAgent();
는 또한 문제없이 select 문에 viewagent 서브 루틴 사용 $ 양식에서 두 개의 서브 루틴 {agentid}를 호출합니다.
my $sth = $dbh->prepare("select a.name, a.paidcommission, a.paidreferral, paddy.address1, paddy.address2, paddy.city, paddy.state, paddy.zipcode, maddy.address1, maddy.address2, maddy.city, maddy.state, maddy.zipcode, bc.name, bc.phonenumber, bc.phoneext, bc.phonenumber2, bc.phoneext2, bc.fax, bc.email, sc.name, sc.phonenumber, sc.phoneext, sc.phonenumber2, sc.phoneext2, sc.fax, sc.email from agent a inner join entity e on entityid = agentid inner join address paddy on paddy.addressid = physicaladdressid inner join address maddy on maddy.addressid = mailingaddressid inner join contact bc on bc.contactid = billingcontactid inner join contact sc on sc.contactid = salescontactid where a.agentid = $form{agentid};") or die "prepare statement failed: $DBI::errstr\n";
및
my $sth = $dbh->prepare("select agentid, note, createdt, createuser from agentnote where agentid = $form{agentid};") or die "prepare statement failed: $DBI::errstr\n";
이 그런 문제를 제공, 전 세계적으로 (& 위 updateagent)와 $ thatagent를 사용하려고 다른 서브 루틴을 호출하지만 실패합니다. 숫자를 하드 코딩하면 제대로 작동합니다.
sub UpdateAgent {
my $sth = $dbh->prepare("UPDATE agent SET name=?, paidcommission=?, paidreferral=? WHERE agentid=?;") or die "prepare statement failed: $DBI::errstr\n";
$sth->execute($form{'name'}, $form{'paidcommission'}, $form{'paidreferral'}, $thatagent) or die "prepare statement failed: $DBI::errstr\n";
$sth->finish;
}
나는 내 스크립트의 나머지를 "보고"내 서브 루틴과 분리의 일종이 있어야 느낌이 있지만 확실입니다. 도와주세요! 난 당신이 통해 .pl 파일을 필요에 따라 호출되는 서브 루틴에 컴파일됩니다 mod_perl과 같은 시스템의 어떤 종류에서이 스크립트를 실행하는 추측하고있어
서브 루틴이 * 변수 선언 뒤에 * 정의되어 있습니까? – choroba
예. – kyle
mod_perl이 관련되어 있습니까? – ikegami