我试图将所有数据从文件传递到Perl数组,然后我尝试使用foreach循环来处理数组中的每个字符串。问题是foreach而不是打印每一行是打印整个数组。我使用以下脚本。
while (<FILE>) {
$_ =~ s/(\)|\()//g;
push @array, $_;
}
foreach $n(@array) {
print "$n\n";
}
比如说数组中的数据是@array=qw(He goes to the school everyday)
正确地打印数组但是foreach循环而不是打印不同行上的每个元素正在打印整个数组。
答案 0 :(得分:0)
阅读完你的评论之后,我猜你的问题是你的源文件不包含任何换行符:I.e。整个文件只有一行。一些文本编辑器只是包装文本而不实际添加任何换行符。
这个问题没有“解决方案”;您必须在所需的位置添加换行符。你可以写一个脚本来做,但我怀疑它会有多大意义。这一切都取决于你想用这个文字做什么。
以下是我的代码段建议。
chomp(@array = <FILE>);
s/[()]//g for @array;
print "$_\n" for @array;
或
@array = <FILE>;
s/[()]//g for @array;
print @array;
请注意,如果您有来自其他文件系统的文件,则可能会在\r
之后的字符串末尾留下chomp
个字符,导致输出看起来已损坏,会覆盖自身。
附加说明:
(\)|\()
最好写成字符类:[()]
。@array = <FILE>
会将整个文件读入数组。没必要
循环。print
分配项目列表
(例如数组)作为参数。你可以有一个后缀循环
顺序打印。$_
,
这是在数组上进行替换的一种方便方法。答案 1 :(得分:0)
由于整个文件只有一行。你可以根据空格分割字符串并在新行中打印数组的每个元素
use strict;
use warnings;
open(FILE,'YOURFILE' ) || die ("could not open");
my $line= <FILE>;
my @array = split ' ',$line;
foreach my $n(@array)
{
print "$n\n";
}
close(FILE);
输入文件
In recent years many risk factors for the development of breast cancer that .....
输出
In
recent
years
many
risk
factors
for
the
development
of
breast
cancer
that
.....