0

setAssignmentStatusハッシュの配列(これ以降はAoH)と別のパラメーター(この部分は機能するので、これについては気にしないでください)を取り、AoHを反復処理して、各ハッシュ要素に別のエントリを設定するsettersubがあります。setter subを介してプルされた後、追加されたエントリで同じ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エントリが含まれません。それはなぜですか、どうすれば修正できますか?

私の疑いは、修飾子で何か問題が発生していることです\。これにより、データ構造がスカラーパラメーターとしてサブに渡されるようになりますが、よくわかりません。

4

1 に答える 1

3

%varHash参照されたハッシュを変更する代わりに変更します。すべてをローカル変数にコピーしたり、ローカル変数を変更したりするのはやめましょう。

$varHash{'ASGN_STUS'} = ...;

する必要があります

$fileVarHashSclr->{'ASGN_STUS'} = ...;

私もしませんmy @fileFlatAry = @$fileFlatArySclr;。純粋な廃棄物。

于 2013-02-02T00:32:07.037 に答える