[英]Why does Perl's “system ('some command')” behave differently from c:\> some command?
[英]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.