为什么我的Perl程序没有从输入文件中读取?

时间:2011-02-18 18:49:30

标签: perl file-io chomp

我正在尝试阅读此文件:

Oranges
Apples
Bananas
Mangos

使用:

open (FL, "fruits");
@fruits

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

print @fruits;

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

6 个答案:

答案 0 :(得分:5)

你应始终使用:

use strict;
use warnings;

在你的剧本开始时。

并使用3 args open,lexical handle和test opening for failure,因此你的脚本变为:

#!/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;

答案 1 :(得分:3)

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

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

答案 2 :(得分:3)

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

答案 3 :(得分: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;

那很干净

答案 4 :(得分:0)

您应该检查open是否有错误:

open( my $FL, '<', 'fruits' ) or die $!;
while(<$FL>) {
...

答案 5 :(得分:0)

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

2)你可能从文件“fruits”

的不同目录启动了程序