in reply to Nested OR as a control structure
If you really want do this (why?:), you can, and without resorting to subs or do blocks--but I wouldn't advise it. T'is fun though:)
#! perl -slw use strict; my @result; sub dofirstcritical { print 'do first critical returning ', $result[ 0 ]; $result[ 0 ] } sub dobackupcritical { print 'do backup critical returning ', $result[ 1 ]; $result[ 1 ] } sub dobackupremainder{ print 'backup remainder done' } sub dofirstremainder { print 'first remainder done' } for my $result ( [ 0, 0 ], [ 0, 1 ], [ 1, 0 ], [ 1, 1] ) { @result = @$result; eval{ dofirstcritical() and ( dofirstremainder(), die 'Exiting 0' ) or ( ( dobackupcritical() or die "main and backup failed" ) and ( dobackupremainder(), die 'Exiting 0' ) ) }; print $@, $/; } __END__ P:\test>temp do first critical returning 0 do backup critical returning 0 main and backup failed at P:\test\temp.pl line 15. do first critical returning 0 do backup critical returning 1 backup remainder done Exiting 0 at P:\test\temp.pl line 15. do first critical returning 1 first remainder done Exiting 0 at P:\test\temp.pl line 15. do first critical returning 1 first remainder done Exiting 0 at P:\test\temp.pl line 15.
Note: The eval block is only there to captiure and record the dies and simulated exits.
|
|---|