Использование File::Copy в Perl для переименования расширения файла

#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";