A little “state” idiom
{
# ... something that needs to be done twice ...
if ( not state $first_iteration_done++ ) {
# ... something that must only happen after the first time ...
redo;
}
}
In general, some form of “if state $flag
” can be used as a “have I been here?” idiom that avoids the need to mention the flag’s identifier anywhere else. Without state
, one must repeat oneself some distance away at least to declare the flag in whichever outer scope has the appropriate lifetime.
Cool trick.