2016-05-10 6 views
0

私はPerlを初めて使い慣れており、数行のレガシーコードをリファクタリングするのに十分なことを学んでいます。ここでforeachループを変更しようとしているときに構文エラーが発生する

は、私が持っているコードの抜粋です:

my ($data2) = @_; 
foreach $app (@{$data2->{record}}) 
{ 
... 
    if ($app->{submission_date__required_}) 
    { 
      $datetime = convert_date($app->{submission_date__required_}, "both"); 
      print $datetime; 
    } 
} 

私は何をしようとしたことはこれです:

my $data = pop $data2; 
my $app = $data->{record}; 

if ($app->{submission_date__required_}) 
{ 
    $datetime = convert_date($app->{submission_date__required_}, "both"); 
    print $datetime; 
} 

私が間違っているとどのように何を達成するためにしています何の任意の説明私は(ループから最後のアイテムを取得し、ループ全体を反復する代わりに$ appに割り当てる)必要があります。

ログに奇妙なエラーがあり、ページが読み込まれません。

[Tue May 10 14:55:20 2016] [error] [client xxx.xxx.xxx.xxx] Use of uninitialized value in lc at submitapp.pl line 48. 
[Tue May 10 14:55:20 2016] [error] [client xxx.xxx.xxx.xxx] Use of uninitialized value $notix in print at submitapp.pl line 177. 
[Tue May 10 14:55:20 2016] [error] [client xxx.xxx.xxx.xxx] Use of uninitialized value $store in string eq at submitapp.pl line 249. 
[Tue May 10 14:55:20 2016] [error] [client xxx.xxx.xxx.xxx] Use of uninitialized value $store in string eq at submitapp.pl line 258. 
[Tue May 10 14:55:20 2016] [error] [client xxx.xxx.xxx.xxx] Use of uninitialized value $store in string eq at submitapp.pl line 267. 
[Tue May 10 14:55:20 2016] [error] [client xxx.xxx.xxx.xxx] Use of uninitialized value $operating_mode in string eq at submitapp.pl line 287. 
[Tue May 10 14:55:20 2016] [error] [client xxx.xxx.xxx.xxx] Use of uninitialized value $operating_mode in string eq at submitapp.pl line 300. 
[Tue May 10 14:55:20 2016] [error] [client xxx.xxx.xxx.xxx] Use of uninitialized value $operating_mode in string eq at submitapp.pl line 328. 
[Tue May 10 15:09:10 2016] [error] [client xxx.xxx.xxx.xxx] syntax error at getqbdata.pl line 415, near "), referer: http://xxx.xxx.xxx.xxx/qb/submitapp.pl?action=Submit 
[Tue May 10 15:09:10 2016] [error] [client xxx.xxx.xxx.xxx] \t\tprint", referer: http://xxx.xxx.xxx.xxx/qb/submitapp.pl?action=Submit 
[Tue May 10 15:09:10 2016] [error] [client xxx.xxx.xxx.xxx] Execution of getqbdata.pl aborted due to compilation errors., referer: http://xxx.xxx.xxx.xxx/qb/submitapp.pl?action=Submit 
[Tue May 10 15:09:10 2016] [error] [client xxx.xxx.xxx.xxx] Premature end of script headers: getqbdata.pl 

ネヴァーマインド、apacheの再起動#9の後に、それが最終的に働いた:ここでエラーログが言うことです。

+3

[ 'pop'](http://perldoc.perl.org/functions/pop.html)渡す必要がありますハッシュリファレンスではありません。あなたが 'my $ data = pop @ {$ data2 - > {record}}; ' –

+1

の投稿コードの構文が正しいと思っています。取得しているエラーは構文エラーではありません。あなたが得ているエラーを提供できますか? – ikegami

答えて

1

$data2は、ハッシュへの参照です。 pop()関数は、引数として配列をとります。 $data2はハッシュを参照するため、削除する「最後の」要素の概念はありません。だから、あなたがしようとしていることを再考する必要があるでしょう。

あなたのケースでは、ループは$data2->{record}で参照される配列を反復していました。ただし、popとことの最後の要素にアクセスすることができます:

my $app = pop @{$data2->{record}};

+0

$ app = pop @ {$ data - > {record}}を実行しようとするときに唯一の問題です。内部サーバーエラーが発生することです。私は他のものはすべて同じにしていました。 – marat75

+1

@ marat75、それは役に立たない。 Perlは何のエラーを出していますか?おそらくあなたのWebサーバーのログにあります。 – ikegami

+0

申し訳ありませんが、私はApacheのログからエラーを投稿しました。 – marat75

関連する問題