我被这个不一致的调试器行为所困扰。在quotemeta()
perl -d
函数的行为似乎有所不同
$ perl -e 'print quotemeta("/a/b/c"),"\n"'
输出为\/a\/b\/c
,这是正确的,并在perldoc -f quotemeta
中记录。
现在,在调试器下,输出变为\\/a\\/b\\/c
。我认为我正在使用的一些核心模块正在重新定义函数,尽管经过测试,似乎行为只发生在调试器下。调用CORE::quotemeta()
会返回相同的输出。
有人可以启发我吗?
谢谢!
答案 0 :(得分:8)
quotemeta
是一个霰弹枪,无论是否需要,都可以逃避所有非单词字符。调试器不那么笨重;仅引用需要它的那些字符。 (反斜杠,正斜杠不会。)更重要的是,它只在检查值时执行此操作,而不是在打印时执行此操作。比较:
DB<1> x quotemeta('a/b/c')
0 'a\\/b\\/c'
DB<2> p quotemeta('a/b/c')
a\/b\/c
答案 1 :(得分:3)
我找不到这方面的参考,但是当被要求输出任何字符串时,perl调试器会重新引用它,因此它可以粘贴到脚本中,这是一个安全的字面值。你的价值是正确的;它是添加反斜杠的调试器。 <{1}}中有一个quote
选项,您可能会尝试弄乱它。