#!perl -w use strict; my $params = &GetParameters(); my @dirs = @{ $params->{dir} }; my @file = @{ $params->{file} }; print "\nDIRS:\n\t"; print join("\n\t", @dirs); print "\nFILES:\n\t"; print join("\n\t", @file); # and so on sub GetParameters { my @allowedParams = qw(file dir); die &PrintUsage() unless @ARGV; my $params = {}; # shell contain parameters foreach (@ARGV){ my ($key, $val) = split(/\=/, $_, 2); # split up by the first = # test if $key is a valid parameter unless ($key =~ s/^\-\-//) { # must start with -- die &PrintUsage( "Error: invalid param --$key"); } unless ( grep {lc($key) eq lc($_)} @allowedParams){ die "Error: param $key not allowed\n"; } # maybe do some checks if $val is existing # .... # add param to hashreference $params push (@{ $params->{$key} }, $val); } # for return ($params); } # GetParameters # Added &PrintUsage; thx to [mull] sub PrintUsage{ my $msg = shift || ''; return (<## C:\TEMP\test>testParameters.pl --dir=/dir1/sdir2 --dir=/dir2/sdir2 --file=README.txt DIRS: /dir1/sdir2 /dir2/sdir2 FILES: README.txt C:\TEMP\test>