如何从Perl中的插值变量中转义正则表达式元字符?

Ale*_*lex 1 string perl replace

我需要创建一个"模糊"功能,在将其写入日志之前替换明文密码.

它看起来像这样:

function pass_obscure {
      my $logline = shift;
      my $pass = "wer32pass$";   # This password is an example. The real one is received as a parameter, or already stored as a global value.

      $logline =~ s/$pass/*********/g;

      return $logline;
}
Run Code Online (Sandbox Code Playgroud)

但是,这当然不起作用.密码字符串中的"$"符号被内插为结束字符,因此没有匹配,因此替换不起作用.

我该如何解决这个问题?

Mik*_*eyB 7

(为什么不首先将密码保留在日志行之外?)

用途quotemeta:

$pass = "password\$";
$logline = "password is: password\$";

print "$pass\n";
print "$logline\n";
$pass_quoted = quotemeta($pass);

$logline =~ s/$pass_quoted/********/g;

print "$logline\n";
Run Code Online (Sandbox Code Playgroud)

输出:

password$
password is: password$
password is: ********
Run Code Online (Sandbox Code Playgroud)