在Perl数组中包含文件数据

时间:2011-12-14 05:54:22

标签: perl

我试图将所有数据从文件传递到Perl数组,然后我尝试使用foreach循环来处理数组中的每个字符串。问题是foreach而不是打印每一行是打印整个数组。我使用以下脚本。

while (<FILE>) {
  $_ =~ s/(\)|\()//g;
  push @array, $_;
}

foreach $n(@array) {
  print "$n\n";
}

比如说数组中的数据是@array=qw(He goes to the school everyday) 正确地打印数组但是foreach循环而不是打印不同行上的每个元素正在打印整个数组。

2 个答案:

答案 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
.....