> -----Original Message-----
> From: Todd Wade [mailto:[EMAIL PROTECTED]]
> Sent: Monday, June 17, 2002 6:40 AM
> To: [EMAIL PROTECTED]
> Subject: Re: Is it a difference?
> 
> 
> 
> "Bob Showalter" <[EMAIL PROTECTED]> wrote in message
> 2E4528861499D41199D200A0C9B15BC031BAD4@FRISTX">news:2E4528861499D41199D200A0C9B15BC031BAD4@FRISTX...
> > >
> > > my $q = new CGI;
> > > my $q = CGI -> new();
> > >
> > > Can I use any of these 2 lines with no problem.
> > > I haven't seen explanations for the differences between 
> these lines.
> >
> > These are equivalent. See the discussion under "Method Invocation"
> > in perldoc perlobj.
> 
> Not quite. The former is called "indirect object notation", a 
> subject that
> owns almost the entire page 446 in the cookbook. Near the the 
> beginning of
> the discussion it starts: "It has two grave problems...." and 
> finishes with:
> "... The infix arrow notation using -> dosent suffer from 
> either of these
> disturbing ambiguities, so we recommend you use it exclusively."
> 
> True, for this example it produces the same result, but IMHO, 
> its usually in
> our best interest to follow the recommendations of Mr. 
> Christiansen and Mr.
> Torkington

Yes, you are correct. As a matter of fact, I was just recently
"burned" by one of these ambiguities when I tried to do something
along the lines of the following inside a method:

   package Bar;

   sub new
   {
      my $class = shift;
      bless {}, $class;
   }

   sub run
   {
      my $package = 'Foo';
      my $obj = new $package;   # Create a new Foo? Nope!
      $obj->baz();
   }

That didn't do what I wanted until I changed it to:

   my $obj = $package->new();   # Create a new Foo. Yes!

(the package name is actually derived at run-time; thus the need
to store it in a variable. My module is something similar to 
Apache::Registry)

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to