do{ ... } while $foo; isn't a loop, it's a block with a postfixed while, so you need to label it to re-do it.
In reply to Re^2: do while loops by f00li5h in thread do while loops by root