如果在perl中没有提供文件名,如何使用__DATA__句柄

时间:2013-05-06 07:58:19

标签: perl

如果没有为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

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:1)

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

my $fd = \*DATA;
if (@ARGV) {
  if (open $_, '<', $ARGV[0]) {
    $fd = $_;
  }
  else {
    warn qq{Unable to open "$ARGV[0]" for reading: $!};
  }
}