Chas Owens wrote:
> On 6/8/07, Robert Hicks <[EMAIL PROTECTED]> wrote:
>> I see some modules that call "new" like:
>>
>> my $test = new Some::Module;
>>
>> and some like:
>>
>> my $test = Some::Module->new;
>>
>> Is there a difference and what is the "recommended" way?
>>
>> Robert
> 
> "new Object" uses indirect invocation*.  Some people feel it improves
> readability; I am not one of those people.
> 
> from perldoc perlobj
>       There is another problem with this syntax: the indirect object is 
> lim‐
>       ited to a name, a scalar variable, or a block, because it would 
> have to
>       do too much lookahead otherwise, just like any other postfix derefer‐
>       ence in the language.  (These are the same quirky rules as are 
> used for
>       the filehandle slot in functions like "print" and "printf".)  This 
> can
>       lead to horribly confusing precedence problems, as in these next two
>       lines:
> 
>           move $obj->{FIELD};                 # probably wrong!
>           move $ary[$i];                      # probably wrong!
> 
>       Those actually parse as the very surprising:
> 
>           $obj->move->{FIELD};                # Well, lookee here
>           $ary->move([$i]);                   # Didn't expect this one, eh?
> 
>       Rather than what you might have expected:
> 
>           $obj->{FIELD}->move();              # You should be so lucky.
>           $ary[$i]->move;                     # Yeah, sure.
> 
>       To get the correct behavior with indirect object syntax, you would 
> have
>       to use a block around the indirect object:
> 
>           move {$obj->{FIELD}};
>           move {$ary[$i]};
> 
>       Even then, you still have the same potential problem if there happens
>       to be a function named "move" in the current package.  The "->" nota‐
>       tion suffers from neither of these disturbing ambiguities, so we 
> recom‐
>       mend you use it exclusively.  However, you may still end up having to
>       read code using the indirect object notation, so it's important to be
>       familiar with it.
I will read "perlobj" then...

Thanks!

Robert

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


Reply via email to