我正在尝试搜索和替换文件。以下代码不起作用。 我究竟做错了什么?请帮忙
$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 ;
}
}
}
答案 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/
这会在正则表达式中转义任何特殊字符(正则表达式中的特殊字符,例如括号),并且通常使用正则表达式中的变量执行所需的操作。