Is space supposed to be ignored between a sigil and its variable name?

前端 未结 1 1245
不思量自难忘°
不思量自难忘° 2020-12-19 00:45

I just discovered that perl ignores space between the sigil and its variable name and was wondering if someone could tell me if this was the expected behaviour. I\'ve never

1条回答
  •  轻奢々
    轻奢々 (楼主)
    2020-12-19 01:16

    Yes, it is part of the language. No, you should not use it for serious code. As for being confusing in interpolation, all dollar signs (that are not part of a variable) should be escaped, not just the ones next to letters, so it shouldn't be a problem.

    I do not know if this is the real reason behind allowing whitespace in between the sigil and the variable name, but it allows you to do things like

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

    which might be seen by some people as handy (since it puts the sigils and the unique parts of the variable names next to each other). It is also useful for Obfu (see the end of line 9 and beginning of line 10):

    #!/usr/bin/perl -w                                      # camel code
    use strict;
    
                                               $_='ev
                                           al("seek\040D
               ATA,0,                  0;");foreach(1..3)
           {;}my               @camel1hump;my$camel;
      my$Camel  ;while(             ){$_=sprintf("%-6
    9s",$_);my@dromedary           1=split(//);if(defined($
    _=)){@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$/;$_=;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 讨论(0)
提交回复
热议问题