2011-08-01 46 views
1
% perl -Ilib -MDevel::Peek -le '$a="34567"; $a=~s/...//; Dump($a)' 
SV = PV(0x8171048) at 0x8186f48 # replaced "12345" with "34567" 
    REFCNT = 1 
    FLAGS = (POK,OOK,pPOK) 
    OFFSET = 3 
    PV = 0x8181bdb ("34\003" .) "67"\0 
    CUR = 2 
    LEN = 9 

在哪裏2個零點在 23之間的chomped部分 ("12\003" .)從何而來? 傑韋利::皮克問題

爲什麼我會在小塊零件("34\003" .)中得到這種輸出?

回答

2

一個錯誤? 「\ 003」是八進制形式的字符(3)。但是:

$ perl -Ilib -MDevel::Peek -le '$a="12345"; $a=~s/...//; Dump($a)' 
SV = PVIV(0x869b0bc) at 0x86a5060 
    REFCNT = 1 
    FLAGS = (POK,OOK,pPOK) 
    IV = 3 (OFFSET) 
    PV = 0x869fac3 ("123" .) "45"\0 
    CUR = 2 
    LEN = 5 

我不能重複那個;你使用的是什麼版本的Perl?

請注意,()中字符串緩衝區的部分是保留的,但目前未使用。

+0

'這是爲i686-linux'構建的perl 5,版本14,subversion 1(v5.14.1)。 Devel :: Peek version = 1.07 –

1

我在Windows上使用perl 5.12.2得到與sid_com相同的結果。但字符串長度取自結構的CUR字段。我不明白爲什麼這應該是一個錯誤,其餘字符串緩衝區中可能有任何字節。

+0

對我來說,它看起來像是,而不是最後一個字符有八進制的長度。 –

+0

@sid_com - 但長度只有兩個,而不是三個。不過,這可能是抵消。 – bvr

+0

當我砍掉9個字符時,我得到一個'\ t'。 –