【发布时间】:2017-12-30 17:21:46
【问题描述】:
这里是 perl 初学者。我一直在研究一些简单的单行代码来查找和替换文件中的文本。我读过关于用\Q\E 或quotemeta() 转义所有特殊字符的文章,但发现这只在插入变量时才有效。例如,当我尝试直接替换包含特殊字符的部分时,它会失败。但是当我首先将它存储在标量中时,它可以工作。当然,如果我在反斜杠中转义所有特殊字符,它也可以工作。
$ echo 'One$~^Three' | perl -pe 's/\Q$~^\E/Two/'
One$~^Three
$ echo 'One$~^Three' | perl -pe '$Sub=q($~^); s/\Q$Sub\E/Two/'
OneTwoThree
$ echo 'One$~^Three' | perl -pe 's/\$\~\^/Two/'
OneTwoThree
谁能解释这种行为,并说明是否存在可以直接引用特殊字符而不使用反斜杠的替代方法?
【问题讨论】:
-
没有好的替代品,这就是反斜杠存在的原因。 :P
-
单行比正确的程序文件更难获得正确的程序文件,
use strict,use warnings和适当的变量声明到位。老实说,我没有任何理由编写单行 Perl 程序,除非它是 Linux 文化的一部分,带有一次性的管道 bash 命令链,而且它肯定不是开始学习该语言的好地方。将您的 Perl 放在一个文件中并从 IDE 运行它:它会更易于理解和调试,不太可能让您养成不良的编码习惯,并且代码将保留在磁盘上供您再次打开和运行如有必要
标签: perl