I really like it, and am likely to abandon the for(;;) construct permanently in favor of the above idiom. Should I repent?
One of the tradeoffs you'll need to consider when making this decision is whether readability suffers when your loop gets to be more than an eyefull. A non-loop scope is a common idiom, particularly when the intent it to temporarily localize variables. When I read
{
local $/ = undef;
...
I think to myself, "ah, slurp mode," not "I wonder if this is going to be a loop?" I then read on with a mental context set. But if 15 lines down I enounter
last or
redo, I have a moment of confusion to work through that wouldn't have been there if the scope had started with
while ( 1 ) {
or
for ( ; ; ) {