1

所以我希望有人可以向我解释为什么当我运行以下代码时,它会在行首和行尾打印“.link/output”。我试图让它只在行尾打印。有什么想法吗?

#!/usr/local/bin/perl

use warnings;
use strict;
my $logfiles = $ARGV[0]; #file containing the list of all the log file names

my @logf = ();
my $i;

open (F2, "<", $logfiles);

while(<F2>){
    @logf = $_;
    foreach $i(@logf){
        print $_.".link/output";

    }
}
close F2;

例如,如果我正在读取的文件是:

cat
dog

我想看看:

cat.link/output
dog.link/output

但是我得到的是:

.link/outputcat.link/output
.link/outputdog.link/output

有人可以向我解释为什么会发生这种情况和/或如何解决吗?谢谢你。

4

2 回答 2

5

您的列表开头有一个空元素。简单地shift @logf

于 2012-06-21T15:18:45.980 回答
3

我看不出有什么@logf作用。你不能这样做:

#!/usr/bin/env perl

use warnings;
use strict;
my $logfiles = $ARGV[0]; #file containing the list of all the log file names

#open(my $f2, "<", $logfiles);

# FOR TESTING, use above in your code
my $f2 = \*DATA;
# ===========

while(<$f2>){
        chomp;
        print "$_.link/output\n";
}
__DATA__
cat
dog
于 2012-06-21T15:47:05.240 回答