use strict; use warnings; use Tie::Cycle; tie my $cycle, 'Tie::Cycle', [ 1..3,0,reverse (1..3),0 ]; $\=":stmt while\n"; print my $statement=$_ while ($_=$cycle)>0; print defined($statement) ? "Defined" : "Notdefined"; $_="Do's pre-evaluation"; $\=":do{}while\n"; do { print my $do = $_ } while ($_=$cycle)>0; eval 'print defined($do) ? "Defined" : "Notdefined";'; print $@ if $@; $\=":stmt while 0\n"; print my $while="Test" while 0; print defined($while) ? "Defined" : "Notdefined"; $\=":stmt if\n"; print my $if="Test" if 0; print defined($if) ? "Defined" : "Notdefined"; $\=":stmt for\n"; print my $for=$_ for 0; print defined($for) ? "Defined" : "Notdefined"; __DATA__ 1:stmt while 2:stmt while 3:stmt while Notdefined:stmt while Do's pre-evaluation:do{}while 3:do{}while 2:do{}while 1:do{}while Global symbol "$do" requires explicit package name at (eval 1) line 1. :do{}while Notdefined:stmt while 0 Notdefined:stmt if 0:stmt for Notdefined:stmt for