[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