[bcn-pm] Getopt::Long i funcions per una mateixa opció

Alex Muntada alexm a alexm.org
dll feb 6 07:44:25 PST 2012


+ Arnau Bria <listsarnau a gmail.com>:

> my %opt = ( 'list'      => {
>        postinstall     => list_postinstall(),
>        distros         => list_distros(),
>        },
>        );

Aquí estàs cridant directament les funcions i el que
t'interessa és la referència a cadascuna d'elles:

my %opy = (
    list => {
        postinstall => \&list_postinstall,
        distros => \&list_distros,
    },
);

> i ho acabo cridant com:
> GetOptions ('list=s' => sub {$opt{$_[0]}->($_[1])->($_[2])});

Fixa't que no estàs accedint al 2 nivells del hash correctament,
en tot cas seria això altre, indicant explícitament que list espera
un comportament de hash:

GetOptions( 'list=s%' => sub { $opt{ $_[0] }{ $_[1] }->( $_[2] ) } );

Però tingues clar que això només funciona per a les opcions
que tenen aspecte de hash, e.g.:

    $ foobar.pl --list distros=debian

Amb això accedeixes al hash $opt{'list'}{'distros'}, obtens la
referència a la funció i la crides amb el paràmetre 'debian'.
L'exemple sencer: https://gist.github.com/1752738

Salut!

-- 
Alex Muntada <alexm a alexm.org>
http://alexm.org/


Més informació sobre la llista de correu Barcelona-pm