From: "Tom Phoenix" <[EMAIL PROTECTED]>
> On 6/4/07, GMan <[EMAIL PROTECTED]> wrote:
> Things go smoothly for a while, and things seem quiet. Too quiet. Then...
> 
> > sub addfriend {
> >     my ($self,$f) = @_;
> >     #dereference the array from the hash
> >     $fr = $self->{'_friends'};
> >     @friends = @$fr;
> >     push @friends,$f;
> >     $self->{'friends'} = [EMAIL PROTECTED];
> > }
> 
> It looks as if (for lack of 'my') this subroutine is also using the
> same @friends that we saw earlier, the package variable also known as
> @Person::friends. If that doesn't sell you on 'use strict', nothing
> will.
> 
> But 'strict' won't tell you when you write 'friends' instead of
> '_friends' for a hash key, and 'warnings' won't say that your code
> could be written more simply. I think this is it:
> 
>         sub addfriend {
>            my ($self, $newfriend) = @_;
>            # dereference the array from the hash
>            my $friendsref = $self->{'_friends'};
>            push @$friendsref, $newfriend;
>         }

Or even just

         sub addfriend {
            my ($self, $newfriend) = @_;
            # dereference the array from the hash
            push @{$self->{'_friends'}}, $newfriend;
         }

Just like you use () to make sure mathematical operators are applied 
the way you want you use {} to make sure dereferencing is done right.

You might also change the subroutine a little to allow for

  $obj->addfriend( 'Tom', 'Jenda')

like this:

         sub addfriend {
            my ($self, @newfriends) = @_;
            # dereference the array from the hash
            push @{$self->{'_friends'}}, @newfriends;
         }


Jenda
===== [EMAIL PROTECTED] === http://Jenda.Krynicky.cz =====
When it comes to wine, women and song, wizards are allowed 
to get drunk and croon as much as they like.
        -- Terry Pratchett in Sourcery


-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/


Reply via email to