use Data::Dump; use Getopt::Long; @ARGV = qw/ --foo --bar=123 --quz=Hello /; GetOptions(\my %OPTS1, 'foo|f', 'bar|b=i', 'quz|q=s') or die; dd \%OPTS1; @ARGV = qw/ -q World /; GetOptions(\my %OPTS2, 'foo|f', 'bar|b=i', 'quz|q=s') or die; dd \%OPTS2; __END__ { bar => 123, foo => 1, quz => "Hello" } { quz => "World" }