in reply to Creating modules with OO and functional interfaces.

You could say:
my $self; $self = shift if (UNIVERSAL::isa( $_[0], 'My::Object' );
I'd rather see a procedural interface that uses a default singleton object. Under the hood, it's using the OO interface, but the actual object is hidden from users, if that's necessary.