Stories
Slash Boxes
Comments
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

use Perl Log In

Log In

[ Create a new account ]

Ovid (2709)

Ovid
  (email not shown publicly)
http://publius-ovidius.livejournal.com/
AOL IM: ovidperl (Add Buddy, Send Message)

Stuff with the Perl Foundation. A couple of patches in the Perl core. A few CPAN modules. That about sums it up.

Journal of Ovid (2709)

Tuesday August 11, 2009
05:23 PM

Use packages?

[ #39449 ]

Since modules is taken, I was thinking about packages to do this:

#use Spreadsheet::ParseExcel::Workbook;
#use Spreadsheet::ParseExcel::Worksheet;
#use Spreadsheet::ParseExcel::Font;
#use Spreadsheet::ParseExcel::Format;
#use Spreadsheet::ParseExcel::Cell;
#use Spreadsheet::ParseExcel::FmtDefault;

use packages 'Spreadsheet::ParseExcel' => qw(
    Workbook
    Worksheet
    Font
    Format
    Cell
    FmtDefault
);

No idea if people would really care, but I like the cleaner syntax. Or maybe as a new feature with 'aliased':

use aliased 'Spreadsheet::ParseExcel', import => [qw(
    Workbook
    Worksheet
    Font
    Format
    Cell
    FmtDefault
)];

Seems an uncomfortable overloading of aliased, but it could be handy.

The Fine Print: The following comments are owned by whoever posted them. We are not responsible for them in any way.
 Full
 Abbreviated
 Hidden
More | Login | Reply
Loading... please wait.
  • What about from?

    use from 'Spreadsheet::ParseExcel' => qw(
            Workbook
            Worksheet
            Font
            Format
            Cell
            FmtDefault
    );

    Or something else that looks more like English.

  • Personally I don't think it's really any cleaner. You've just hidden your meaning behind another statement, another module that the next maintainer has to go and read the docs for to figure out what it does. Sure it's a bit of extra typing, but you only do it once per file.

  • I think it adds complexity and reduces clarity just to save a few characters.

  • Actually I kinda like it since I hate all repetitions/duplications and regard them as evil.

    But it needs the simplest syntax possible to avoid burning extra brainpower. Somehow all the above examples don't cut it.

    How about supporting Unix shell's feature? And how about the name multi or many? use many 'A::{B,C}::{D,E}';

  • The original code is instantly understandable and the intent clear. Now when someone reads your new packages code, they have to pause for a few seconds to figure out what it does and why. I'm not entirely sure that extra speed bump is worth it.

  • with qw(
        Teleweb::Mapper::OS
        Teleweb::Mapper::Ifaces
        Teleweb::Mapper::MainIP
        Teleweb::Mapper::HostingType
        Teleweb::Mapper::RAM
        Teleweb::Mapper::CPU
        Teleweb::Mapper::Apps
        Teleweb::Mapper::Services
        Teleweb::Mapper::Server_app
    );

    Would be:

    # extrapolates from Teleweb::Mapper
    use from 'Teleweb::Mapper' => qw(
      OS Ifaces MainIP HostingType RAM CPU Apps Services Server_app
    );

  • find srctree -type f | xargs grep Spreadsheet::ParseExcel::Font

    The suggested kind of shorthand makes it really hard to do custom searches of your code base, such as for all the code that might happen to use a particular module.  (There might be many modules named mumble::Font - when you separate Spreadshht::ParseExcel unto a separate line from Font you lose the ability to find that unique name using generic tools.
  • use Spreadsheet::ParseExcel::*;

    What, too Java?

    • Something I had considered once but was quickly talked out of. Basically, even many Java people admit that this construct was a mistake. You're not being explicit about what you want and it's therefore unclear what you get. Hell on maintenance programmers.

  • Why reinvent the wheel?