sub name { my $self = shift; if (@_) { $self->{name} = shift; return $self; } return $self->{name}; } #### $person->name; # get the name $person->name("Ovid"); # set the name #### $person->name(qw/Publius Ovidius Naso/); # or $person->name([qw/Publius Ovidius Naso/]); # or my $name = Name->new("Publius Ovidius Naso"); $person->name($name); #### sub name { my $self = shift; if (1 == @_ && ! ref $_[0]) { $self->{name} = shift; return $self; } elsif (! @_) { return $self->{name}; } else { croak "Unknown arguments to name()"; } } #### sub name($self) { return $self->{name}; } sub name($self, $name) { $self->{name} = $name; return $self; } #### use Sub::Signatures; sub foo($bar) { print $bar; } sub foo($bar, $baz) { print "$baz, $bar"; } foo(1); # prints 1 foo(1,2); # prints 1, 2 foo(1,2,3); # fatal error