https://git.spwbk.site/swatson/perl-shellex/raw/master/lib/Shellex/Shellex.pm
___________________________________
package Shellex::Shellex;
use strict;
use warnings;
use Log::Log4perl qw(:easy);
use Exporter qw(import);
our @EXPORT_OK = qw(shellex findBin);

sub shellex {

       my $cmd = shift;
       my $logger = shift;
       if ( defined $logger && $logger ne '' ) {
               $logger->info("Running: $cmd 2>&1");
       }

       my $output = `$cmd 2>&1`;
       chomp $output;
       my $rc = $?;
       if ( defined $logger && $logger ne '' ) {
               $logger->info("Returned: $rc");
       }

       if ( $rc != 0 ) {
               if ( defined $logger && $logger ne '' ) {
                       $logger->error("$cmd returned non-zero: $rc");
               }

               print "$cmd returned non-zero: $rc\n";
               exit 1;
       }

       return $output;

}

sub findBin {

       my $cmd = shift;
       my $logger = shift;
       my $binPath = shellex("which $cmd",$logger);
       my $rc = $?;
       chomp $binPath;
       if ( $rc != 0 ) {
               if ( defined $logger && $logger ne '' ) {
                       $logger->error("Couldn't find a path for $cmd, exiting...");
               }
               exit 1;
       } else {
               return $binPath;
       }

}
1;