Проблема в том, что имя вашего каталога содержит подчеркивание. Поэтому, когда вы удаляете все подчеркивания из $_
, вы изменяете имя каталога и move()
пытается переместить переименованный файл в переименованный каталог, который (предположительно) не существует.
Одним из решений является использование File :: Basename для разделения $_
на имя каталога и имя файла и только для изменения имени файла.
Другим решением было бы изменить каталог на $dir
перед вызовом glob()
(и затем удалить $dir/
из параметра, который вы передаете glob()
).
Возможно, вы видели, в чем проблема, вы проверили возвращаемое значение move()
и отобразили соответствующее сообщение об ошибке.
move($orig, $_)
or die "Could not move $orig to $_: $!";
Также обратите внимание, что, распечатав $orig
и $_
перед вызовом move()
, вы бы а) вероятно увидели, в чем проблема, и б) поняли, что проблема не имеет ничего общего с заменой строки в Perl (как Вы бы увидели, что замена была проведена успешно). Это, безусловно, базовая практика отладки, которая позволила бы избежать (по крайней мере) публикации вопроса с полностью вводящим в заблуждение названием: -)