Perl 字符串子

标签 perl

我想用类似 C:\foo 的路径替换一些东西, 所以我:

s/hello/c:\foo

但那是无效的。
我需要转义一些字符吗?

最佳答案

我能看到的两个问题。

您的第一个问题是您的 s///更换未终止:

s/hello/c:\foo   # fatal syntax error:  "Substitution replacement not terminated"
s/hello/c:\foo/  # syntactically okay
s!hello!c:\foo!  # also okay, and more readable with backslashes (IMHO)

您问的第二个问题是 \f被视为换页转义序列(ASCII 0x0C),就像双引号一样,这不是您想要的。

您可以转义反斜杠,或者让变量插值“隐藏”问题:
s!hello!c:\\foo!            # This will do what you want.  Note double backslash.

my $replacement = 'c:\foo'  # N.B.:  Using single quotes here, not double quotes
s!hello!$replacement!;      # This also works

查看 perlop 中对 Quote 和 Quote-like Operators 的处理想要查询更多的信息。

关于Perl 字符串子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3114584/

相关文章:

perl - 如何从一个文件中检索一组两行,引用另一个文件中的第一行?

Perl,等待非子进程退出

linux - 如何处理 perl 中的挂起情况?访问文件后

perl - 通过将 2 个模式之间的行写入新文件,将文件拆分为多个文件

perl - 在 void 上下文中无用地使用负模式绑定(bind) (!~)

perl - 我怎样才能让 Perl 找到我的模块?

windows - 如何在 perl 中从当前工作目录后移一级

perl - 哈希值中的 4/16 是什么?

mysql - 如何支持用户为我的业务逻辑处理定义规则?

如果包含换行符,则 RegEx 匹配,但不应匹配