对于这个脚本,我正在提取一个csv文件,其中包含需要找到的内容以及替换内容。然后将这些值$pattern1
和$replacement1
插入到查找和放大器中。替换功能。理想情况下,这将采用csv密钥文件&进行原始数据文件的原位替换。
use English;
use strict;
use warnings;
sub inplace_sanitize {
my ( $datafile, $pattern1, $replacement1 ) = @_;
local @ARGV = ( $datafile ),
my $INPLACE_EDIT = '.back';
while ( <> ) {
s/\Q$pattern1/$replacement1/g;
#print;
}
}
sub main
{
# Select Key for Find & Replace
my $filename = 'stmre_fr_key.csv';
open(INPUT, $filename) or die "Cannot open $filename";
# Read the header line.
my $line = <INPUT>;
# Read the lines one by one.
while($line = <INPUT>)
{
chomp($line);
#Split & Assign
my ($replacement1, $pattern1) = split(',', $line);
# Select Data File
my $datafile = 'rawdata.csv';
#Find & Replace Data File
&inplace_sanitize( $datafile, $pattern1, $replacement1 );
}
}
close(INPUT);
main();
所以这不起作用,因为它没有执行替换。如果没有inplace_sanitize
调用,则会打印出$replacement1
&amp; $pattern1
正确。如果您定义inplace_sanitize
和$replacement1 = 'replace';
,则$pattern1 = 'find';
会自行运行。但它在一起它不起作用。有什么想法吗?
样品:
$replacement1 = '7306e005';
$pattern1 = 'leighs_satcon011016001_00753b94';
stmre_fr_key.csv:
find,replace
leighs_satcon011016001_00753b94,7306e005
leighs_satcon011016001_00753b95,7306e006
.
.
.
答案 0 :(得分:2)
您使用my $INPLACE_EDIT
是您的问题。您想要影响全局变量:
local $INPLACE_EDIT = '.back';
与处理@ARGV