MACRO (NOT-COMPILED): for ($var1=$cons2;$var3<$cons4;$var5++) {$body6} -e syntax OK MACRO (COMPILED & DEPARSED): while ($var3 < $cons4) { $body6; } continue { ++$var5 } SOURCE (NOT-COMPILED): #use Recur_unroll; my $x; for($x=0;$x<8;$x++) { my $f=fact($x); print "factorial($x)=$f\n"; } sub fact { return(1) if ($_[0] <= 0); return $_[0]*fact($_[0]-1); } 1; -e syntax OK SOURCE (COMPILED & DEPARSED): my $x; while ($x < 8) { my $f = fact($x); print "factorial($x)=$f\n"; } continue { ++$x } sub fact { $_[0] <= 0 and return 1; return $_[0] * fact($_[0] - 1); } '???'; REORDER: $var3 = $1;$cons4 = $2;$body6 = $3;$var5 = $4; REG-EXED MACRO: while \((\$[a-zA-Z][a-zA-Z0-9]*) < (\d+)\) \{ ([^}]+); \} continue \{ \+\+(\$[a-zA-Z][a-zA-Z0-9]*) \} FINAL SOURCE: my $x; while ($x < 8) { my $f = fact($x); print "factorial($x)=$f\n"; } continue { ++$x } sub fact { $_[0] <= 0 and return 1; return $_[0] * fact($_[0] - 1); } '???'; MACRO (NOT-COMPILED): for ($var1=$cons2;$var3<$cons4;$var5++) {$body6} -e syntax OK MACRO (COMPILED & DEPARSED): while ($var3 < $cons4) { $body6; } continue { ++$var5 } SOURCE (NOT-COMPILED): SOURCE (COMPILED & DEPARSED): REORDER: $var3 = $1;$cons4 = $2;$body6 = $3;$var5 = $4; REG-EXED MACRO: while \((\$[a-zA-Z][a-zA-Z0-9]*) < (\d+)\) \{ ([^}]+); \} continue \{ \+\+(\$[a-zA-Z][a-zA-Z0-9]*) \} FINAL SOURCE: factorial()=1 factorial(1)=1 factorial(2)=2 factorial(3)=6 factorial(4)=24 factorial(5)=120 factorial(6)=720 factorial(7)=5040