| Next: Text::Wigwam::Library::Math | Previous: Text::Wigwam::Library::Filter | [Table of Contents] | [Text::Wigwam Index] | 
Text::Wigwam::Library::Iterators #break, #continue, #first, #foreach, #last, #repeat, #while
This library provides directives relating to looping constructs.
The directives within this library can be imported into specific branches of
the directive tree (which transcends from  Text::Wigwam::Directives) via
plug-ins or modules using one of the following techniques.
package Text::Wigwam::Directives::some::arbitrary::branch; # import everything use Text::Wigwam::Library::Iterators( q/:all/ ); package Text::Wigwam::Directives::another::arbitrary::branch; # import selectively use Text::Wigwam::Library::Iterators( qw/ :break :continue :for :foreach :repeat :while / );
Breaks out of a #foreach, #repeat, or #while loop.
 [!!
  #foreach var < a b 0 c d > {
      #unless var #break
     var
  }
  /* output:
   ab
  */
 !!]
Skips the current iteration of a #foreach, #repeat, or #while loop.
 [!!
  #foreach var < a b 0 c "" d > {
      #unless var #continue
     var
  }
  /* output:
   abcd
  */
 !!]
For each element of array, the current element's value is stored in var and block is executed. The concatenated results of each block execution is returned.
 [!!
  #define array < 3 . 1 4 1 5 9 6 >
  #foreach digit array {
     digit
  }
  /* output:
    3.141596
  */
 !!]
The loop can be terminated using the #break directive within block, or
an iteration can be skipped using #continue.
Returns true during the first iteration of a #foreach loop. Alternatively,
you could simply access the global directly via :first.
 [!!
  #foreach item < one two three four >{
     #if #first "<UL>"
     "<LI>" item
     #if #last "</UL>"
  }
  /* Output:
   <UL><LI>one<LI>two<LI>three<LI>four</UL>
  */
 !!]
Returns true during the final iteration of a #foreach loop. Alternatively,
you can simply access the global directly via :last.
 [!!
  #foreach item < milk cheese eggs waffles wd40 >{
     #if #first { "Ingredients: " item }
     #elsif #last { " and " item "." }
     #else { ", " item }
  }
  /* output:
   Ingredients: milk, cheese, eggs, waffles and wd40.
  */
 !!]
Begins a loop of a fixed number of iterations which is dictated by num.
Supports #break and #continue within block.
 [!!
  #repeat 20 { "-" }
  /* output:
   --------------------
  */
 !!]
The iteration count can be retrieved within the block via the :repeat
global.
 [!!
  #repeat 20 { :repeat "-" }
  /* output:
   0-1-2-3-4-5-6-7-8-9-10-11-12-13-14-15-16-17-18-19-
  */
 !!]
Continuously executes block so long as cond evaluates to true prior to each iteration. Returns the concatenated results of each iteration.
[!! #define array ( 0 1 2 3 4 ) #while array #shift array /* output: 01234 */ !!]
The #break directive can be used within block to end the loop, and
#continue can be used to interrupt the current iteration.
 [!!
  #define array ( 4 9 3 8 2 7 1 0 6 5 )
  #while array {
     #define num #shift array
     #unless num #break
     #if #lt num 4 #continue
     num
  /* output:
   4987
  */
  }
 !!]