我该如何在Perl中替换字符串?

5

我正在尝试进行简单的字符串替换,但没有成功。

#!/usr/bin/perl

$var = "M4S120_appscan";
$var1 = "SCANS";

$path =~ s/$var/$var1/;

print "Path is $path"

输出应该是 "Path is SCANS",但在 'output' 中未打印任何内容。

为什么不直接使用 print "Path is $var1" 呢?这个替换是用来做什么的? - Thilo
那是我创建的一个示例。我需要在“实时脚本”中进行类似的替换。 - Sathish Kumar
我已经有一段时间没有写 Perl 了,但是 $var 不仅仅会被视为正则表达式的一部分,而且还会被视为一个字面字符串。 - Casey
不太确定你想要做什么。是要将“Path is M4S120_appscan”替换为“Path is SCANS”吗? - Deqing
@Deqing 是的,我想通过变量将“M4S120_appscan”替换为“SCANS”。就这些。 - Sathish Kumar
如果你刚开始学习Perl,请在你编写的每个程序顶部使用use strictuse warnings。如果你的教程/书籍没有这个内容,那么它已经过时了。相反,可以查看Perl标签wiki,里面链接了非常好的最新资源。 - simbabque
3个回答

13

要在字符串中将“M4S120_appscan”替换为“SCANS”:

$str = "Path is M4S120_appscan";
$find = "M4S120_appscan";
$replace = "SCANS";
$str =~ s/$find/$replace/;
print $str;

如果这就是你想要的。


4
如果$find$replace包含特殊字符,这个方法还管用吗?为什么不使用$str =~ s/M4S120_appscan/SCANS/(也许加上/g以替换所有匹配项,而不仅仅是第一个匹配项)? - Thilo

1

替换是正则表达式的搜索和替换。请点击这里阅读更多信息:

$var = "M4S120_appscan";
$var =~ s/M.+\_.+can/SCANS/g;  # /g replaces all matches
print "path is $var";

0

替换运算符s///需要三个参数:要进行替换的字符串,在您的示例中是一个$path变量,搜索项($var)和替换项$var1

正如您所看到的,您试图在空字符串内用" M4S120_appscan "替换为" SCANS ",因为$path未初始化。您需要在进行替换之前初始化$path,例如:

$path = "M4S120_appscan";

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接