in reply to Better solution for code reduction?

I saw your update, but I'll add my comment anyway... If you don't want to pass lots of variables to a subroutine, try an anonymous lexical sub that builds a closure over your current variable set, like (untested):
{ my $block2 = sub { # Block 2 code }; if ( $condition1 ) { if ( $condition2 ) { # Block1 } else { &$block2(); } } else { &$block2(); } }