#!/usr/bin/env perl use 5.010; use strict; use warnings; my $VERSION = '1.00'; use Getopt::Long 'GetOptionsFromArray'; use Pod::Usage; main(@ARGV) unless caller; sub main { my $ARGV = \@_; my %args = ( help => sub { pod2usage -verbose => 1, -exitval => 0 }, version => sub { say "my_script version $VERSION\n"; exit }, ); GetOptionsFromArray($ARGV, \%args, qw ) or pod2usage(2); if (@ARGV) { do_something($_) for @ARGV; } else { while () { chomp; do_something($_) } } } sub do_something { say "do_something: $_[0]"; }