This is an obfuscation of the original multi.pl, by me, under the Code Catacombs. You can see my fondness for typeglobs and scoping here.
#!/usr/bin/perl my ($foo,$bar,@baz,@qux,%fum);%fum=('do','n\? 0$ yrt ,pleh rof -- stne +mugra wef ooT','spam','re', 'eggs' + , 'DATA','DATA', ('mi'?"\n":"\n"),q(q00),(qq (00)?"\\?|h": "\\\\")); die eval (('qq('. scalar(reverse + ($fum{'do'}) )).')' )if((@ARGV<3)&&((@ARGV<1)||($ARGV[0]!~/\?|h/)));$foo + =shift @ARGV ;{my $quuux=$fum{ 'eggs'}; if +($foo =~ /$fum{q00}/) { print eval ('qq('.$_.')') while(<$quuux>)} {local *bar=*foo;die $fum{'DATA' } if ($bar=~/\?|h/);} {local *sep= *bar;{} ;;$bar =shift @ARGV;} {my $tmp;{local *baz =*baz;push @baz,$tmp while (($ +tmp=shift @ARGV)&&$tmp ne $bar);}{local *foo=*tmp;push @qux, + $tmp while(( $tmp= shift @ARGV)&&$foo ne $bar) ;pop @qux; } }} while (@qux) {my @baaz; foreach (1..$foo) { push (@baaz, (shift @qux)) ;}system (@baz, @baaz);} __DATA__ Usage: $0 # / p / a / where # is the number of arguments to take at a time, / is any string, used as a separator, p is the first part, usually the program name, of each command l +ine, and a is the list of arguments for p. For example: $0 1 / unzip / foo bar baz / will execute: unzip foo unzip bar unzip baz Or: $0 2 / someprog -osz / these are some args / will execute: someprog -osz these are someprog -osz some args

Have fun!