NAME

Sub::ParamLoader - Map named argument list into a hash modified according to a rule

SYNOPSIS

use Sub::ParamLoader;
my $pl = Sub::ParamLoader -> new ('D'=>[...],'M'=>...);
#   parameters specify the rule described below

my $HashObject = $pl->load(...,key=>value,..); # store named items

# access as usual with hash
my $v = $HashObject->{key};
my @V = delete @$HashObject{..,key,..};

DESCRIPTION

Arguments of the constructor, keyed by 'D','M', are optional. Giving a closer view they look like

'D' => [...,Name(i)=>DefVal(i),...]
'M' => $mask                      where  $mask = sub {...}
'M' => [ $mask, P(1),...P(m) ]    or           = \&fmask

The arguments and specifications are exactly as in Sub::ParamFrame by correspondence of operations :

Sub::ParamFrame          Sub::ParamLoader
-----------------------------------------------
pfrule                   new
pfload                   load

This class provides base functionality for Sub::ParamFrame which only adds a final improvement step for subroutine arguments. Regarding methods new & load, as contents overlap, please refer to the description of pfrule & pfload in Sub::ParamFrame. Note that in Sub::ParamFrame pfrule calls Sub::ParamLoader->new(...) storing the created object to $register{$subname}, pfload invokes $register{$subname}->load.

DEPENDENCIES

This module requires these other modules and libraries: Tie::Hash::KeysMask

EXAMPLE

use Sub::ParamLoader;

my @DoW = qw(Monday Tuesday Wednesday Thursday Friday Saturday Sunday);
my %DW2Dic =  ######### Abbreviations mapping #############
qw(su sunday mo monday tu tuesday we wednesday th thursday fr friday sa saturday);

my $pl = Sub::ParamLoader->new #============== RULE ============#
(             #------------------ KEYMASK--'M'------------------#
    'M' =>    # match any prefix-string of a week-day-name with legth
        sub   # not less than 2, ignoring case of characters
        {
            my $ik = shift;                 my $ikl = lc $ik;
            my $ikl2 = substr $ikl,0,2;     my $res = $DW2Dic{$ikl2};
            return undef unless
            ( defined $res)  && ($ikl eq substr($res,0,length $ikl));
            $res;
        },
    'D' => [qw(SUN VII MON I TUE II WED III)] ### DEFAULTS ###
);

my $hob = $pl->load qw(We iii Thur iv Fr v  Satur vi Sun vii);
#        overrides defauts 'wednesday'=>'III','sunday'=>'VII'   #

sub bar; sub kvTabPrint;  ######## show variants of access #######
print bar 7;
kvTabPrint $hob, @DoW;
kvTabPrint $hob, qw (mo tu we th fr sa su);
kvTabPrint $hob, qw (MONDY1 TUE WEDNESD THI FRI SAT suN);
kvTabPrint $hob, qw (Mond TUE We th Fridy1 saturn sUn);

###################### output printing matters ####################
sub lf() {qq(\n)}
sub bar
{
    sub seg() {'-'x10}   sub segv() {seg.'+'}
    my $n = (shift)-1;   (segv x $n).seg.lf;
}

sub kvTabPrint ######## output a hash arguments-values table #####
{
    my $href = shift;
    my $kline = join ' |', map sprintf('%9s',$_),@_;
    my $vline = join ' |', map sprintf('%9s',$href->{$_}||'?'),@_;
    print $kline,lf,$vline,lf,bar(scalar @_);
}
###################################################################

Output of last call of kvTabPrint:

---------+----------+----------+----------+----------+----------+----------
    Mond |      TUE |       We |       th |   Fridy1 |   saturn |      sUn
       I |       II |      iii |       iv |        ? |        ? |      vii
---------+----------+----------+----------+----------+----------+----------

AUTHOR

Josef Schönbrunner <j.schoenbrunner@onemail.at>

COPYRIGHT AND LICENSE

Copyright (c) 2005 by Josef Schönbrunner This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.8.7 or, at your option, any later version of Perl 5 you may have available.