如何将自动递增数字添加到数组?

时间:2011-09-07 15:30:10

标签: arrays perl file

我正在通过以下代码

读取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.

有人知道这样做的有效方法吗?

谢谢!

5 个答案:

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