使用在Perl脚本中的命令行上输入的捕获组变量

时间:2016-07-19 00:28:36

标签: regex perl

我的目标是将在命令行输入的捕获组变量(即$ 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”。如何才能将文件重命名为其名称中的数字?

1 个答案:

答案 0 :(得分:0)

use String::Substitution qw( gsub_copy );

my $subbed = gsub_copy($string, $pattern, $replacement);