2009-04-13 39 views
10

我剛剛發現perl忽略了sigil和它的變量名之間的空格,並想知道如果有人能告訴我這是否是預期的行爲。我從來沒有遇到過這種情況,它可能會導致字符串內部出現奇怪的行爲。是否應該在sigil及其變量名之間忽略空格?

例如,在下面的代碼,$欄將結束與值「富」:

my $foo = 'foo'; 
my $bar = "$      foo"; 

這也適用於變量聲明:

my $ 



bar = "foo\n"; 
print $bar; 

第二種情況沒有按」對我來說真的很重要,但是在字符串插值的情況下,這可能會導致非常混亂的行爲。有人知道這是什麼一回事嗎?

回答

9

是的,它是語言的一部分。不,你不應該把它用於嚴肅的代碼。至於內插困惑,所有的美元符號(不是變量的一部分)應該被轉義,而不僅僅是字母旁邊的符號,所以它不應該是一個問題。

我不知道這是否是背後讓空白的印記和變量名之間的真正原因,但它可以讓你做的事情一樣

my $   count = 0; 
my $file_handle_foo = IO::File->new; 

這可能是由某些人一樣方便可以看出(因爲它將變量名稱和變量名稱的唯一部分彼此相鄰)。這也是Obfu有用的(見9號線和10號線的開始的結束):

#!/usr/bin/perl -w          # camel code 
use strict; 

              $_='ev 
             al("seek\040D 
      ATA,0,     0;");foreach(1..3) 
     {<DATA>;}my    @camel1hump;my$camel; 
    my$Camel ;while(   <DATA>){$_=sprintf("%-6 
9s",$_);[email protected]   1=split(//);if(defined($ 
_=<DATA>)){@camel1hum  p=split(//);}while(@dromeda 
ry1){my$camel1hump=0  ;my$CAMEL=3;if(defined($_=shif 
     t(@dromedary1 ))&&/\S/){$camel1hump+=1<<$CAMEL;} 
     $CAMEL--;if(d efined($_=shift(@dromedary1))&&/\S/){ 
     $camel1hump+=1 <<$CAMEL;}$CAMEL--;if(defined($_=shift(
    @camel1hump))&&/\S/){$camel1hump+=1<<$CAMEL;}$CAMEL--;if(
    defined($_=shift(@camel1hump))&&/\S/){$camel1hump+=1<<$CAME 
    L;;}$camel.=(split(//,"\040..m`{/J\047\134}L^7FX"))[$camel1h 
     ump];}$camel.="\n";}@camel1hump=split(/\n/,$camel);foreach(@ 
     camel1hump){chomp;$Camel=$_;y/LJF7\173\175`\047/\061\062\063\ 
     064\065\066\067\070/;y/12345678/JL7F\175\173\047`/;$_=reverse; 
     print"$_\040$Camel\n";}foreach(@camel1hump){chomp;$Camel=$_;y 
     /LJF7\173\175`\047/12345678/;y/12345678/JL7F\175\173\0 47`/; 
     $_=reverse;print"\040$_$Camel\n";}';;s/\s*//g;;eval; eval 
      ("seek\040DATA,0,0;");undef$/;$_=<DATA>;s/\s*//g;( );;s 
      ;^.*_;;;map{eval"print\"$_\"";}/.{4}/g; __DATA__ \124 
       \1 50\145\040\165\163\145\040\157\1 46\040\1 41\0 
        40\143\141 \155\145\1 54\040\1 51\155\ 141 
        \147\145\0 40\151\156 \040\141 \163\16 3\ 
        157\143\ 151\141\16 4\151\1  57\156 
        \040\167 \151\164\1 50\040\  120\1 
        45\162\ 154\040\15 1\163\  040\14 
        1\040\1 64\162\1  41\144  \145\ 
        155\14 1\162\  153\04  0\157 
         \146\  040\11  7\047\   122\1 
         45\15  1\154\1 54\171   \040 
         \046\   012\101\16   3\16 
         3\15   7\143\15    1\14 
         1\16   4\145\163   \054 
        \040   \111\156\14   3\056 
        \040\   125\163\145\14   4\040\ 
        167\1  51\164\1 50\0   40\160\ 
        145\162        \155\151 
       \163\163        \151\1 
       57\156\056 
+0

謝謝查斯,你是否有這種行爲背後的原因的任何想法? – 2009-04-14 00:44:30