Perl дописывает префиксный массив - PullRequest
1 голос
/ 04 ноября 2011

Я работаю над добавлением расширения файла при зацикливании массива. Например, ожидаемый результат - ABC001.csv, но он больше похож на .csv01.

Любая помощь о том, как это сделать, очень ценится. Я могу предоставить больше кода при необходимости.

foreach my $name (@source){
print "${name}.csv\n";
} 

Ответы [ 2 ]

6 голосов
/ 04 ноября 2011

Я уверен, что у вас есть возврат каретки в конце имени вашего файла. То есть $name устанавливается на «ABC001 \ r». Когда вы печатаете «$ name.csv \ n», вы получаете:

ABC001<-
.csv

на вашем экране выглядит как .csv01.

Быстрое исправление - удалить возврат каретки следующим образом:

for my $name (@source) {
  $name =~ s/\r//g;
  print "$name.csv\n";
}

но лучшим решением было бы удалить возврат каретки в тот момент, когда данные поступают в ваше приложение.

1 голос
/ 04 ноября 2011

user5402 ответ правильный. Я просто хотел поделиться некоторыми возможностями Perl:

s/\s*$/.csv/, say for @source;

Или разделить, чтобы избежать возможных конфликтов:

s/\s*$/.csv/ for @source;
say for @source;

say активируется с помощью use v5.10 или use feature qw(say) и представляет собой просто print с добавлением новой строки в конце.

Подстановка заменит любые пробелы, включая возврат каретки, в конце ваших строк на «.csv». Если пробелов нет, он просто добавит «.csv», поскольку квантификатор * допускает нулевые совпадения, а якорь $ соответствует концу строки.

Один магический момент заключается в том, что $_ в псевдониме цикла связывается со всеми элементами @source и, следовательно, постоянно изменяется подстановкой.

...