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)
但是,这当然不起作用.密码字符串中的"$"符号被内插为结束字符,因此没有匹配,因此替换不起作用.
我该如何解决这个问题?
(为什么不首先将密码保留在日志行之外?)
用途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)