我正在通过以下代码
读取perl中的文件内容my @files = glob("$PATH/*");
foreach my $file (@files){
open(MYFILE,"<$file");
my @fileContent = <MYFILE>;
close(MYFILE);
}
现在,我想在每行前加上自动递增数字。像 -
这样的东西fileContent[0] = 1: This
fileContent[1] = 2: is
fileContent[2] = 3: a
fileContent[3] = 4: text
fileContent[4] = 5: file.
有人知道这样做的有效方法吗?
谢谢!
答案 0 :(得分:10)
一个班轮怎么样?
perl -wne 'print "$.: $_"; close ARGV if eof;' path/*
或者在脚本内部,使用数组:
use strict;
use warnings;
use autodie;
while (<tmp/data*>) {
open my $fh, '<', $_;
my @fileContent;
push @fileContent, "$.: $_" while <$fh>;
}
$.
here.
答案 1 :(得分:0)
在分配行中尝试此操作:
my $i;
my @fileContent = map{++$i.": $_"} (<MYFILE>)
答案 2 :(得分:0)
高效?我不知道实际上有一种效率低下的方式(除非你故意使它低效)。
for my $lineNumber (1..@fileContent) {
substr( $fileContent[$lineNumber-1], 0, 0, "$lineNumber: " );
}
答案 3 :(得分:0)
这是你的代码,编辑使用词法变量,3 arg open,以及一个map语句来添加行号。
my @files = glob("$PATH/*");
foreach my $file (@files){
open my $fh,'<', $file or die $!;
my $i = 1;
my @fileContent = map {$i++.": $_"} <$fh>;
# do something with @fileContent
}
这是一个更有意义的例子(使用更多自动功能):
for (<$PATH/*>) {
local @ARGV = $_;
my $i = 1;
my @lines = map {$i++.": $_"} <>;
# do something with @lines
}
这是一个使用$.
(输入行号)和while循环逐行读取文件的示例。
for (<$PATH/*>) {
local (@ARGV, $_) = $_;
my @lines;
push @lines, "$.: $_" while <>;
# do something with @lines
}
答案 4 :(得分:0)
将您的开放更改为:
open MYFILE, '-|', 'grep', '-n', '', $file