String 程序中的字符串替换

String 程序中的字符串替换,string,perl,String,Perl,我有一个perl脚本(new.pl),需要运行另一个perl脚本(old.pl)的实例。我遇到的问题是,我希望替换旧的.pl脚本中某个字符串的所有实例,而无需修改它,也无需使用对它所做的更改创建新文件 假设我有这个: my $replacementVar = "replace"; my $originalString = "string to be replaced"; 用替换变量替换原始字符串的所有实例 运行original.pl 这可以在不修改original.pl的情况下完成吗?例如,

我有一个perl脚本(new.pl),需要运行另一个perl脚本(old.pl)的实例。我遇到的问题是,我希望替换旧的.pl脚本中某个字符串的所有实例,而无需修改它,也无需使用对它所做的更改创建新文件

假设我有这个:

my $replacementVar = "replace";

my $originalString = "string to be replaced";
用替换变量替换原始字符串的所有实例

运行original.pl

这可以在不修改original.pl的情况下完成吗?例如,我可以在运行字符串时对其进行临时更改,以便字符串在运行完成后恢复为其默认值吗


我应该注意,我不能进入并更改original.pl的任何代码。一种可能的方法是使用
eval

use strict;
use warnings;
my $replacementVar = "replace";
my $originalString = "string to be replaced";
open my $olds, "<", "old.pl" or die("$!");
my $contents = join("", <$olds>);
close $olds;
$contents =~ s/\Q$originalString/$replacementVar/g;
local @ARGV=('param1', 'param2');
eval "$contents; 1" or die $@;
使用严格;
使用警告;
my$replacementVar=“replace”;
my$originalString=“要替换的字符串”;

打开我的$olds,“一种可能的方法是使用
eval

use strict;
use warnings;
my $replacementVar = "replace";
my $originalString = "string to be replaced";
open my $olds, "<", "old.pl" or die("$!");
my $contents = join("", <$olds>);
close $olds;
$contents =~ s/\Q$originalString/$replacementVar/g;
local @ARGV=('param1', 'param2');
eval "$contents; 1" or die $@;
使用严格;
使用警告;
my$replacementVar=“replace”;
my$originalString=“要替换的字符串”;

打开我的$olds,“这在很大程度上取决于
old.pl
的内容以及它的哪些部分需要更改。你能给我们看看吗?显而易见的解决方案是将更改复制到一个新文件中,然后执行该文件。这种方法有什么问题?我所在的团队只是在寻找一种更优雅的设计。我们有很多文件要处理,我们不希望在每次需要新的替换字符串时都将其弄乱。我们计划将new.pl与许多不同的strings一起使用,让它接受一个参数!这就是问题所在,我们无法更改origing.pl以引入额外参数:/A这在很大程度上取决于
old.pl
的内容以及需要更改的部分。你能给我们看看吗?显而易见的解决方案是将更改复制到一个新文件中,然后执行该文件。这种方法有什么问题?我所在的团队只是在寻找一种更优雅的设计。我们有很多文件要处理,我们不希望在每次需要新的替换字符串时都将其弄乱。我们计划将new.pl与许多不同的strings一起使用,让它接受一个参数!这就是问题所在,我们无法更改original.pl以接受额外的参数:/可能不是问题,但是:
$0
将有所不同<代码>调用方链将不同。可能没有问题,但是:
$0
将不同<代码>调用方
链将不同。