in reply to Perl 5.10.1 - compare external program output with a list of known error codes

This may be going a bit too far, but you could use a dispatch table to do the work for you. It's reusable, and eliminates a whole slew of if/else/elsif statements...

use strict; use warnings; my %errors = ( 'input file not found' => sub { print "Bloody input file is missing!\n"; }, 'signing key not found' => sub { print "meh, we're screwed!\n"; }, 'no keys found' => sub { print "This doesn't need encrypting anyway...\n"; } ); my $program_output3 = '3001:input file not found'; chomp $program_output3; # chomp any newline $program_output3 =~ s/^\d+://; # remove the digits/colon $errors{lc $program_output3}->(); # lowercase, just in case

Output:

Bloody input file is missing!

Replies are listed 'Best First'.
Re^2: Perl 5.10.1 - compare external program output with a list of known error codes
by malokam (Novice) on Sep 19, 2016 at 19:16 UTC

    This is the code I have written

    #!/pgp/perl5/bin/perl ##Sample script to grep perl program output #use strict; #use List::MoreUtils qw(any); use warnings; use strict; use feature qw{ say }; #Added env variable for exporting pgp LIB_PATH $ENV{LIBPATH} = "/pgp/lib"; my %errors = ( 'input file not found' => sub { print "Bloody input file is missing...\n"; }, 'signing key not found' => sub { print "meh, we're screwed..\n"; }, 'no keys found' => sub { print "This doesn't need encrypting anyway...\n"; }, 'file wiped successfully' => sub { print "Woo Hoo..\n"; }, ); my $program_output3 = `pgp --args --verbose`; chomp $program_output3; # chomp any newline $program_output3 =~ s/^\d+://; # remove the digits/colon $errors{lc $program_output3}->(); # lowercase, just in case
Re^2: Perl 5.10.1 - compare external program output with a list of known error codes
by malokam (Novice) on Sep 19, 2016 at 19:07 UTC

    I am getting this at the end of the perl output

    Can't use an undefined value as a subroutine reference at ./error_chec +ker.pl line 34.

    The line 34 is this. I actually did not understand this as well

    $errors{$program_output3}; # lowercase, just in case

      You missed the ->() piece, which turns it into a function call:

      $errors{$program_output3}->();

      it means, dereference $errors{$program_output3} as a CREF (code reference), and execute it.