use strict; use warnings; use Data::Dumper; sub processArgs { my ($sArg, $aFiles) = @_; if ($sArg =~ /^--(\w+)=(\w+)$/) { # option => value $1 => $2; } elsif ($sArg =~ /^--(\w+)/) { # flag => 1 $1 => 1 } elsif ($sArg =~ m{^[\w/]}) { push @$aFiles, $_; (); } else { # bad argument - add nothing to the result hash warn "Invalid option: <$_> - options must begin with " ."-- or be a legal file name"; (); } } my @aFiles; my %hARGV = map { processArgs($_, \@aFiles) } @ARGV; $hARGV{files}=\@aFiles if @aFiles; print Dumper(\%hARGV);