perl에서 중첩 데이터 (매우 복잡한) 데이터 구조에 액세스하는 코드를 작성했습니다.Perl 오류 전역 심볼에 명시 적 패키지 이름이 필요합니다.
<%method searchFeatureInFG>
<%args>
$featureGroup
$featureNameHash
</%args>
<%init>
my $foundFeature = 0;
my $foundGroup = undef;
my $foundIndex = undef;
if(defined $featureGroup && defined $featureNameHash){
for(my $i = 0; $i < @$featureGroup; $i++){
#print "<pre>".Data::Dumper::Dumper($featureGroup->[$i]->{'features'})."</pre>";
if(ref($featureGroup->[$i]) eq 'HASH'){
if(defined $featureNameHash->{$featureGroup->[$i]->{'name'}}){
$foundGroup = $featureGroup;
$foundIndex = $i;
$foundFeature = 1;
}
elsif(defined $featureGroup->[$i]->{'features'}){
for(my $j = 0; $j<scalar @{$featureGroup->[$i]->{'features'}} ; $j++){
for(my $k=0;$k<scalar @{$featureGroup->[$i]->{'features'}->[$j]->{'features'}};$k++) {
if (defined $featureGroup->[$i]->{'features'}->[$j]->{'features'}->[$k]->{'name'}) {
print $featureGroup->[$i]->{'features'}->[$j]->{'features'}->[$k]->{'name'}."\n";
}
}
last if !defined $featureGroup->[$i+1]->{'features'};
}
}
}
}elsif(defined $featureNameHash->{$featureGroup->[$i]}){
$foundFeature = 1;
$foundGroup = $featureGroup;
$foundIndex = $i;
}
last if($foundFeature);
}
}
return ($foundFeature, $foundGroup, $foundIndex);
</%init>
</%method>
이렇게하면 다음과 같은 오류가 표시됩니다.
Global symbol "$i" requires explicit package name at
Global symbol "$foundFeature" requires explicit package name at
Global symbol "$foundGroup" requires explicit package name at
Global symbol "$featureGroup" requires explicit package name at
Global symbol "$foundIndex" requires explicit package name at
이러한 오류는 무엇을 의미합니까?
를 선언 어떤 루프 범위의 외부에서이 그 변수 정의를 이동 고정하고'strict' 오류가 무슨 뜻인지하지 않으려면? 또한, 이것은 Perl 코드가 아니며, 다른 도구에서 Perl 코드를 작성하는 데 사용됩니다. – TLP
@TLP, 메이슨처럼 보입니다. – friedo
당신은 펄 모듈에'logic'을 두어야하고'Mason component'는 모듈을 호출하고 것들을 테스팅합니다. 그것이 모듈이라면, 디버그하는 것이 훨씬 쉽습니다. 그리고 오래된'HTML :: Mason'을'Mason'으로 변환하려고 시도했지만, 차이점을 알아야합니다. '% args'는'Mason'에서 사라졌습니다 (https : //metacpan.org/pod/distribution/Mason/lib/Mason/Manual/UpgradingFromMason1.pod) – jm666