use Getopt::Long; my (@foos, @bars, @bazen, @quuxi); GetOptions ( 'foos=s' => sub { shift; push @foos, split /,/, @_; }, 'bars=s' => sub { shift; push @bars, split /,/, @_; }, 'bazen=s' => sub { shift; push @bazen, split /,/, @_; }, 'quuxi=s' => sub { shift; push @quuxi, split /,/, @_; }, ); #### use Getopt::Long; my (@foos, @bars, @bazen, @quuxi); sub setter { no strict refs; push @{shift}, split /,/, @_; } GetOptions ( 'foos=s' => \setter, 'bars=s' => \setter, 'bazen=s' => \setter, 'quuxi=s' => \setter, ); #### use Getopt::Long; my %opts; sub setter { push @{$opts{shift}}, split /,/, @_; } GetOptions ( 'foos=s' => \setter, 'bars=s' => \setter, 'bazen=s' => \setter, 'quuxi=s' => \setter, );