【问题标题】:Send file handle as argument in perl在 perl 中发送文件句柄作为参数
【发布时间】:2012-12-04 11:51:40
【问题描述】:

是否可以将文件句柄作为参数发送到 PERL 中的子例程?

如果是,您能否提供一个示例代码 sn-p 显示如何接收它并在子例程中使用它?

【问题讨论】:

  • 你为什么不试试看会发生什么?

标签: perl filehandle


【解决方案1】:

您正在使用词法变量 (open(my $fh, ...)),对吧?如果是这样,您不必做任何特别的事情。

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

如果您使用的是 glob (open(FH, ...)),只需传递对 glob 的引用即可。

f(\*STDOUT);

虽然很多地方也会接受 glob 本身。

f(*STDOUT);

【讨论】:

    【解决方案2】:

    是的,您可以使用。下面是相同的示例代码。

    #!/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
    > 
    

    【讨论】:

      【解决方案3】:

      是的,像这样:

      some_func($fh, "hello");
      

      some_func 的定义如下:

      sub some_func {
          my ($fh, $str) = @_;
          print { $fh } "The message is: $str\n";
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-13
        • 2012-08-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多