1

このファイルを読み込もうとしています:

Oranges
Apples
Bananas
Mangos

これを使用して:

open (FL, "fruits");
@fruits

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

print @fruits;

しかし、私は何の出力も得ていません。ここで何が欠けていますか?ファイル内のすべての行を配列に格納し、すべての内容を 1 行に出力しようとしています。chomp がファイルから改行を削除しないのはなぜですか?

4

6 に答える 6

6

常に使用する必要があります:

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;
于 2011-02-18T19:12:37.903 に答える
4

フルーツ ファイルに 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 に答える