在下面的代码中,当我将每一行推入一个数组(@num)时,我发现在传入数组时,在行的末尾添加了一个空格。
输入文件中的行尾没有空格。当我打印数组中的所有元素时,我发现了这个空格。
open (A, "file.txt");
my @num = ();
while(my $each=<A>)
{
chomp $each;
$each=~s/\s//g;
push(@num,$each);
}
close(A);
有人可以帮我吗?
答案 0 :(得分: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";
答案 1 :(得分:1)
好的,让我们诊断一下。
首先安装Data::Printer
。这个模块就像Data :: Dumper,但对人类来说意味着。
然后在你的所有代码添加这些行之后。
use DDP;
p $,;
p $";
p @num;
在我的电脑上
undef
" "
[
[0] "a",
[1] "b",
[2] "c"
]
我将@num = (qw/a b c/);
用于我的@num
btw。
无论如何,这个模块可以很好地引用字符串,以便您可以看到尾随空格。 $,
是放在非引用列表中的元素之间的字符串。 $"
是放在引用列表中的元素之间的字符串。
告诉我们这些测试的结果,希望这有助于追踪事情。
答案 2 :(得分: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';