ファイルハンドルを変数に格納するには、
$fh = *FILEHANDLE;
サブルーチンに渡すには、
&function(*FILEHANDLE);
このPerl&CGI講座の
!%20ファイルハンドルを変数に格納する
ここに書いてある通りだと思います。
先ほどの質問と一緒です。
Perl.com Home Page
同時にファイルを開いているのでなければ、同じあたいになることもあると思います。ファイルハンドルはファイルを直接表すURLなどの表現と違って、開いているファイルの内部的な表現です。
内容を読み込んでみて、すべて同じ値になるのなら、openの指定の段階で間違っているのではないでしょうか?
>ファイルの内部的な表現です。
それはよくわかってます。
間違ってるようには思えないんですけれど。。
http://search.cpan.org/~jhi/perl-5.8.1/lib/FileHandle.pm
FileHandle - search.cpan.org
FileHandleモジュール使ってみては。
my $fh = new Filehandle;
$fh->open(”>>ファイル名”);
などなど
OOPの知識がほんの少し必要になりますが。
FileHandleモジュールは最近のPerlなら標準で付属しています。
ん〜、やはりこれを使うことになるんですかねー。
@fh=<FH>;
<>をつけてもだめですか?
それやると、読み込まれたものがかえってきますよね?
というか逆に自分が教えてる気がするのは気のせいでしょうか?
http://search.cpan.org/~jhi/perl-5.8.1/pod/perlopentut.pod
perlopentut - search.cpan.org
Perlのバージョンが書かれていませんが、
sub {
open my $fh, ”$infile”;
return $fh;
}
とかで良いのでは?
あとはGENSYMを使う方法もあります。
今出先なんで正確にはわかりませんが、4年前のPerl4.xくらいだと思います。
おそらくこの書式は5.6辺りくらいからしかできないかと思います。
GENSYM、、ん〜〜、明日時間あったら調べてみます。
http://search.cpan.org/~jhi/perl-5.8.1/lib/Symbol.pm
Symbol - search.cpan.org
というわけでgensymを使ったバージョン。
use Symbol;
sub foo {
my $fh = gensym;
open $fh, ”$infile”;
return $fh;
}
かな?
後で試します。
http://www.kt.rim.or.jp/~kbk/perl5.005/perldata.html
perldata - Perl のデータ型
上記の一番下には同じ事が載っていますので、考え方は正しいという気がしますが、IO::Handleモジュールを使う方が良いかも知れませんね。
モジュールのインストールは避けたかったんですが、現状それしかなさげ
この時別々のファイルを開いているのに$fhに入ってる値が一緒なんで困ってるんです。
自分がなにか勘違いしているのでしょうか?