#! /usr/bin/perl use strict; use warnings; use 5.020; #> sub routines #> -------------------------------------------------------------------- # own options parser sub parse_options { my %data; my @args; my $option; for my $arg ( @ARGV ) { # stop parsing options if ( $arg eq "--" ) { last; } # if it starts with '-', it's an option # this means, arguments must not start with '-' elsif ( $arg =~ m/^-/ ) { # save previous option if ( $option ) { $data{$option} = @args ? [ @args ] : 1; } $option = $arg; @args = (); } # must be an argument else { push @args, $arg; } } # save last option if ( $option ) { $data{$option} = @args ? [ @args ] : 1; } return \%data; } #> main programm #> -------------------------------------------------------------------- # parse options and get ref to hash of options my $options_hRef = parse_options(); # control results require Data::Dumper; say Data::Dumper->new( [ $options_hRef ], [ '*options' ], )->Sortkeys(1)->Useqq(1)->Dump; __END__