sub ideal # Everything must be declared before use or at definition while INPUT $accumulator .= $obj->do_something( $_ ) return $result sub reality # Allow the use of things prior to declaring or defining them: one pass # looks for all declarations and the next pass proceeds as normal. @input = INPUT $obj->examine( @input ) while @input $accumulator .= $obj->do_something( $_ ) return $result sub surreality # Just like reality() except that post-facto declarations might change # how previous results in $accumulator occurred. while INPUT $accumulator .= $obj->do_something( $_ ) return $result