我只是发现perl忽略了sigil和它的变量名之间的空间,并且想知道有人可以告诉我这是否是预期的行为.我从来没有遇到过这种情况,可能会导致字符串中的奇怪行为.
例如,在下面的代码中,$bar将以值’foo’结尾:
my $foo = 'foo'; my $bar = "$ foo";
这也适用于变量声明:
my $ bar = "foo\n"; print $bar;
第二种情况对我来说并不重要,但是在字符串插值的情况下,这可能会导致非常混乱的行为.任何人都知道这一点吗?
解决方法
是的,这是语言的一部分.不,你不应该把它用于严重的代码.至于在插值中混乱,所有美元符号(不是变量的一部分)应该被转义,而不仅仅是字母旁边的符号,所以不应该是一个问题.
我不知道这是否是让sigil和变量名之间的空格背后的真正原因,但它可以让你做一些事情
my $ count = 0; my $file_handle_foo = IO::File->new;
这可能被一些人看得很方便(因为它使得sigils和变量名称的独特部分彼此相邻).它也适用于Obfu(参见第9行和第10行的开头):
#!/usr/bin/perl -w # camel code use strict; $_='ev al("seek\040D ATA,0;");foreach(1..3) {<DATA>;}my @camel1hump;my$camel; my$Camel ;while( <DATA>){$_=sprintf("%-6 9s",$_);my@dromedary 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;");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