Perl如何在文件名扩展名之前追加指定文本
Perl文件名追加指定文本实现方案
推荐使用Perl核心模块File::Basename处理路径拆分,无需额外安装,适配多平台路径格式,比手动写正则更稳定。
前置处理
首先需要清理路径末尾多余的斜杠,避免模块将后缀误判为目录名:
# 移除路径末尾的所有斜杠 $my_file =~ s/\/+$//;
核心拆分逻辑
引入模块后拆分路径的目录、文件名主体、后缀三部分:
use File::Basename; # 第二个参数是匹配文件后缀的正则,会匹配最后一个.之后的所有内容作为后缀 my ($name, $dir, $suffix) = fileparse($my_file, qr/\.[^.]*/);
生成目标文件名格式
- 格式1:保留完整路径,扩展名前追加
_new
my $out_file1 = $dir . $name . '_new' . $suffix; # 输出结果:/this/is/my/directory/blahblah_new.txt open my $out, '>', $out_file1 or die $!;
- 格式2:仅保留文件名,开头追加
new_
my $out_file2 = 'new_' . $name . $suffix; # 输出结果:new_blahblah.txt open my $out, '>', $out_file2 or die $!;
手动正则实现(不推荐,仅作参考)
如果你不想引入模块,也可以用正则直接处理:
# 生成格式1 (my $out_file1 = $my_file) =~ s/(\.[^.\/]+)$/_new$1/; # 生成格式2 $my_file =~ m/([^\/]+)$/; my $out_file2 = 'new_' . $1;
内容的提问来源于stack exchange,提问作者bastardise
相关产品推荐
相关产品推荐

