On Mon, 23 Jun 2003, David Christensen wrote: > I've built a some classes (eg: ILLString) which live in ./ISO/types > The class "header" is: Package ISO::types::ILLString > > Everything in my test program works fine if (in the top-level directory) I > say: > > use ISO::types::ILLString; > my $s = new ISO::types::ILLString("This is a string"); > > Is there any way I can just say: > > use ISO::types::ILLString; > my $s = new ILLString("This is a string");
I think the short answer is 'no', because the name of the package is the name of the class. So your class is NOT "ILLString", it's "ISO::types:ILLSring". Whether you use the "indirect object" form of method call as you're doing above, or the "object-oriented" form, the class name determines where Perl will find the new() method. Since there isn't a class named literally "ILLString", Perl will complain about the latter call above (as you've no doubt discovered). The "object-oriented" form of method call would look like this: my $s = ISO::types::ILLString->new("This is a string"); To me, this better emphasizes that the class name is ISO::types::ILLString and the method name is new(). In either form, the class name will be seen by the new() method as it's first parameter. Of course, Perl will still complain about this: my $s = ILLString->new("This is a string"); because still "ISO::types::ILLString" and "ILLString" are two completely different class names. Good luck wrapping your head around oop. Before Perl5, I couldn't "get" the whole oop idea. After seeing how Perl implements it, I finally realized what a fundamentally simple thing it is, that an object is just a data structure, and Perl knows where to find its methods because of the class it belongs to. Of course, when you're still in the fog, that might not shine much light either. :-) Regards, Brad