package ITAGetopt; use strict; use warnings; use Moose; has 'cl' => (is => 'rw', isa => 'Str'); extends 'Getopt::Long'; sub new { my $class = shift; my $obj = $class->Getopt::Long::Parser::new(@_); return $class->meta->new_object( __INSTANCE__ => $obj, @_, ); } #sub GetOptions { # my ($self) = shift; # $self->SUPER::GetOptions(@_); # ... # # won't do it that way, not because it is diffcult but after is easier before 'GetOptions' => sub { print "here I am before ...\n"; print "@ARGV \n"; }; after 'GetOptions' => sub { my $self = shift; print "here I am after ...\n"; print "@ARGV \n"; $self->cl($ARGV[0]); }; 1; ## gopt.pl use strict; use warnings; use ITAGetopt; use Data::Dumper; # $opt{opt} = $ARGV[0] if (! $opt{opt} && $ARGV[0]); # $opt{command_line} = $ARGV[0] if $ARGV[0]; #my $opt = ITAGetopt::ITAGetOption( # 'o|opt:s' => 'opt', # 'b|bsp=i' => 'bsp', #); my %opt; my $getopt = ITAGetopt->new(); my $ref = $getopt->GetOptions( 'o|opt:s' => \$opt{opt}, 'b|bsp=i' => \$opt{bsp}, ); printf "command line %s\n", $getopt->cl;