在我开始之前,我想告诉你我不是Perl专家。我刚刚开始因为分配给我的一些特定任务。
此任务的要求是提取文件的扩展名(.dat
)并将其替换为.trg
。问题是我们正在压缩.dat
文件以生成$filename.dat.gz
,当我们提取扩展并替换它时,我们得到$filename.dat.trg
,而我们希望理想情况下需要$filename.trg
。< / p>
关于代码(请注意,这似乎是一个非常古老的'遗留'代码,我不想修改它太多,因为它是由另一个人维护),这就是它的方式被放下
#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.gz
,即文件名为$filename.dat.gz
如果有人可以通过更简单的方式提取扩展程序(.dat
和.gz
)并将其替换为.trg
答案 0 :(得分:3)
所以你想改变文件名的'扩展名',包括一个可选的.gz
?尝试:
$filename =~ s{\.[^.]*(?:\.gz)?$}{.trg}
答案 1 :(得分:1)
尝试
$filename =~ s/\..*$/.trg/;
不需要做所有那些花哨的拆分来尝试捕获扩展名:)
击穿:
。火柴 。 。*匹配所有内容(换行除外) $匹配字符串的结尾
然后你只需用.trg
替换它所以你基本上只是在第一个“。”之后拿走所有东西。并用.trg替换
希望有所帮助:)