打开文本文件并使用Perl将其读入数组的最简单方法

Bri*_*ian 20 perl

为每个脚本添加一个标准的Perl文件打开函数有点烦人:

sub openfile{
    (my $filename) = @_;
    open FILE,"$filename" or die $!;
    my @lines = <FILE>;
    return @lines;
}
Run Code Online (Sandbox Code Playgroud)

我可以创建一个Perl模块来执行此操作,但这很简单,我确信应该已经有一个.

我正试图找到一种方法将文本文件读入数组,我似乎无法找到一个可以完成这个简单任务的Perl模块...也许我看起来太难了它已经附带了标准5.10安装.

最好我相信它看起来像这样:

my @lines = Module::File::Read("c:\some\folder\structure\file.txt");
Run Code Online (Sandbox Code Playgroud)

Cha*_*ens 27

你有几个选择,经典的do方法:

my @array = do {
    open my $fh, "<", $filename
        or die "could not open $filename: $!";
    <$fh>;
};
Run Code Online (Sandbox Code Playgroud)

IO ::所有方法:

use IO::All;

my @array = io($filename)->slurp;
Run Code Online (Sandbox Code Playgroud)

文件:: Slurp的方法:

use File::Slurp;

my @array = read_file($filename);
Run Code Online (Sandbox Code Playgroud)

毕竟TIMTOWTDI可能还有更多.


dfa*_*dfa 15

这是着名的"啜食模式":

  my @lines = <FILEHANDLE> ;
Run Code Online (Sandbox Code Playgroud)

您可能还会看到Perl Slurp Ease


小智 15

我想这就是你要找的东西

文件::啜食


Joe*_*rez 6

您可能还想考虑使用Tie :: File,特别是如果您正在阅读较大的文件而不想将整个文件读入内存.这是一个核心模块.另外,请参阅perlfaq5.


dra*_*tun 6

另请参阅Perl6 :: Slurp,它实现了sllp的Perl6版本,并在"Perl Best Practices"一书中推荐.

一些例子....

my @lines         = slurp 'filename';
my @lines_chomped = slurp 'filename', { chomp => 1 };
my @lines_utf8    = slurp 'filename', { utf8  => 1 };
Run Code Online (Sandbox Code Playgroud)