如何在Perl正则表达式/替换中使用变量?

Pra*_*rni 1 regex variables perl replace

基本上,我试图在文本文件中插入一行,并且生成一个系统命令来执行“ perl -pi.orig -e”

这是我想做的事情:

my $find='# Foo Bar'
my $replace="foo/bar/blah.txt\n# Foo'

my $file = './some_text_file.txt'

system("perl -pi.orig -e 's|$find|$replace|;' $file");
Run Code Online (Sandbox Code Playgroud)

这在不使用变量的情况下有效。

$ file中包含以下文本:

# Foo Bar is a comment
then/a/path/to/a/file.txt
Run Code Online (Sandbox Code Playgroud)

cho*_*oba 5

不要从Perl调用Perl,直接在一个过程中完成工作。

#! /usr/bin/perl
use warnings;
use strict;

my $find    = qr/# Foo/;
my $replace = "foo/bar/blah.txt\n# Foo";
my $file    = './some_text_file.txt';

open my $in, '<', $file or die $!;
open my $out, '>', "$file.new" or die $!;

while (<$in>) {
    s/$find/$replace/;
    print {$out} $_;
}
close $out;
rename "$file.new", $file or die "Can't rename";
Run Code Online (Sandbox Code Playgroud)

或者,如果您需要保留备份,

rename $file, "$file.backup" or warn "Can't create backup";
rename "$file.new", $file or die "Can't rename";
Run Code Online (Sandbox Code Playgroud)