Perlでローカルなバージョン?のファイルハンドルを作るには?

[上に] [前に] [次に]
andi 1999/12/03(金) 12:56:45
以下のようなレコード
1
2
3
4
5
があり、
1
2
3
4
5
2
3
4
5
3
4
5
4
5
5
という結果が求めたいのですが、
while(<FH>){
    print "$_<br>";
    while(<FH2>){
        print "$_<br>";
    }
}
というイメージで処理が出来ればと思っています。
具体的には、<FH2>のループに入る時点で<FH>のポイントを
<FH2>に与え、<FH2>の終了後、<FH2>のポイントをクリアし、
<FH>を<FH2>の前の位置で再開したいのですが。
分かり難いっすね・・・

勿論tellとseekでも同様の処理は可能ですが、
ファイルハンドルをローカル変数のように扱えないものかと悩んでおります。

リファレンスを使用すればできるのかと思いましたが
残念ながら上手く行きませんでした。

もし可能でしたら御教授下さい。
(縦長ですみません・・・)

きたむら 1999/12/03(金) 17:32:47
ファイルハンドルの複製でやるのはどうですか。

while(<FH>){
    print "$_<br>";
    open(FH2, "<&FH");
    seek(FH2, tell(FH), 0);
    while(<FH2>){
        print "$_<br>";
    }
}

#最初は複製するだけでFHの現在位置もコピーできないかと
#期待したんですが、実験してみるとやはり
#seek(FH2, tell(FH), 0); は必要でした。

andi 1999/12/03(金) 17:53:15
やっぱり無理ですかねぇ。
きたむらさんありがとうございます。

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