Использование Perl's File :: Copy для переименования расширения файла - PullRequest
2 голосов
/ 19 октября 2011

Как использовать 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

Ответы [ 3 ]

2 голосов
/ 19 октября 2011

Используйте метод fileparse File :: Basename, чтобы найти суффикс, затем выполните поиск / замену.


#!/usr/bin/env perl

use strict;
use warnings;

use feature qw(say);
use File::Basename qw(fileparse);

my $oldfilename = "/foo/bar/baz.txt";

my($filename, $directories, $suffix) = fileparse($oldfilename,qr/\.[^.]*$/);

$filename =~ s/\.$suffix$//;

my $newfilename = $filename.".dat";

say "New filename is:".$newfilename;
say "New fullpath is:".$directories.$newfilename;

exit 0;

Выход:

$ ./basename.pl
New filename is:baz.dat
New fullpath is:/foo/bar/baz.dat
1 голос
/ 19 октября 2011

Небольшое регулярное выражение сделает эту работу:

($new = $old) =~ s/[^.]+$/dat/;
rename $old, $new or die "Can't rename: $!\n";
1 голос
/ 19 октября 2011

Достаточно простого регулярного выражения:

$newfn = $oldfn;
$newfn =~ s/\.txt$/.dat/i;

О, вы также можете сделать:

use File::Copy qw(move);

...

move($oldfn, $newfn) or die...

В противном случае вы используете встроенную функцию Perl переименование .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...