"do while last" でいらっしゃった貴方。そう、do {} はループではないのです。if { } に last が引っかからないのと一緒です。しょぼん。
while ( 1 ) { { last; }; print "hoge\n"; } # 無限ループ while ( 1 ) { do { last; }; print "hoge\n"; } # 終了
_ 複文の無修飾 {} には last が引っかかるのに、do {} に引っかからないのは、明らかにおかしいと思うのですが……。構文上の都合がきっとあるのでしょうね。