perl -we 'use Getopt::Long; my @channels; GetOptions("channel=s", sub { push @channels, {"channel", $_[1]}; }, "forever", sub { $channels[-1]{"forever"} = 1; }, "minutes=n", sub { $channels[-1]{"minutes"} = $_[1]; }, "hours=n", sub { $channels[-1]{"hours"} = $_[1]; }, ); use Data::Dumper; print Dumper [@channels];' -- -channel 1 -forever -channel 2 -minutes 10 -hours 20 -channel 3 -forever #### $VAR1 = [ { 'forever' => 1, 'channel' => '1' }, { 'hours' => 20, 'minutes' => 10, 'channel' => '2' }, { 'forever' => 1, 'channel' => '3' } ];