Переименование Perl - как добавить счетчик? - PullRequest
1 голос
/ 24 ноября 2011

Есть хорошая утилита переименования , которая поставляется с установкой Perl.Как добавить счетчик в регулярное выражение Perl?Это актуальный вопрос, например, для проблемы нумерации файлов в текущем каталоге:

rename 's/^/<here I'd like to have a number of a file being processed>/g' * 

Например, как можно переименовать:

fileA
fileB
fileC

на

1 - fileA
2 - fileB
3 - fileC

Редактировать :

Я добавил функцию счетчика (переменная $c) - см. здесь .Он работает нормально - но когда я пытаюсь указать формат счетчика:

rename_c.pl -c 5.2f 's/^/$c - /' * 

, он говорит:

 Useless use of concatenation (.) or string in void context at line 120. 

и в действительности он не использует формат, который я сказал ему использовать.Это должна быть простая синтаксическая ошибка в строке с номером 120. Не могли бы вы взглянуть?

Ответы [ 2 ]

4 голосов
/ 27 ноября 2011

Базовая утилита переименования может справиться с этой ситуацией просто отлично:

$ rename '$_ = sprintf "%d - %s", ++$count, $_' files...
3 голосов
/ 27 ноября 2011

Соответствующая строка кода:

$c = sprintf(eval("%" . "$form", $cNumber));

Вы не хотите eval там; Вы можете просто создать формат в виде строки:

$c = sprintf("%$form", $cNumber));

Строка (первый аргумент) заканчивается запрошенным форматом, и sprintf() форматирует $cNumber, используя это.

...