#perl
#perl
Вопрос:
Как я могу использовать File::Copy
для переименования расширения файла?
Пока я могу добавить расширение. Вместо этого мне нужно заменить расширение файла.
Пример: myfilename.txt
для myfilename.dat
Мой код:
use strict;
use warnings;
use File::Copy;
my ($oldfn) = qw (myfilename.txt);
my $newfn = $oldfn . ".dat";
rename($oldfn, $newfn)
or die("Can't rename: $!n");
Результат: myfilename.txt.dat
Ответ №1:
Используйте File::Basename метод fileparse, чтобы найти суффикс, затем выполните поиск / замену.
#!/usr/bin/env perl используйте строгий; используйте предупреждения; используйте функцию qw (скажем); используйте File::Basename qw(анализ файла); мой $oldfilename = "/foo/bar/baz.txt "; my($filename, $directories, $suffix) = fileparse($oldfilename,qr/.[^.]*$/); $filename =~ s/.$suffix$//; мой $newfilename = $filename.".dat"; скажите "Новое имя файла:".$newfilename; скажите "Новый полный путь:".$directories.$newfilename; выход 0;
Вывод:
$ ./basename.pl Новое имя файла:baz.dat Новый полный путь:/foo/bar/baz.dat
Ответ №2:
Достаточно простого регулярного выражения:
$newfn = $oldfn;
$newfn =~ s/.txt$/.dat/i;
О, вы также можете сделать:
use File::Copy qw(move);
...
move($oldfn, $newfn) or die...
В противном случае вы используете встроенную функцию переименования Perl.
Ответ №3:
Небольшое регулярное выражение справилось бы с этой задачей:
($new = $old) =~ s/[^.] $/dat/;
rename $old, $new or die "Can't rename: $!n";