4

如果没有为 perl 脚本提供文件名,则寻找使用 DATA 句柄的方法。

我对perl不是很熟练。

就像是:

use strict;
use warnings;
use autodie;
use diagnostics;

my $fd;
if( $ARGV[0] && -f $ARGV[0] ) {
    open $fd, "<", $ARGV[0];
} else {
    $fd = "DATA";   #what here?
}

process($fd);
close($fd); #closing the file - or the DATA handle too?

sub process {
    my $handle = shift;
    while(<$handle>) {
        chomp;
        print $_,"\n";
    }
}

__DATA__
default content
4

2 回答 2

5

$fd=\*DATA; 应该做的伎俩

于 2013-05-06T08:00:35.143 回答
1

如果文件打开失败,您可能更愿意默认使用DATA句柄,而不是让autodie您的程序停止。无论如何,这是一个比-f. 可能是这样的

my $fd = \*DATA;
if (@ARGV) {
  if (open $_, '<', $ARGV[0]) {
    $fd = $_;
  }
  else {
    warn qq{Unable to open "$ARGV[0]" for reading: $!};
  }
}
于 2013-05-06T08:34:38.460 回答