use strict; use warnings; use Getopt::Long ( qw( :config posix_default gnu_compat bundling no_auto_abbrev no_ignore_case passthrough ), 'prefix_pattern=' . qr/((?<=)(?=--\w{2,})--)|((?<=)(?=-\w+)-)/ ); my $column=1; GetOptions( 'column|c=i' => \$column, # 'c=i'=> \$column, ) or die; # with passthrough, tell the user their option wasnt applied # print map "[$_]", @ARGV, "\n"; print "\$column is $column\n"; die if $column < 1; __END__ $ ~/Desktop/gol.pl --column=2 $column is 2 $ ~/Desktop/gol.pl --column 2 $column is 2 $ ~/Desktop/gol.pl --c=2 $column is 1 $ ~/Desktop/gol.pl --c 2 $column is 1 #'column|c=i' => \$column, $ ~/Desktop/gol.pl -c=2 $column is 1 # 'column=i' => \$column, # 'c=i'=> \$column, $ ~/Desktop/gol.pl -c=2 Value "=2" invalid for option c (number expected) Died at /c/Users/archimediiiica/Desktop/gol.pl line 53. $ ~/Desktop/gol.pl -c2 $column is 2 #passthrough $ ~/Desktop/gol.pl --c 2 [--c][2][ ]$column is 1 #passthrough $ ~/Desktop/gol.pl --c=2 [--c=2][ ]$column is 1