簡體   English   中英

為什么在調試器下Perl的quotemeta()函數表現不同?

[英]Why does Perl's quotemeta() function behave differently when under the debugger?

我被這個不一致的調試器行為所困擾。 perl -d下調用時, quotemeta()函數的行為似乎有所不同

$ perl -e 'print quotemeta("/a/b/c"),"\\n"'

輸出為\\/a\\/b\\/c ,這是正確的,如perldoc -f quotemeta

現在,在調試器下,輸出變為\\\\/a\\\\/b\\\\/c 我認為我正在使用的一些核心模塊是重新定義函數雖然經過測試,似乎行為只發生在調試器下。 調用CORE::quotemeta()返回相同的輸出。

有人可以開導我嗎?

謝謝!

quotemeta是一個霰彈槍,無論是否需要,都可以逃避所有非單詞字符。 調試器不那么笨重; 僅引用需要它的那些字符。 (反斜杠,正斜杠不會。)更重要的是,它只在檢查值時執行此操作,而不是在打印時執行此操作。 相比:

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

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM