Perlモジュールを参照してファイルハンドルへの参照を開く方法を見つけようとしています。メインプログラムを見れば、私が何を意味するか理解できるでしょう:
#!/usr/bin/perl
use strict;
use warnings;
use lib '/usr/local/share/custom_pm';
use Read_FQ;
# open the STDIN filehandle and make a copy of it for (safe handling)
open(FILECOPY, "<&STDIN") or die "Couldn't duplicate STDIN: $!";
# filehandle ref
my $FH_ref = \*FILECOPY;
# pass a reference of the filehandle copy to the module's subroutine
# the value the perl module returns gets stored in $value
my $value = {Read_FQ::read_fq($FH_ref)};
# do something with $value
基本的には、メイン プログラムが STDIN 経由で入力を受け取り、(安全な処理のために) STDIN ファイルハンドルのコピーを作成し、そのコピーへの参照を Read_FQ.pm ファイル (perl モジュール) の read_fq() サブルーチンに渡すようにします。サブルーチンは、そのファイル ハンドルから入力を読み取り、処理し、値を返します。ここで Read_FQ.pm ファイル:
package Read_FQ;
sub read_fq{
my ($filehandle) = @_;
my contents = '';
open my $fh, '<', $filehandle or die "Too bad! Couldn't open $filehandle for read\n";
while (<$fh>) {
# do something
}
close $fh;
return $contents;
ここで私は困っています。ターミナルで、ファイル名をメイン プログラムに渡して開くと、次のようになります。
cat file.txt | ./script01.pl
次のエラーメッセージが表示されます。Too bad! Couldn't open GLOB(0xfa97f0) for read
これは、perl モジュールでファイルハンドルへの参照を逆参照して開く方法に問題があることを示しています。メインプログラムは問題ありません。これ$refGlob = \*FILE;
はファイル ハンドルへの参照であり、ほとんどの場合、Perl によって自動的に逆参照されるはずです。ただし、ここではそうではありません。ファイルハンドル参照を逆参照して処理できるようにする方法を知っている人はいますか?
ありがとう。どんな提案でも大歓迎です。