in reply to Crazyness

By losing $var, you mean that the 3rd, 4th etc call to banner results in $var being empty? If so... are you sure you are passing data in? You may want to put a
sub banner { die "Not enough arguments to banner" unless @_; my $var = shift; }
otherwise, when is it lost? If $var never holds a value (i.e. directly after the $var = shift;) then I would look in the calling code, not the subroutine for the problem. If it gets set and goes away, print it at various spots and find out where it goes away...

                - Ant