- ベストアンサー
関数の中から別の関数内のforeachの実行結果を得られない
お世話になります。 環境 perl 5.8.0 RHLinux9 以下のようにsub _Htmlからsub _List1を呼び出す場合は正常にリスト表示できるのですが、sub _List2を呼び出した場合、 Content-Type: text/html <HTML lang=ja > <HEAD>...として表示されてしまいます。 sub _List1{ @list = (0, 1, 2, 3, 4, 5); foreach (@list) { print "$_\n"; } } sub _List2{ $a1 = "./dir/data.dat"; $a2 = "./dir/data.dat"; $a3 = "./dir/data.dat"; &FileOpen('FILE1',"$a1"); &FileOpen('FILE2',"$a2"); &FileOpen('FILE3',"$a3"); @DATA = <FILE1>; push @DATA, <FILE2>,<FILE3>; close(FILE1); close(FILE2); close(FILE3); foreach (@DATA) { ($key,$val)=split(/=/,$_); print "$key=$val"; $StartNum++; } } sub _Html{ print <<EOM; <table> <tr><td> .. EOM &_List(''); print <<EOM; <tr><td> .. </table> EOM } sub _List2の内容を、CGIからhtmlを表示する際のスキン.htmlファイル内に下記のように記述した場合も 正常にリスト表示されます。 --スキン.html------ print <<"<!---HTML--->"; <HTML lang=ja > <HEAD>... <!---HTML---> $a1 = "./dir/data.dat"; $a2 = "./dir/data.dat"; $a3 = "./dir/data.dat"; &FileOpen('FILE1',"$a1"); &FileOpen('FILE2',"$a2"); &FileOpen('FILE3',"$a3"); @DATA = <FILE1>; push @DATA, <FILE2>,<FILE3>; close(FILE1); close(FILE2); close(FILE3); foreach (@DATA) { ($key,$val)=split(/=/,$_); print "$key=$val"; $StartNum++; } } print <<"<!---HTML--->"; ... </BODY></HTML> <!---HTML---> 1; ---
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (1)
- osamuy
- ベストアンサー率42% (1231/2878)
お礼
アドバイス有難う御座います。 File Open箇所は下記のようになっています。 sub FileOpen{ my($handle,$file,$name)=@_; if(!open("$handle","$file")){ ($name eq '') and $name=(split/\//,$file)[-1]; &Error("$nameが開けません。"); }} 当初問題解決に辺り open(FILE1, "<$a1") || &error("オープンエラー。$!"); のようにしてみた所、何も表示されず 今回の症状はブラウザー上でエラーを吐いていた為という事がわかりました。 結果的にはPATHの指定が間違っていただけの問題でした。 大変お騒がせ致しましたと共に糸口になるご意見有難う御座いました。