| 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
*/
}
!!]