1

在开始之前,我想告诉你我不是 Perl 专家。由于分配给我的一些特定任务,我才刚刚开始。

此任务的要求是提取文件的扩展名 ( .dat) 并将其替换为.trg. 问题是我们正在压缩.dat要制作的文件$filename.dat.gz,当我们提取扩展名并替换它时,我们得到了$filename.dat.trg理想的结果$filename.trg

至于代码(请注意,这似乎是一个非常古老的“遗留”代码,我不想过多地修改它,因为它曾经/正在由另一个人维​​护),这就是它被放下的方式

#prepare the trigger file
#get the extension  
my @contains_extension = split (/\./ , $filename);
my $ext = $contains_extension[-1];

#replace with  a ".trg" extension
my $remote_trgfile = $filename;
$remote_trgfile =~ s/$ext$/trg/;
my $trgfile = $out;
$trgfile =~ s/$ext$/trg/;

记住$filename在上面的代码中是带.dat.gzie后缀的,文件名是$filename.dat.gz

如果有人可以帮助我用一种更简单的方法来提取扩展名(.dat.gz)并将其替换为,我将不胜感激.trg

4

2 回答 2

4

因此,您想更改文件名的“扩展名”,包括可选的.gz? 尝试:

$filename =~ s{\.[^.]*(?:\.gz)?$}{.trg}
于 2012-08-01T16:57:52.773 回答
0

尝试

$filename =~ s/\..*$/.trg/;

无需做所有花哨的拆分东西来尝试捕获扩展:)

分解:

. 火柴 。.* 匹配所有内容(换行符除外) $ 匹配字符串的结尾

那么您只需将其替换为 .trg

所以你基本上只是在第一个“。”之后拿走所有东西。并替换为 .trg

希望有帮助:)

于 2012-08-01T16:24:40.763 回答