此代码:
my $st = "37a64";
my $grep = '\n';
$st =~ s/a/$grep/;
print $st;
打印:
37\n64
我希望看到以下输出:
37
64
但我只能修改\n
和正则表达式选项,因为我从其他文件导入$st
。
答案 0 :(得分:1)
我不知道有一个现有模块可以做到这一点。
my %tr = (
n => "\n",
r => "\r",
t => "\t",
# ...
);
$grep =~ s{\\(?:(\W)|(.))}{
defined($1) ? $1 :
defined($tr{$2}) ? $tr{$2} :
do { warn("Unrecognized escapes \\$2"); "\\$2" }
}seg;
请避免任何建议将输入传递给eval EXPR
(有时会冒险伪装成s///ee
)。他们肯定是马车和危险的。
答案 1 :(得分:0)
您可以使用/ee
修饰符来评估替换:
$st =~ s/a/qq("$grep")/ee;
要了解其功能,请尝试
#!/usr/bin/perl
use warnings;
use strict;
use feature qw{ say };
my @st = ("37a64") x 3;
my $grep = '\n';
$st[0] =~ s/a/qq("$grep")/;
say $st[0]; # 37qq("\n")64
$st[1] =~ s/a/qq("$grep")/e;
say $st[1]; # 37"\n"64
$st[2] =~ s/a/qq("$grep")/ee;
say $st[2]; # 37
# 64