2011-10-18 76 views
2

如何使用File::Copy重命名文件擴展名?使用Perl的File :: Copy重命名文件擴展名

到目前爲止,我可以添加一個擴展。我需要替換文件擴展名。

例子: myfilename.txtmyfilename.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

回答

2

使用文件::基名的fileparse方法找到後綴,然後做一個查找/替換。

 

#!/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

一個簡單的正則表達式就足夠了:

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

哦,你可能還需要至 做:

use File::Copy qw(move); 

... 

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

否則,你正在使用Perl的內置函數rename

1

小正則表達式將做的工作:

($new = $old) =~ s/[^.]+$/dat/; 
rename $old, $new or die "Can't rename: $!\n";