Using $_ as the primary method of passing parameters to a function does not seem like good style to me. A common pattern amongst Perl's built-ins though is to pass a parameter, but use $_ when no parameter is passed. A la:
sub f3 {
my $input = @_ ? shift : $_;
return $input + 1;
}
If you're using a vaguely recent version of Perl, the underscore prototype makes this simpler (and magically works with lexical $_):
sub f4 (_) {
my $input = shift;
return $input + 1;
}
use Moops; class Cow :rw { has name => (default => 'Ermintrude') }; say Cow->new->name