ファイルハンドルの変更

[上に] [前に] [次に]
miyu [E-Mail] 1999/10/08(金) 16:30:15
掲示板スクリプトを作成しています.
記事の表示部分をhtmlファイルに書き出しておいて,
掲示板を閲覧するだけのときはそのファイルを表示するように
しました.(KENT-Webさんところのsunbbsのようなイメージ)
しかし諸般の事情から,表示部分も他の掲示板のように
cgiで処理して直接ブラウザに表示する形式も作って,
スクリプトの中で両者の処理を選択できるようにすることに
しました.

その際,print文の出力先(ファイルハンドル)が異なるので,

if( htmlファイルに書き出す方法が選択 ){
   open( HTML, ">$hogehoege" );
    print HTML $hagahaga;
   close(HTML);
else( cgiで処理する方法が選択 ){
    print STDOUT $hagahaga;
}

というようにすればいいのですが,これをするには
print文の数が多すぎ,また何箇所かに散らばっているので,
使いたくありません.
私の理想では,

------
出力先を{HTMLファイル|標準出力}に変更
if( htmlファイルに書き出す方法が選択 ){ open( HTML, ">$hogehoege" ); }
    print $hagahaga;
    print ...;
    print ...;    ←現在選択しているハンドルに出力されているつもり
if( htmlファイルに書き出す方法が選択 ){ close(HTML); }
---
のように,最初にファイルハンドルを指定して変更しない限り
そのハンドルに出力されるようにしたいのですが,
どうしたらいいでしょうか?
できない場合は,あきらめます.;-)

ふじ 1999/10/08(金) 18:25:33
1引数の select を使いましょう。

open HTML, "> hoge.html";
select HTML;
print "hogehoge";    # <-- HTML に出力される
close HTML;
select STDOUT;

ただし、デフォルトの出力先を変更している間に中でサブルーチンを呼び出して、そこで print が
使われている場合は注意しないといけません。
#詳しくはラクダ本か何かを見て下さい。
いけませんが。

miyu 1999/10/09(土) 11:33:14
[[解決]]
どうもありがとうございます.
ほんとうにどんぴしゃりの関数でした.
>ただし、デフォルトの出力先を変更している間に中でサブルーチンを呼び出して、そこで print が
>使われている場合は注意しないといけません。
このとおりの使い方をしていたのですが,特に問題はなさそうでした.
手許にらくだ本がないので確認できませんでした.

[上に] [前に] [次に]