in reply to invocation mode - how discover?

I'm not sure what you want. Perhaps wantarray?

It it returns undef, the sub was called as a subroutine; and
if it returns a defined value, the the sub was called as a function.

(Furthermore,
if it returns a true value, the caller is ready to accept a list; and
if it returns a false value, the caller is not ready to accept a list.)

That said, I think it's generally a bad idea for a Perl sub to use wantarray to determine whether it was called as a subroutine or as a function. Checking the arguments is usually better. For example,

sub getter_setter { my $self = shift; if (@_) { $self->{value} = $_[0]; } return $self->{value}; }