-1

perl コードを編集していて、ハッシュを渡す必要があるサブルーチンを追加しました。

  %OrigResultHash = Parsing(\%OrigFileHash,\%OrigParamHash);

sub Parsing {

my (%fileHash,%paramHash)=(@ARG);
my %resultHash;
    foreach my $file (keys %fileHash) {
  my (@fileParam)=@{$fileHash{$file}};
  my (@fileStates)=grep(/^state:/,@fileParam);

実行すると、エラーメッセージが表示されます:

/vobs/cores/periph/blsp_prj/scripts/flow_result_parser_with_flag_orig.pl の 193 行目の ARRAY 参照ではありません。

foreach my $file (keys %fileHash) {

コードのどこが間違っているのか説明できますか?

4

2 に答える 2

1

では、@ARG はどこから来るのでしょうか?代わりに、@_ を使用してサブルーチンに転送される値を取得する必要があります。? Perl はハッシュ本体の代わりにハッシュ参照を使用して関数に転送するため、 %fileHash を使用することはできませんが、スカラー値のみを使用してハッシュ参照を格納します。そのため、コードを次のように変更します。

%OrigResultHash = Parsing(\%OrigFileHash,\%OrigParamHash);

sub Parsing {

my ($fileHash,$paramHash)=@_;
my %resultHash;
    foreach my $file (keys %$fileHash) {
    my (@fileParam)=$fileHash->{$file};
    .....
于 2013-09-29T08:29:03.003 に答える