【发布时间】:2014-02-10 00:41:31
【问题描述】:
我正在编写一个脚本以在文件中进行字符串替换,我将从配置文件中读取变量、值和文件并进行字符串替换。
这是我进行字符串替换的逻辑。
sub expansion($$$){
my $f = shift(@_) ; # file Name
my $vname = shift(@_) ; # variable name for pattern match
my $value = shift(@_) ; # value to replace
my $n = "$f".".new";
open ( O, "<$f") or print( "Can't open $f file: $!");
open ( N ,">$n" ) or print( "Can't open $n file: $!");
while (<O>)
{
$_ =~ s/$vname/$value/g; #check for pattern
print N "$_" ;
}
close (O);
close (N);
}
在我的逻辑中,我从输入文件 ($f) 中逐行读取模式并写入新文件 ($n)。
当我尝试做同样的事情时,有什么方法可以替换原始文件而不是写入新文件,它只有空文件而没有内容。
【问题讨论】:
-
perl 有一个
exp内置函数;为您的子选择另一个名称。另外,不要使用原型;它们的设计目的不是做其他语言中的原型所做的事情,没有它们你会过得更好。 -
有什么东西阻止你将新文件复制到旧文件名?
-
我更新了函数名称,即使在我的原始脚本中我使用了不同的名称..感谢指出。
-
@TLP :实际上,一旦替换完成,我就会将新的复制到旧的,但是我想对用户做一个差异(用于预览选项),它只适用于一个字符串替换文件以防万一我有多个文件和多个变量要替换我想知道它不会锻炼.. 那么有没有办法做其他替换方法..
-
不太清楚你在说什么。如果只更改原始文件,为什么做差异会更容易?你需要两个文件来做一个差异。