-2

以下のコードでは、各行を配列 (@num) にプッシュすると、配列に渡すときに行末に単一のスペースが追加されていることがわかりました。

入力ファイルの行末にスペースがありません。配列内のすべての要素を出力すると、この単一のスペースが見つかりました。

open (A, "file.txt");
my @num = ();

while(my $each=<A>)
{
    chomp $each;
    $each=~s/\s//g;
    push(@num,$each);
}
close(A);

誰かがこれについて私を助けることができますか?

4

3 に答える 3

5

あなたはいつも身をかがめる

  • use strictプログラムの先頭にとを追加し、最初の使用時にuse warningsすべての変数を宣言しますmy

  • open字句ファイルハンドルの3パラメータ形式を使用します

  • 各オープンのステータスをチェックして、成功したことを確認します

表示するコードは、行にスペースを追加しません。あなたのプログラムにこれ以上ありますか?

あなたのコードは次のように書かれたほうがいいです

use strict;
use warnings;

my @num = do {
  open my $fh, '<', 'file.txt' or die $!;
  <$fh>;
};

s/\s+//g for @num;

アップデート

@darchがコメントしたように、あなたは書いていますか

print "@num\n";

または同様のもの?これにより、配列の各要素のにスペースが配置されるため、次のように記述する必要があります。

print @num, "\n";
于 2012-09-12T21:37:21.837 に答える
1

OK、これを診断しましょう。

最初にインストールしData::Printerます。このモジュールはData::Dumperに似ていますが、人間を対象としています。

次に、すべてのコードの後に​​これらの行を追加します。

use DDP;
p $,;
p $";
p @num;

私のコンピューターではこれは

undef
" "
[
    [0] "a",
    [1] "b",
    [2] "c"
]

私は私のところで使用@num = (qw/a b c/);しました@num

とにかく、このモジュールは、末尾のスペースを確認できるように、文字列を引用するのに適しています。$,引用符で囲まれていないリストの要素の間に配置される文字列です。$"引用符で囲まれたリストの要素の間に配置される文字列です。

これらのテストの結果を教えてください。うまくいけば、それが物事を追跡するのに役立ちます。

于 2012-09-12T23:44:31.547 に答える
0

Data::Dumperを使用して、入力ファイルから追加された配列要素を出力しました。

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

open (A, "file.txt");
my @num;

while(my $each=<A>)
{
    chomp $each;
    $each=~s/\s//g;
    push(@num,$each);
}
close(A);

print Dumper(@num);

私が得た出力は、このように適切です

$VAR1 = 'abcdefghi';
$VAR2 = 'jklmnioqrstuvwxyz';
$VAR3 = '1234554';
于 2012-09-13T05:33:34.887 に答える