1

我认为这应该是童话般的直截了当。我正在尝试将 kml 文件的内容设置为标量(称为 $kml)。目前它只存储了第一行 kml。如何让它忽略换行符并读取整个文件?

我目前有:

$kml = "Scotland_one_inch_1st.kml";

open INPUT, "$kml";
$content = <INPUT>;
close INPUT;

谢谢

4

3 回答 3

4

更改记录输入分隔符,$/

{
    local $/ = undef;
    open my $INPUT, $kml or die "Unable to open '$kml': $!";
    $content = <$INPUT>;
    close $INPUT or die $!;
}

或者只使用一个join

open my $INPUT, $kml or die "Unable to open '$kml': $!";
$content = join '', <$INPUT>;
close $INPUT or die $!;
于 2013-06-03T15:17:31.503 回答
4

使用 File::Slurp 模块。

my $text = read_file( 'filename' ) ;
于 2013-06-03T15:07:55.683 回答
1

您可以在脚本中使用开关或设置输入记录分隔符 ( $/),这样 perl 就会读取整个文件。为了方便使用一个衬垫,您可以使用它-0来设置IRS(几乎?)任何东西。

请参阅perlrun,它会告诉您如何通过玩-0设置输入记录分隔符来啜饮。设置-0777( -0777) 将使 perl 对整个文件进行 slurp,因为该值没有合法字符。

如果您想在脚本中 slurp 文件,但又不想IRS为整个脚本设置 ,那么类似以下内容将起作用(来自perlvar):

    open my $fh, "<", "foo" or die $!;
    local $/; # enable localized slurp mode
    my $content = <$fh>;
    close $fh;

perlvar文档解释了为什么local更改为$/.

于 2013-06-03T15:27:04.553 回答