2010-07-28 24 views
4

我被這個有點不一致的調試器行爲咬住了。該quotemeta()功能似乎當perl -d爲什麼在調試器下,Perl的quotemeta()函數的行爲有所不同?

$ perl -e 'print quotemeta("https://stackoverflow.com/a/b/c"),"\n"'

輸出是\/a\/b\/c,這是正確的下調用,並在perldoc -f quotemeta文件,以不同的表現。

現在,在調試器下,輸出變爲\\/a\\/b\\/c。我認爲我正在使用的一些核心模塊是通過重新定義函數來測試的,但似乎只有在調試器下才會出現這種情況。撥打CORE::quotemeta()將返回相同的輸出。

有人可以啓發我嗎?

謝謝!

+0

「輸出成」?你是說印刷實際上輸出不同的東西? – ysth 2010-07-28 16:32:15

+0

「輸出變成」表示'x'命令的輸出,也就是說,與調試器中的'p'命令相反。 – 2010-07-29 04:05:29

回答

8

quotemeta是一款霰彈槍,可以逃脫所有非單詞字符,無論他們是否需要它。調試器不那麼笨手笨腳,只引用那些需要它的字符。 (反斜槓,正斜槓不。)更重要的是,它只在您檢查值時執行此操作,而不是在您打印它們時執行此操作。比較:

DB<1> x quotemeta('a/b/c') 
0 'a\\/b\\/c' 

    DB<2> p quotemeta('a/b/c') 
a\/b\/c 
+0

我一直在使用'x'命令,因爲感謝您指出'p'命令 – 2010-07-29 04:03:01

3

我找不到這個參考,但是perl調試器在被要求輸出任何字符串時會重新引用它,所以它是一個安全的文字值,可以粘貼到腳本中。你的價值是正確的;它是添加反斜槓的調試器。 perldoc perldebug中有quote選項,你可以試試這個。

相關問題