-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和词法文件句柄

  • 检查每个打开的状态以确保它成功

您显示的代码不会在您的行中添加任何空格。你的程序还有吗?

你的代码最好写成

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

好的,让我们诊断一下。

首先安装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 回答