如何在Perl中读取多行文本到一个标量变量

时间:2013-06-03 15:04:34

标签: perl

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

我目前有:

$kml = "Scotland_one_inch_1st.kml";

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

感谢

3 个答案:

答案 0 :(得分:4)

使用File :: Slurp模块。

my $text = read_file( 'filename' ) ;

答案 1 :(得分: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 $!;

答案 2 :(得分:1)

您可以在脚本中使用开关或设置输入记录分隔符($/),以便perl会污染整个文件。为方便使用一个衬垫,您可以使用-0IRS设置为(alomst?)任何内容。

通过与-0一起设置输入记录分隔符,查看perlrun会告诉你有什么蠢事。将-0设置为777-0777)会使perl整个文件完整,因为没有具有该值的合法字符。

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

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

perlvar文档解释了local$/的更改有何益处。