in reply to Object oriented Perl and Java: A brief examination of design.

As a side note, even when you are not doing OO, you can extend the scope of variables to several functions if you need to. For example, two subs can "close" over the same variable by defining them in a lexical block:
{ my $val; sub set_value { $val = shift; } sub get_val { return $val; } }
Now, $val's scope extends to the two functions. Or you can make a function that manufactures an anonymous closure:
sub create_func { my $val = shift; return { $val ++; return $val; } } my $increment_coderef = create_fund(1); my $value = $increment_coderef->(); #returns 2 my $value = $increment_coderef->(); #returns 3