You're right; my description was iffy. What I meant was:
If called in void context, I am expecting a reference to be passed.
If called in scalar context, I am expecting... either, actually, but there must be a reference in void.
sub name {
die 'ref arg required in void context' if ! defined wantarray and !
+ref $_[0];
my ($arg) = @_;
if (ref $arg) {
$$arg = 'x';
return;
}
return 'x';
}