• ベストアンサー

関数の中から別の関数内の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; ---

質問者が選んだベストアンサー

  • ベストアンサー
  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.2

&FileOpen('FILE1',"$a1"); がおかしい気がしますが。 sub FileOpen はどうなっているんでしょう? 単に &File を削除すればいけるような・・・? Open('FILE1',"$a1");

taku0
質問者

お礼

アドバイス有難う御座います。 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の指定が間違っていただけの問題でした。 大変お騒がせ致しましたと共に糸口になるご意見有難う御座いました。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

> 関数の中から別の関数内のforeachの実行結果を得られない のではなくて、単に生成されているHTMLがよろしくなくて、思ったとおりに表示されてないだけでは。 出力結果をファイルに書き出して、htmllint等で評価してみるとか。

taku0
質問者

お礼

htmllint何ていうのがあるんですね。はじめてしりました。 今回は、私のPATHの記述ミスという事が判明しました。 この度は貴重なご意見有難う御座いました。

すると、全ての回答が全文表示されます。