我的目标是将在命令行输入的捕获组变量(即$ 1)传递给我的Perl脚本。
为了给你一些背景知识,我创建了一个脚本,它采用目录路径,搜索模式和替换模式。该脚本打开目录,检查每个文件名以查看它是否与模式匹配,如果是,则将文件名更改为替换模式。
这是我想要完成的一个例子。
System.loadLibrary("kdu_jni");
想象一下,该脚本被称为:
my ($directory, $pattern, $replacement) = @ARGV;
opendir DIR, $directory or die $!;
foreach my $old (readdir DIR){
my $new = s/$pattern/$replacement/ if(/$pattern/);
rename "$directory$old" => "$directory$new";
}
close DIR;
我们的想法是将所有文件重命名为文件名中的数字。问题是1美元正在受到损害。如果它使用双引号传递,则在赋值时进行插值并变为空。如果使用单引号传递,则将其视为文字,所有文件将被称为“$ 1”。如何才能将文件重命名为其名称中的数字?
答案 0 :(得分:0)
use String::Substitution qw( gsub_copy );
my $subbed = gsub_copy($string, $pattern, $replacement);