I'd be nice to have the "import" feature similar to Python, but I don't think Perl "import" does the same thing.  I wonder if we could tweak it somehow.  It's kind of messy having to define "package" for every dummy object.

Thanks for the suggestion.

Nicholas Clark wrote:
On Wed, Aug 20, 2003 at 02:09:49AM -0700, Bustamam Harun wrote:
  
Is there anyway I could override how Perl resolve symbols, like for 
instance:

use mypackage;

$obj = new AnyObj();

where AnyObj type is not defined, but in XS I want to check the type 
database (UNO) and see if the type exists and create the new object type 
dynamically.  Right now it will give compile error.
    

Richard Clamp and I did some research. This looks like a job for
UNIVERSAL::AUTOLOAD. However, the obvious approach failed:

$ perl -e 'sub UNIVERSAL::AUTOLOAD {warn $UNIVERSAL::AUTOLOAD}; $obj = AnyObj->new();'

gives

Can't locate object method "new" via package "AnyObj" (perhaps you forgot to load "AnyObj"?) at -e line 1.

(rather than the warning). However Richard found that if you create
a dummy package first it does work:

$ perl -e 'package AnyObj; package main; sub UNIVERSAL::AUTOLOAD {warn $UNIVERSAL::AUTOLOAD}; $obj = AnyObj->new();'
AnyObj::new at -e line 1.

So if you can query UNO at BEGIN time and add dummy packages for everything
you need, then this looks like a solution.

Otherwise, not sure.

It could be argued that the need for a dummy package is a bug in perl.
I don't know - UNIVERSAL::AUTOLOAD is not my strong point.

Nicholas Clark
  

Reply via email to