1

我正在尝试读取此文件:

Oranges
Apples
Bananas
Mangos

使用这个:

open (FL, "fruits");
@fruits

while(<FL>){
chomp($_);
push(@fruits,$_);
}

print @fruits;

但我没有得到任何输出。我在这里想念什么?我试图将文件中的所有行存储到一个数组中,并在一行上打印出所有内容。为什么不像它应该的那样从文件中删除换行符?

4

6 回答 6

6

你应该总是使用:

use strict;
use warnings;

在脚本的开头。

并使用 3 个 args 打开、词法句柄和测试打开失败,因此您的脚本变为:

#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;

my @fruits;
my $file = 'fruits';
open my $fh, '<', $file or die "unable to open '$file' for reading :$!";

while(my $line = <$fh>){
    chomp($line);
    push @fruits, $line;
}

print Dumper \@fruits;
于 2011-02-18T19:12:37.903 回答
4

我猜你的 fruits 文件中有 DOS 风格的换行符(即 \r\n)。chomp 命令通常只适用于 unix 风格(即 \n。)

于 2011-02-18T19:12:20.227 回答
3

你没有打开任何文件。FL 是一个永远不会打开的文件句柄,因此您无法从中读取。

您需要做的第一件事是放在use warnings程序的顶部以帮助您解决这些问题。

于 2011-02-18T18:51:55.840 回答
1
#!/usr/bin/env perl
use strict;
use warnings;
use IO::File;
use Data::Dumper;

my $fh = IO::File->new('fruits', 'r') or die "$!\n";
my @fruits = grep {s/\n//} $fh->getlines;
print Dumper \@fruits;

很好很干净

于 2011-02-18T20:04:47.040 回答
0

您应该检查打开是否有错误:

open( my $FL, '<', 'fruits' ) or die $!;
while(<$FL>) {
...
于 2011-02-18T19:11:41.497 回答
0

1)您应该始终从 IO 打印错误。`open() or die "无法打开文件 $f, $!";

2)您可能从文件“fruits”所在的不同目录启动程序

于 2011-02-18T19:13:57.313 回答