Perl查找和替换不使用数组中的值

时间:2014-03-13 21:44:26

标签: perl csv replace

对于这个脚本,我正在提取一个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
.
.
.

1 个答案:

答案 0 :(得分:2)

您使用my $INPLACE_EDIT是您的问题。您想要影响全局变量:

local $INPLACE_EDIT = '.back';

与处理@ARGV

的方式相同
相关问题