我认为这应该是童话般的直截了当。我正在尝试将 kml 文件的内容设置为标量(称为 $kml)。目前它只存储了第一行 kml。如何让它忽略换行符并读取整个文件?
我目前有:
$kml = "Scotland_one_inch_1st.kml";
open INPUT, "$kml";
$content = <INPUT>;
close INPUT;
谢谢
我认为这应该是童话般的直截了当。我正在尝试将 kml 文件的内容设置为标量(称为 $kml)。目前它只存储了第一行 kml。如何让它忽略换行符并读取整个文件?
我目前有:
$kml = "Scotland_one_inch_1st.kml";
open INPUT, "$kml";
$content = <INPUT>;
close INPUT;
谢谢
更改记录输入分隔符,$/
:
{
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 $!;
使用 File::Slurp 模块。
my $text = read_file( 'filename' ) ;
您可以在脚本中使用开关或设置输入记录分隔符 ( $/
),这样 perl 就会读取整个文件。为了方便使用一个衬垫,您可以使用它-0
来设置IRS
(几乎?)任何东西。
请参阅perlrun,它会告诉您如何通过玩-0
设置输入记录分隔符来啜饮。设置-0
为 777
( -0777
) 将使 perl 对整个文件进行 slurp,因为该值没有合法字符。
如果您想在脚本中 slurp 文件,但又不想IRS
为整个脚本设置 ,那么类似以下内容将起作用(来自perlvar):
open my $fh, "<", "foo" or die $!;
local $/; # enable localized slurp mode
my $content = <$fh>;
close $fh;
perlvar文档解释了为什么local
更改为$/
.