in reply to How do I use a block as an ‘or’ clause instead of a simple die?

if ( !$ftp->put($myfile) ) { # do # your excessive exercise # her }
  • Comment on Re: How do I use a block as an ‘or’ clause instead of a simple die?
  • Download Code

Replies are listed 'Best First'.
Re^2: How do I use a block as an ‘or’ clause instead of a simple die?
by ikegami (Patriarch) on Apr 18, 2009 at 17:35 UTC
    The limit of if is encountered if you declare a variable.
    if (!open(my $fh, '<', $qfn)) { ... } print $fh $s; # XXX
    if (my ($y) = f($x)) { # Returns () on error. ... } print defined($y) ? $y : '[undef]'; # XXX

    Solutions:

    • Declare the var earlier:

      my $fh; if (!open($fh, '<', $qfn)) { ... }
      my $y; if (($y) = f($x)) { # Returns () on error. ... }
    • Save the result:

      my $success = open(my $fh, '<', $qfn); if (!$success) { ... }
      my $success = my ($y) = f($x); # Returns () on error. if (!$success) { ... }
    • Use do:

      open(my $fh, '<', $qfn) or do { ... };
      my ($y) = f($x) # Returns () on error. or do { ... };