This might be a little more clear if you break down the way arguments
are being passed in and what they actually are. It sounds like
you're aware that the arguments are passed in as a list name @_, it
looks like the arguments are something like this:
@_ = ( #<---- A list
{ _name => 'something' }, # <---- a hash reference (objects are
hashes in perl)
'some set name string' #<---- a string
);
The first version extracts the arguments so that you can refer to
them by names that might have some meaning to someone maintaining
your code latter on. The second version accesses them directly.
sub name{ #version 1
my $self=shift;
shift is going to give you $_[0]
my $set_name=shift;
This sets $set_name to $_[1]
$self->{_name}=$set_name if defined $set_name;
So this is equivalent to
$_[0]->{_name} = $_[1] if defined $_[1]
the '->' is to dereference the hash reference stored in $_[0].
return $self->{_name}
}
Another version for the subroutine name
sub name{ #verstion 2
$_[0]->{_name}=$_[1] if defined }$_[1];
{$_[0]->{_name}
}
I feel a little bit confuse about the verion 2
subroutine name. The way it gets the value of
attribute name looks like this to me:
array element->{_name}
(I know that the $_[0] in the default array @_ is
actually an object $self. )
Hope this helps
PC
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>