私は、Perlモジュールが尊重してファイルハンドルへの参照を開く方法を理解しようとしています。その後、参照を渡す基本的にSTDINファイルハンドルのコピーを取り除く方法は?
#!/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によって参照解除されるべきであると読んでいます。ただし、ここではそうではありません。誰も私がそれを処理することができるようにファイルハンドルリファレンスを逆参照する方法を知っていますか?
ありがとうございました。どんな提案も大歓迎です。
ああ大丈夫です。ですから、モジュールで再度filehandle refを開く必要はありません。すぐに '$ FH_ref'から読むことができます。さて、それは明らかです。私はそれを使用するためにそれを推論する必要があると思った。ありがとう – cooldood3490