Так что я надеюсь, что кто-то может просто объяснить мне, почему, когда я запускаю следующий код, он печатает «.link/output» как в начале, так и в конце строки. Я пытался заставить его печатать только в конце строки. Есть предположения?Почему эта печать дважды в perl?
#!/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
Но isntead я получаю:
.link/outputcat.link/output
.link/outputdog.link/output
Не могли бы вы объяснить, почему происходит и/или как его исправить? Спасибо.
Пустой элемент в вашем списке, я думаю. Он объединяет «.link/output» в пустую строку. – PinkElephantsOnParade
Можете ли вы подтвердить, что ваши циклы 'while' и' foreach' выполняют ожидаемое количество раз? –
Почему вы назначаете скаляр массиву, а затем пытаетесь выполнить цикл над массивом? Он может только когда-либо содержать ОДНО значение, поэтому никакой цикл в буквальном смысле не нужен. И в цикле вы даже не используете переменную цикла '$ i', вы все равно используете' $ _'. '@logf = $ _; для $ i (@logf) {print $ _. ...} 'Все это полностью избыточно. Вы могли бы просто написать 'print '$ _. Link/output \ n" while ' –
TLP