我刚刚发现perl忽略了sigil和它的变量名之间的空间,并想知道是否有人可以告诉我这是否是预期的行为.我以前从未遇到过这种情况,它可能导致字符串内部出现奇怪的行为.
例如,在以下代码中,$ bar将以值'foo'结束:
my $foo = 'foo';
my $bar = "$ foo";
Run Code Online (Sandbox Code Playgroud)
这也适用于变量声明:
my $
bar = "foo\n";
print $bar;
Run Code Online (Sandbox Code Playgroud)
第二种情况对我来说并不重要,但在字符串插值的情况下,这可能会导致非常混乱的行为.有人知道这是什么一回事吗?
Cha*_*ens 11
是的,它是语言的一部分.不,你不应该将它用于严肃的代码.至于插值中的混淆,所有美元符号(不是变量的一部分)都应该被转义,而不仅仅是字母旁边的符号,所以它不应该是一个问题.
我不知道这是否是在sigil和变量名之间允许空格的真正原因,但是它允许你做类似的事情
my $ count = 0;
my $file_handle_foo = IO::File->new;
Run Code Online (Sandbox Code Playgroud)
有些人可能会认为它很方便(因为它将变量名的符号和唯一部分放在一起).它对于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",$_);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,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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
326 次 |
| 最近记录: |