Slash Boxes
NOTE: use Perl; is on undef hiatus. You can read content, but you can't post it. More info will be forthcoming forthcomingly.

All the Perl that's Practical to Extract and Report

The Fine Print: The following comments are owned by whoever posted them. We are not responsible for them in any way.
More | Login | Reply
Loading... please wait.
  • Sorry Ovid, but this is an abomination. It kind of sums up many of the problems with Perl culture: obsession with syntax over utility, willful use of obscure features like using the import list for other things, and a desire to make everything REALLY short. Give the module a normal name, call the alias method like a normal method, and give intermediate perl programmers a chance in hell of understanding your code. Otherwise, it belongs in Acme::.
    • by ziggy (25) on 2005.01.05 11:44 (#37249) Journal
      I was going to post a flame about how the whole point of programming language design is to obsess over syntax in the name of achieving greater utility. That's what gave us idioms like 'open or die' and foreach loops over hand-compiling tail recursive forms.

      But I see that your clarification, and yes, the abuse of the import list is quite horrid.

      Perl is a dynamic language. There's no reason why the magic fiddling must happen at compile time, nor is there any reason why it the aliasing must use a use statement to fire. This sketch should work, work clearly, work properly and not be overly abusive to perl:

      use MyCorp::MyApp::Customer qw(...);
      use MyCorp::MyApp::Preferred::Customer qw(...);

      use PackageAlias qw(make_alias);
      make_alias(MyCorp::MyApp::Customer            => "Customer");
      make_alias(MyCorp::MyApp::Preferred::Customer => "Preferred");

      my $cust = new Customer;
      my $pref = new Preferred;
      • Well, my thought is pretty straight-forward: the current code I have implemented not only works, it fits very naturally with current Perl syntax. I can't say that I like the syntax of how I handled importing, but that's not the common case. The important thing is that the common case be handled easily. The more programming people do, the more they want the common things to be short-n-sweet.

        My code is ready to be uploaded and I'm merely waiting for last minute objections from the modules@cpan.or

        • The only reservation I have is about my use of UNIVERSAL::can.

          As well you should. The right code is even shorter and clearer.

          • Silly me. For some stupid reason I thought I shouldn't use $package->can('import') because there's no guarantee that there's an import method. Mentally I thought "there's no guarantee that package can('can') and that might throw an error." It's weird how muddled my mind substituted "can" for "import" in that method call :/

      • I like that API much better. My beef with the original API is that it uses pragma-like names and a non-obvious use of import (which is unfortunately catching on because of Test::More), and all for the sake of syntax rather than added functionality. To me, it looks like a disregard for the larger effects on the community, i.e. if everyone did crazy stuff like this to get a particular syntax for their modules, CPAN would be a total disaster. I have also seen this kind of thing get people into trouble, as i