Beefy Boxes and Bandwidth Generously Provided by pair Networks
Don't ask to ask, just ask
 
PerlMonks  

Re: Re: Re: Re: use Very::Long::Module::Name as Foo;

by liz (Monsignor)
on Oct 14, 2003 at 18:06 UTC ( [id://299206]=note: print w/replies, xml ) Need Help??


in reply to Re: Re: Re: use Very::Long::Module::Name as Foo;
in thread use Very::Long::Module::Name as Foo;

Funny you put your example in the load namespace ;-). Or was that intentional?

I guess we agree to disagree. I find the syntax of

Very::Long::Module->load::as my $short => qw(foo bar baz);
very confusing. And a strange, roundabout way of setting $short.

...without trampling on any potential global namespace...

I think you touch on a very important flaw of my "as.pm" and of Package::Alias' approach as well. Consider a program which has:

use Foo; use Bar;
Now, Foo.pm has the following shortening (using my syntax for ease of reading):
package Foo; use Very::Long::Module::Name as Shorty;
and Bar.pm has the following shortening:
package Bar; use Some::Other::Long::Module::Name as Shorty;
Then you see we have a problem. One of the two modules will be referring to the wrong long module name, depending on whether an existing stash would be overwritten or not. In other words: you can only have one Shorty. That's because the stash aliasing (or the @ISA assignment) is not limited to the package scope from which it is invoked. And I don't see a way to encapsulate it, as all of the object creation is at run-time.

In my view, this pulls the rug from under any shortening approach currently available. As you cannot create code that can be well-behaved in that respect.

Too bad. It was a nice idea while it lasted... ;-)

Liz

Replies are listed 'Best First'.
Re: Re: Re: Re: Re: use Very::Long::Module::Name as Foo;
by tilly (Archbishop) on Oct 15, 2003 at 03:04 UTC
    Re-using load was not intentional, I was just looking for a name that made that line read relatively nicely, and I was in a hurry because I was late for work.

    As for the shortening approach, putting the package name in a variable works reasonably well. Putting the package name in a constant somewhat works. Both will work with the direct syntax, but not the indirect, my differing judgements on them are that people who don't understand the magic are (at a guess) more likely to accept the syntax error from the variable than from the constant. That is:

    my $short = 'Very::Long::Module'; use constant Short => 'Very::Long::Module'; # Later the following work: $short->new(@args); Short->new(@args); # The following do not: new $short(@args); # I'm guessing unsurprising? new Short(@args); # Possibly puzzling?
    It would, I guess, be possible to use source filtering to both set a constant and to rewrite indirect method calls. I wouldn't trust it too much though...

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://299206]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others making s'mores by the fire in the courtyard of the Monastery: (2)
As of 2024-03-19 05:20 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found