• ベストアンサー

ファイル作成時

0~5までのHTMLファイルを作成したいと考えているのですが、下記2パターンでの実現方法をご掲示頂けませんでしょうか --------------------------------------------------------------- 1.下記の関数Aの中から関数Htmlを呼び出し、@list分n$_.htmlファイルを作成するというものなんですが print時、@aaaが(中身が空みたいで)読まれておらず、ファイル出力結果の内容は空行後、ファイル毎に ファイルの数字があるだけの状況です。 どうすれば数字.htmlファイル毎にsub Htmlの内容を表示後、その中に$aを入れる事ができますでしょうか sub A{ @list = (0, 1, 2, 3, 4, 5); foreach $_(@list) { @aaa = &Html($_); open(OUT,">$_.html"); print OUT "@aaa{$_}\n$_"; close(OUT); } } sub Html{my($a)=@_; print <<HTML; <HTML lang=ja > <HEAD> <TITLE></TITLE> <BODY>test$a </BODY></HTML> HTML } --------------------------------------------------------------- 2.sab Aの関数内にsub Htmlの内容自体を持ってくる形で実現する場合について これも同様に@aaaが(中身が空みたいで)読まれておらず、ファイル出力結果の内容は空行後、ファイル毎に ファイルの数字があるだけの状況です。 sub A{ @list = (0, 1, 2, 3, 4, 5); foreach $_(@list) { @aaa = print <<HTML; <HTML lang=ja > <HEAD> <TITLE></TITLE> <BODY>test$_ </BODY></HTML> HTML open(OUT,">$_.html"); print OUT "@aaa{$_}\n$_"; close(OUT); } } どなたか上記2点についてのいずれかでも結構ですので、ご教授願えませんでしょうか。宜しくお願い致します。

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

  • ベストアンサー
  • hara_peko
  • ベストアンサー率28% (11/38)
回答No.1

sub A{ my @list = (0, 1, 2, 3, 4, 5); foreach (@list) { my $aaa = &Html($_); open OUT,">$_.html"; print OUT "$aaa\n$_"; close OUT; } } sub Html{ my($a) = @_; return <<HTML; <HTML lang=ja > <HEAD> <TITLE></TITLE> <BODY>test$a </BODY></HTML> HTML } A; #こんなんでよいのでしょうか? #各ファイル末尾に数字が入りますが・・・ #基本的な文法をもう少し確認された方が・・・

taku0
質問者

お礼

お忙しい中有難うございます。 ファイル末尾に数字が入るのは、私の頭の理解と整理の為そのような形にしていました。 ご掲示頂いた内容から、自分の中で分からない点を理解する事ができました。 後折角ですので、一つ質問させて頂きたいのですが sub Htmlの最後のA;のAは無くても平気ですが、これはどのような意味になっているのでしょうか お手数かけますがお時間ございますようでしたらお教え頂けますと幸いです。 宜しくお願い致します。

その他の回答 (5)

  • hara_peko
  • ベストアンサー率28% (11/38)
回答No.6

No.1です。私もNo.5の方と同じ理由で A; がついちゃってます。あと、よけいなアドバイスになって しまいますが、サブルーチン名も A より make_html_file など、役割がわかりやすいものにすると 後々便利です。その点 Html という名前のサブルーチン は、分かり易くていいですよね。

taku0
質問者

お礼

お忙しい中、ご教授頂きまして有難うございます。 ご指摘の通り、サブルーチン名はAよりも何かそれを意味する名称にした方がよいですよね。 テストという事もあり、Aという事で行っているのですが、実動作させる際には 分かりやすい名称にするように致したいと思います。 この度はお忙しい中色々とご教授頂きまして本当に有難うございました。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.5

#2>A;のAは何を意味しているのか 最後のAはsub A {…}の呼び出しです。 &Aと記述してあることが多いかと思いますが、 既に定義が(呼び出しより前に書かれている)されている時&は省略できます。 質問文には、書かれていないので、回答に付け加えるのは変ですね。 すみません。 (ウチで試しに実行したときの名残です。)

taku0
質問者

お礼

お忙しい中ご教授有難うございます。 定義が呼び出し前より前にされている場合は、関数の呼び出しは&が不要という事でよいんですね。更にAが無い場合でも仮にsub Bやsub Cから呼び出せる為、その場合はどうなるのかを考えた場合、A自体も省略できるという考えでよいんでしょうか。(実際Aを省略しても動作しますし。) いずれにしても、当初の問題は解決致しました。これを機に今後もステップアップして参りたいと存じます。 お忙しい中有難うございました。

  • SHOO-3
  • ベストアンサー率56% (28/50)
回答No.4

1番で。メモリとか名前空間とか汚したくないならこんな感じでしょうか? --------------------------------------------------------------- sub A{ for(0, 1, 2, 3, 4, 5){ open(my$OUT, ">$_.html")||die"File open error, stopped"; print $OUT &Html($_); close($OUT); } } sub Html{ return <<_ED_OF_HTML_; <HTML lang=ja > <HEAD> <TITLE></TITLE> </HEAD> <BODY>test$_[0]</BODY> </HTML> _ED_OF_HTML_ }

taku0
質問者

お礼

この度はお忙しい中ご教授頂きまして有難うございます。 ご掲示頂いた内容と文面から名前空間やメモリの事まで考えて組む事もあるんだなぁ・・と驚かせられてしまいました。 この度はfor文にてサンプルをご掲示頂き有難うございます。 今後の参考にさせて頂きたく存じます。

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

> @aaa = print <<HTML; これで、printしたい内容が配列@aaaに代入できると思ってしまったのが敗因なのでは。 やりたい事が、「出力するHTMLは、サブルーチン化して保守しやすくしたい」という事なら、 sub Html{ my( $a ) = @_; my $fname = $a . '.html'; open( OUT, '>'.$fname ) or die( '?! ', $fname, ' - ', $!, ',' ); print OUT <<"_EO_HTML_"; <html lang="ja"><head> <title>$0 $a</title> </head><body> test$a </body></html> _EO_HTML_ close( OUT ); } my @list = ( 0, 1, 2, 3, 4, 5 ); foreach my $a ( @list ){ &Html( $a ); } ――ぐらいで良いのでは。

taku0
質問者

お礼

お忙しい中、ご教授頂きまして有難うございます。 ご指摘の通り、まさしく仰る通りの考えだったのですが ご教授頂きました甲斐あって分からない点を整理する事ができました。 またperlの実行ファイル名やシステムコールのエラー等がある場合の対処まで して頂きご教授頂いた内容から色々と勉強させて頂きました。 この度は本当に有難うございました。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

私は、2.の方で、 ちょっと意味不明の部分があったので自身はないですが・ ---------------------- sub A{ foreach (0 .. 5) { open(OUT,">$_.html"); print OUT <<HTML; <HTML lang='ja' > <HEAD> <TITLE></TITLE> <BODY>test$_ </BODY></HTML> HTML close(OUT); } } A;

taku0
質問者

お礼

お忙しい中、ご教授いただきまして有難うございます。 分からない点などが整理でき本当に助かりました。 ご掲示頂きました最後の箇所の、A;のAは何を意味しているのか宜しければご教授頂けませんでしょうか。お忙しいかとは存じますが宜しくお願い致します。

関連するQ&A