Как мне получить доступ к значению параметра Getopt :: Long в подпрограмме параметра?

Моя цель - иметь параметр - override = f , который управляет значениями двух других параметров. Хитрость заключается в том, чтобы выяснить, как ссылаться на значение параметра (часть, соответствующая f в указателе = f ) в подпрограмме , которая выполняется, когда GetOptions обнаруживает наличие параметра в командной строке.

Вот как я это делаю:

$ cat t.pl
#!/usr/bin/perl
use strict;
use warnings;
use Getopt::Long;
our %Opt = (
    a   => 0,
    b   => 0,
);
our %Options = (
    "a=f"       => \$Opt{a},
    "b=f"       => \$Opt{b},
    "override=f"    => sub { $Opt{$_} = $_[1] for qw(a b); },  # $_[1] is the "trick"
);
GetOptions(%Options) or die "whatever";
print "\$Opt{$_}='$Opt{$_}'\n" for keys %Opt;

$ t.pl --override=5
$Opt{a}='5'
$Opt{b}='5'

$ t.pl --a=1 --b=2 --override=5 --a=3
$Opt{a}='3'
$Opt{b}='5'

Кажется, что код обрабатывает параметры и переопределяет так, как я хочу. Я обнаружил, что в подпрограмме , $ _ [0] содержит имя параметра ( полное имя , даже если оно сокращено в командной строке ), а $ _ [1] содержит значение. Магия.

Я не видел этого задокументированного, так что я ' m обеспокоен тем, не делаю ли я невольно ошибки, используя эту технику.

5
задан Cary Millsap 12 March 2011 в 07:12
поделиться