http://www.perlmonks.org?node_id=525583


in reply to Re: Flipin good, or a total flop?
in thread Flipin good, or a total flop?

If you're really interested on whether the start condition and/or end condition were triggered, there's another way: using variables to capture the test results. Like this:
if((my $start = /start/) .. (my $end = /end/)) { ...
Later, you simply have to test the boolean value of $start and $end:
print "First time\n" if $start; print "Last time\n" if $end;
but only in the if BLOCK, of course (lexical scope for the variables).

Replies are listed 'Best First'.
Re^3: Flipin good, or a total flop?
by ysth (Canon) on Jan 26, 2006 at 03:25 UTC
    I'm pretty sure that works the same way
    my $i = 13 if $expr;
    does, and is not to be trusted to continue to do what you mean.

    No, maybe I'm wrong. Hmm.

    Update: as long as you don't modify $start or $end except in cases where they were already set, I think you can count on this continuing to work, even if the my $foo if bar thing is "fixed". But I'd expect that if a warning is added for the my $foo if bar thing, that you'd get the warning with your code also.

      bar() if my $foo;
      is different from
      my $foo if bar(); # don't do this!

      The first case is equivalent to

      if (my $foo) { # $foo is lexically scoped to this block bar(); }
      just like how
      for my $foo (@foo) { # $foo is lexically scoped to this block baz(); }

      So if ((my $start =~ /start/) .. (my $end =~ /end/)) is perfectly happy.