From cf77a8985594286066a5c8dcff5e1f902128689c Mon Sep 17 00:00:00 2001 From: Pragmatic Software Date: Sat, 15 May 2010 22:13:36 +0000 Subject: [PATCH] Allow capturing in substitution for interactive-editing --- modules/ideone.pl | 90 +++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 84 insertions(+), 6 deletions(-) diff --git a/modules/ideone.pl b/modules/ideone.pl index 12b767fc..dfad6c91 100755 --- a/modules/ideone.pl +++ b/modules/ideone.pl @@ -86,8 +86,8 @@ my %languages = ( # C++ 1 my %preludes = ( - '34' => "#include \n#include \n#include \n", - '11' => "#include \n#include \n#include \n", + '34' => "#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n", + '11' => "#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n", '1' => "#include \n#include \n", ); @@ -180,10 +180,88 @@ while($subcode =~ s/^\s*(and)?\s*undo//) { } my $ret = eval { - return $code =~ s|$regex|$to| if(not length $suffix); - return $code =~ s|$regex|$to|i if($suffix =~ /^i$/); - return $code =~ s|$regex|$to|g if($suffix =~ /^g$/); - return $code =~ s|$regex|$to|gi if($suffix =~ /^ig$/ or $suffix =~ /^gi$/); + my $ret; + my $a; + my $b; + my $c; + my $d; + my $e; + my $f; + my $g; + my $h; + my $i; + my $before; + my $after; + + if(not length $suffix) { + $ret = $code =~ s|$regex|$to|; + $a = $1; + $b = $2; + $c = $3; + $d = $4; + $e = $5; + $f = $6; + $g = $7; + $h = $8; + $i = $9; + $before = $`; + $after = $'; + } elsif($suffix =~ /^i$/) { + $ret = $code =~ s|$regex|$to|i; + $a = $1; + $b = $2; + $c = $3; + $d = $4; + $e = $5; + $f = $6; + $g = $7; + $h = $8; + $i = $9; + $before = $`; + $after = $'; + } elsif($suffix =~ /^g$/) { + $ret = $code =~ s|$regex|$to|g; + $a = $1; + $b = $2; + $c = $3; + $d = $4; + $e = $5; + $f = $6; + $g = $7; + $h = $8; + $i = $9; + $before = $`; + $after = $'; + } elsif($suffix =~ /^ig$/ or $suffix =~ /^gi$/) { + $ret = $code =~ s|$regex|$to|gi; + $a = $1; + $b = $2; + $c = $3; + $d = $4; + $e = $5; + $f = $6; + $g = $7; + $h = $8; + $i = $9; + $before = $`; + $after = $'; + } + + if($ret) { + $code =~ s/\$1/$a/g; + $code =~ s/\$2/$b/g; + $code =~ s/\$3/$c/g; + $code =~ s/\$4/$d/g; + $code =~ s/\$5/$e/g; + $code =~ s/\$6/$f/g; + $code =~ s/\$7/$g/g; + $code =~ s/\$8/$h/g; + $code =~ s/\$9/$i/g; + $code =~ s/\$`/$before/g; + $code =~ s/\$'/$after/g; + } + + return $ret; }; if($@) {