{ my ($indent, $depth) = ( "\t", 0 ); my $_print = sub { print $indent x $depth, substr( $_[0], 0, $_[1] ); }; my $_call_f1_f2 = sub { my $str = shift; my ($pos, $first) = f1( $str ); return ($pos, 0) if !defined $first; if ( $first eq CONST1 ) { $depth--; return ($pos + 1, 0); } $pos = f2( $str, $first ); return ($newpos + 2, 0) if defined $pos; return ($pos, 1); }; sub pp { return unless @_; my ($str) = @_; my ($pos, $depth_mod) = $_call_f1_f2->( $str ); $_print->( $str, $pos ); $depth += $depth_mod; $str =~ s[^.{$pos1}\s*][]; return $str; } }