{ my %state; sub recursive { my $arg = shift; ... if( ( $arg = $state{ $arg } ) == ... ) { return recursive( $arg ); else { return 0 } } } #### sub rec_helper { my %state; my $recursive; $recursive = sub { my( $arg ) = shift; ... if( ( $arg = $state{ $arg ) ) == ... ) { return $recursive->( $arg ); } else { return 0; } }; } #### sub recursive { my( $state, $arg ) = @_; ... if( ( $arg = $state->{ $arg } ) == ... ) { return recursive( $state, $arg ); } else { return 0; } } sub rec_helper{ my $arg = shift; my %state; return recursive( \%state, $arg ); }