\@. is a reference to some undefined array named @.\@.=~/(?<=\w{3})(\w)(.(.))(7325,20)*/; @_=$1..$3.$3.$3;; @_=(' ',@_,0); 1055||13733*{0}.18^0.10964||12.0&&5437; open _, $0 ; do{ 7584, print$_[$1] while /(?<!\$)(\d+)[^\}]/g } while <_>
Now $1..$3.$3.$3 ,as with the ".." operator, will create a list of
all the letters from A to ((( . This will generate a list from A to ZZZ .
Interesting behavior, since 1- it ignores non letters and 2- it understands
that it will iterate up to three letters words.
This list ends up in @_ with a space in front and a zero at the end.
Now for some calculous :
returns 1055 , since it a first true in a short circuit. It does nothing else so it's just a line that sits here.1055||13733*{0}.18^0.10964||12.0&&5437
open _,$0; opens the file itself ($0) into the _ filehandle.
While reading that filehandle we have each line in $_ ; on this we apply /(?<!\$)(\d+)[^\}]/g
(?<!\$)(\d+) will match a number but not (negative look behind) if it is
preceded by a $ . This wont match things like $1 , $2 ...
That number will be recorded in $1 but only if it is not followed by a } or by a \
( negated character class, the \ changes nothing ) .
The match is global and the while loop will run it over each line of the file.
Given the matching rules and the numbers present in the file, $1 will take these values :
Each of these will be used to print$_[$1] .
And this is where it happens : that $_ is not coming from any of these while : it's a subscript from our previous @_ .
@foo= 'A'..'ZZZ' ; @foo = (' ',@foo,0) ; print @foo[7325,20,0,1055,13733,18,0,10964,12,0,5437,7584] ;
phew ... zlr .
In reply to Re: slow generation
by ZlR
in thread slow generation
by sh1tn
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |