#!/usr/bin/perl -w use strict; use Getopt::Std; use Data::Dumper; my %switches; %switches = splice(@ARGV, 0, 4); # parse the XML file and work out what other arguments # you're going to be passed. Use that info to build $fmt my $fmt = 'd:m:'; getopts($fmt, \%switches); foreach (keys %switches) { $switches{$_} = [ split /\s+/, $switches{$_} ]; } print Dumper \%switches;