in reply to Re^2: Loop once on condition 1, many times on cond. 2?
in thread Loop once on condition 1, many times on cond. 2?

No, because the ?: delivers either a list consisting of the single value or all the keys to the 'foreach' loop statement . So if that is only one value, the loop executes only for that single value.

  • Comment on Re^3: Loop once on condition 1, many times on cond. 2?

Replies are listed 'Best First'.
Re^4: Loop once on condition 1, many times on cond. 2?
by punch_card_don (Curate) on Oct 09, 2008 at 15:37 UTC
    Excellent, thanks.

    I'll read up on this notation.




    Time flies like an arrow. Fruit flies like a banana.
      Some maintainability may be gained at the cost of some concision by separating out loop list generation:
      my @keys_to_process = $x eq 'key_1' ? keys %my_hash : exists $my_hash{$x} ? ($x) : () # default - nothing to do ; foreach $key (@keys_to_process) { do_something_with($key); }
      Further, because the above will loop over all keys if $x eq 'key_1' is true even if 'key_1' does not exist in the hash (which may or may not be what you want: Your Logic May Vary), perhaps re-order list generation:
      my @keys_to_process = ! exists $my_hash{$x} ? () : $x eq 'key_1' ? keys %my_hash : ($x) ;

      You can chain these suckers... so to ensure you do nothing if $x doesn't appear in %my_hash:

      foreach $key ( ($x eq 'key_1') ? keys %my_hash : exists $my_hash($x) +? $x : () ) { do a bunch of stuff }
      noting that if $x does not exist, what you want is an empty list.