GetOptions ( "a=s" => \@a, "b=s" => \@b ); @a = split(/,/,join(',',@a)); @b = split(/,/,join(',',@b)); #### my $opt = { # this has to be first because the sub-refs # below are closures using it. grot => [], }; my $splitter = sub { my ($name, $val) = @_; push @{$opt->{$name}}, split q{,}, $val; }; GetOptions( $opt, 'grot=s@' => $splitter, ) or die "can't parse options"; #### my $from_file = sub { my ($name, $val) = @_; open my $fh, "<$val" or die "can\'t open file \'$val\'"; local $/ = undef; $opt->{$name} = <$fh>; close($fh); };