如何阅读一个文本文件在Perl

任务。 有一个文本文件。 你需要载入其内容成一个标变量在Perl程序。

这样一个问题似乎相当频繁。 例如,这样一个问题可能发生的阅读配置文件或小型数据文件。 如果你需要处理大文件,最好是不使用这种方法,和使用流阅读一个文件。

解决方案。 使用图书馆的路径::微小的

最简单和最便捷的解决办法是使用Perl库路径::微小的

#!/usr/bin/perl

use strict;
use warnings FATAL => 'all';
use utf8;
use open qw(:std :utf8);

use Path::Tiny;

my $file_name = 'a.txt';

my $content = path($file_name)->slurp_utf8();

print $content;

这里 path('a.txt') 创建一个类的对象路径:小型和 ->slurp_utf8() 调用的方法 slurp_utf8 这一目的。 结果在一个变量 $content POPs的所有内容的文件。

这是一个很好的解决方案,但有一个细微之处。 图书馆的路径::小未Perl,应该把分开。 通常这会导致任何问题,但在某些情况下,这种解决方案是不合适的。

解决方案。 阅读该文件的标准工具Perl

这个解决方案不是以方便使用的图书馆的路径::微小的,我写的,但它并不需要安装额外的图书馆。

#!/usr/bin/perl

use strict;
use warnings FATAL => 'all';
use utf8;
use open qw(:std :utf8);

my $file_name = 'a.txt';

my $content = '';

open FILE, '<', $file_name or die $!;

while (<FILE>) {
    $content .= $_;
}

print $content;

使用 open ,我们创建了一个文件处理程序 FILE. 当工作与 open 重要的是要使用三种参数,这是非常重要的写 or die,不 || die. 然后帮助 while (<FILE>) 我们周围跑的 该文件逐行,并收集所有内容转变 $content.

最初,我们分配可变 $content个 空行 ''. 这是必要的,以便使代码的工作在正常情况下的空白文件(如果没有分配一个空串的情况下,在空白文件中的一个变量 $contentundef).

一个非常危险的决定。 使用 cat

这里是另一种方法可如何读取文件的内容进入一个变量。 这种解决方案不需要任何额外的图书馆,并不需要书面许多行代码,但是,这是一个尖峰的解决方案。 这是最好的永远不会写。 只有这样,才能做到这项目时没有 Path::Tany,正在积极工作,并检查其他部分的计划需要一些代码快速读该文件。 但在这种情况下,需要接着发表评论 # TODO 和第一次有机会删除这个代码。

#!/usr/bin/perl

use strict;
use warnings FATAL => 'all';
use utf8;
use open qw(:std :utf8);

my $file_name = 'a.txt';

my $content = `cat $file_name`;

print $content;

为什么这是一个糟糕的决定。 第一,没有错误的处理。 如果文件不是,那么STDERR将收到一个警告 cat: asdf: No such file or directory,但该计划将进一步行动。 其次,它不会工作如果在文件名称中有的空间。 第三,如果变量的内容 $file_name ,我们得到外面有一个机会,将有什么样的 a.txt; rm -rf / 和外来阅读该文件将还会执行不安全的行为。

其他文章