Имам сетер sub setAssignmentStatus
, който взема масив от хешове (AoH оттук нататък) и друг параметър (не се занимавайте с това, тъй като тази част работи) и прави нещо итерация през AoH, за да зададе друг запис във всеки хеш елемент. Не връща нищо, защото искам да използвам същия обект AoH с добавените записи, след като бъде изтеглен през подчинителя на настройката, а не да конструирам изцяло нов AoH и да попълвам отново записите. Ето го сетерът:
sub setAssignmentStatus
{
my $fileFlatArySclr = $_[0];
my $cfgFile = $_[1];
#here I convert the AoH from the scalar necessary for the sub to its native form
my @fileFlatAry = @$fileFlatArySclr;
#this works, don't worry
my %cfgVarHash = getConfigVars($cfgFile);
foreach my $fileVarHashSclr(@fileFlatAry)
{
#convert each AoH entry from scalar necessary for iteration to native hash
my %varHash = %$fileVarHashSclr;
my $varName = $varHash{'VAR_NAME'};
my $asgnLineCnt = $varHash{'ASGN_CNT'};
my $asgnSts;
my $fileAsgnSts;
my $cfgAsgnSts;
if($asgnLineCnt > 0) { $fileAsgnSts = 1; } else { $fileAsgnSts = 0; }
my $cfgAsgnLine = $cfgVarHash{$varName};
if($cfgAsgnLine ne undef) { $cfgAsgnSts = 1; } else { $cfgAsgnSts = 0; }
$asgnSts = $fileAsgnSts.$cfgAsgnSts;
#debug to make sure $asgnSts is not null in the first place (it is not!)
print "\n*** setting ASGN_STUS of ".$varName." to ".$asgnSts;
#Here we set ASGN_STUS for every iteration
$varHash{'ASGN_STUS'} = $asgnSts;
}
}
Нарича се по следния начин:
setAssignmentStatus(\@fileFlatAry, $cfgFile);
Въпреки това, след изпращане на @fileFlatAry
AoH до setAssignmentStatus
, всеки хеш елемент не съдържа запис ASGN_STUS. Защо е така и как мога да го поправя?
Подозрението ми е, че правя нещо нередно с модификатора \
, което е начинът, по който получавам структурата на данните да бъде предадена като скаларен параметър към подчинителя, но не съм сигурен.