BEGIN { my $merge_code = <<'EOC'; sub %s { my ($data) = @_; while ( $some_condition ) { # big loop, no embedded loops $count = $count1 %s $count2; } } EOC eval sprintf $merge_code, merge => '+'; eval sprintf $merge_code, unmerge => '-'; }