in reply to Re: Multiple actions triggered by failure to open a file
in thread Multiple actions triggered by failure to open a file

perfect! thank you!
  • Comment on Re^2: Multiple actions triggered by failure to open a file

Replies are listed 'Best First'.
Re^3: Multiple actions triggered by failure to open a file
by kschwab (Vicar) on Jan 10, 2017 at 16:22 UTC

    Or just a traditional "if":

    if (!open my $log_FH, '>', './testlogifle.txt') { print "Failure to open log file.\n"; die "Failure to open log file.\n"; }
      if (!open my $log_FH, '>', './testlogifle.txt') { print "Failure to open log file.\n"; die "Failure to open log file.\n"; }

      Note that the lexical  $log_FH in the quoted code is local to the if-block and cannot be used by anything except the open failure-handling code — probably not what GreenLantern intends. Instead, the lexical should be declared outside the block if it is ever to be used there.

      Also, this might be a good occasion to use the otherwise puzzling idiom I see sometimes in bioinformatics code: wrapping the open in an unless-block:

      my $log_FH; unless (open $log_FH, '>', './testlogifle.txt') { print "Failure to open log file.\n"; die "Failure to open log file.\n"; } do_something_with($log_FH); ...


      Give a man a fish:  <%-{-{-{-<

        I find that often I do want a lexically scoped file handle. Also, I often find that failure to open a file is a perfectly good reason to have both if and else blocks.

        my $logfile = './testlogfile.txt'; if ( open my $log_FH, '>', $logfile ) { do_stuff_and_write_info_to_log_about_it( $log_FH ); } else { print "Failure to open log file.\n"; die "Failure to open log file $logfile for writing.: $!\n"; }