Почему моя Perl-программа не читает из входного файла? - PullRequest
1 голос
/ 18 февраля 2011

Я пытаюсь прочитать в этом файле:

Oranges
Apples
Bananas
Mangos

используя это:

open (FL, "fruits");
@fruits

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

print @fruits;

Но я не получаю вывод. Что мне здесь не хватает? Я пытаюсь сохранить все строки в файле в массиве и распечатать все содержимое в одну строку. Почему chomp не удаляет символы новой строки из файла, как это должно быть?

Ответы [ 6 ]

5 голосов
/ 18 февраля 2011

вы должны всегда использовать:

use strict;
use warnings;

в начале ваших сценариев.

и использовать 3 открытых аргумента, лексические дескрипторы и тестовое открытие на неудачу,поэтому ваш сценарий становится:

#!/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;
3 голосов
/ 18 февраля 2011

Я предполагаю, что в вашем файле фруктов есть переводы строки в стиле DOS (т. Е. \ R \ n).Команда chomp обычно работает только в стиле Unix (т. Е. \ N.)

3 голосов
/ 18 февраля 2011

Вы не открываете файл. FL - это дескриптор файла, который никогда не открывается, и поэтому вы не можете прочитать его.

Первое, что вам нужно сделать, это поставить use warnings вверху вашей программы, чтобы помочь вам с этими проблемами.

1 голос
/ 18 февраля 2011
#!/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;

это красиво и чисто

0 голосов
/ 18 февраля 2011

1) Вы всегда должны печатать ошибки от ввода-вывода.`open () или die" Не удается открыть файл $ f, $! ";

2) вы, вероятно, запустили программу из другого каталога, из которого файл" fruits "равен

0 голосов
/ 18 февраля 2011

Вы должны проверить открытость на наличие ошибок:

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