- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
sub pfexec { args "pfexec", @_ unless $1.$2 eq "pfexec";
local ( $_, $lp, @rep ) = @_; $lp ||= 1;
die 'Command string must not contain $$ sequences' if m/\$\$/o;
1 while s/\(([^()]*)\)/'$$'.push(@rep,$1)/eo;
# print $_,"REP:\n","=>",join( "\n=>", @rep),"\n";
unshift @rep, ""; s/\s+/ /g;
LOOP: while ( $lp-- ) {
foreach ( split ";" ){
my @cmd = split " "; $_ = shift @cmd; last unless m/^(\w{2})(\w+)/o;
CMD: foreach (@cmd){
1 while s/\$\$(\d+)/'('.$rep[$1].')'/eo; s/^\(\s*(.*?)\s*\)$/$1/so;
s/^\%(\d+)->(\w+)=// and ${$HASH[$1]} ->{$2} = $_ and next;
/^\%(\d+)->(\w+)/ and $_ = ${$HASH[$1]} ->{$2} and redo CMD;
/^%%(\d+)/ and $_ = $HASH[$1] || ( $HASH[$1] = \{} ) and next;
/^\%(\d+)/ and $_ = ${$HASH[$1]} and next;
/^\#\#(\d+)/ and $_ = $CHAN[$1] || ( $CHAN[$1] = \{} ) and next;
/^\#(\d+)/ and $_ = ${$CHAN[$1]} and next;
}
$_ = $::control{$1} && $::control{$1}{$2};
s/\^(\d+)/$cmd[$1-1]/geo and print "Expanded to: $_\n"
and pfexec( $_ ) if !ref;
args $1.$2, @cmd and eval { $_->(@cmd) } if "CODE" eq ref;
last LOOP if $@;
}
}
guest 14.12.2008 04:43 # +1
Малаца калега, пускай дальше пишет =]
guest 14.12.2008 05:01 # −0.2
а разве так пишут не все PERLовцы? :)
TheHamstertamer 01.06.2011 18:50 # 0
guest 19.12.2008 14:06 # 0
Наворотиил...
guest 23.02.2009 15:54 # +1
Зачетно. Ваш коллега настоящий perl hacker. Непонятно только зачем он берет ссылку от безымянного хеша, а так ничего - понравилось. Пусть, как говорится, пишет еще ^__^
guest 11.08.2009 12:16 # 0
guest8 04.11.2018 03:52 # −999
guest8 26.09.2019 20:39 # −999
guest 28.05.2009 14:03 # +2
блин... спалили)) тоже люблю такие красивости наводить :) :) :) шик :)
guest 11.08.2009 12:17 # −1
guest 05.06.2010 21:53 # 0
Десяти минут стоило разобраться - это - для правильной обработки ВЛОЖЕННЫХ скобок - начиная с самых внутренних. Собственно, для этого и проделывается вся эта лабуда с $$ - определение приоритета скобок при последовательном парсинге/замене.
Код "слишком умный", хакерский, и действительно, для понимания и сопровождения скатывается в говно.