4

ファイルハンドルを引数としてPERLのサブルーチンに送ることは可能ですか?

はいの場合、それを受け取ってサブルーチンで使用する方法を示すサンプル コード スニペットを提供していただけますか?

4

3 に答える 3

12

必要に応じてレキシカル変数 ( open(my $fh, ...)) を使用していますよね? その場合、特別なことをする必要はありません。

sub f { my ($fh) = @_; print $fh "Hello, World!\n"; }
f($fh);

グロブ ( ) を使用している場合は、グロブopen(FH, ...)への参照を渡すだけです。

f(\*STDOUT);

多くの場所でもグロブ自体を受け入れますが。

f(*STDOUT);
于 2012-12-04T12:06:45.460 に答える
5

はい、以下を使用して実行できます。以下は同じサンプルコードです。

#!/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
> 
于 2012-12-04T12:15:38.533 に答える
4

はい、次のように:

some_func($fh, "hello");

wheresome_funcは次のように定義されます。

sub some_func {
    my ($fh, $str) = @_;
    print { $fh } "The message is: $str\n";
}
于 2012-12-04T11:53:43.360 に答える