perl in place edit同时替换多个值

时间:2014-11-04 12:21:22

标签: perl

我正在尝试搜索和替换文件。以下代码不起作用。 我究竟做错了什么?请帮忙

  $file = "/tmp/file";
  my $date = qx/date +'%Y%m%d-%H%M%S'/;
  @accounts = qw($account1 $account2 $account3 $account4);    

   @ARGV = ( $file ) ;
    $^I = ".$date" ;
     while (my $line=<>){
       for my $account (@accounts) {
        if ($line =~ /^$account/) {
     ..<search and replace>..
    print $line;
   }else{
      print $line ;
     }
    }
  }

2 个答案:

答案 0 :(得分:3)

qw()引用单词,它不会插入变量。

@accounts = qw($account1 $account2 $account3 $account4);

相当于

@accounts = ('$account1', '$account2', '$account3', '$account4');

请注意单引号!

相反,请使用

@accounts = ($account1, $account2, $account3, $account4);

BTW,您可以使用Time::Piece代替调用shell来调用date

use Time::Piece;
my $lt   = localtime;
my $date = join '-', $lt->ymd(q()), $lt->hms(q());

答案 1 :(得分:0)

还请注意该行

$line =~ /^$account/

可能没有按照您的期望行事。

尝试

$line =~ /^\Q$account\E/

这会在正则表达式中转义任何特殊字符(正则表达式中的特殊字符,例如括号),并且通常使用正则表达式中的变量执行所需的操作。