ファイルハンドルを引数としてPERLのサブルーチンに送ることは可能ですか?
はいの場合、それを受け取ってサブルーチンで使用する方法を示すサンプル コード スニペットを提供していただけますか?
ファイルハンドルを引数としてPERLのサブルーチンに送ることは可能ですか?
はいの場合、それを受け取ってサブルーチンで使用する方法を示すサンプル コード スニペットを提供していただけますか?
必要に応じてレキシカル変数 ( open(my $fh, ...)
) を使用していますよね? その場合、特別なことをする必要はありません。
sub f { my ($fh) = @_; print $fh "Hello, World!\n"; }
f($fh);
グロブ ( ) を使用している場合は、グロブopen(FH, ...)
への参照を渡すだけです。
f(\*STDOUT);
多くの場所でもグロブ自体を受け入れますが。
f(*STDOUT);
はい、以下を使用して実行できます。以下は同じサンプルコードです。
#!/usr/bin/perl
use strict;
use warnings;
open (MYFILE, 'temp');
printit(\*MYFILE);
sub printit {
my $fh = shift;
while (<$fh>) {
print;
}
}
以下はテストです:
> cat temp
1
2
3
4
5
perl スクリプトのサンプル
> cat temp.pl
#!/usr/bin/perl
use strict;
use warnings;
open (MYFILE, 'temp');
printit(\*MYFILE);
sub printit {
my $fh = shift;
while (<$fh>) {
print;
}
}
実行
> temp.pl
1
2
3
4
5
>
はい、次のように:
some_func($fh, "hello");
wheresome_func
は次のように定義されます。
sub some_func {
my ($fh, $str) = @_;
print { $fh } "The message is: $str\n";
}