in reply to Strange behaviour when returning the value of "do {}" - possible perl bug?

Some simple test cases. Perl v5.8.8 on Linux and WinXP acted the same.
my @testsubs; ## test 1 push @testsubs, sub { return do { 1; 1; } }; ## test 2 push @testsubs, sub { if (1) { return do { 1; } } }; ## test 3 push @testsubs, sub { if (1) { return do { 1; 1; } } }; ## test 4 push @testsubs, sub { if (1) { return scalar do { 1; 1; } } }; for (1..@testsubs) { print "test $_ ", $testsubs[$_-1]->()==1 ? 'passes' : 'fails', "\n"; }
Output:
test 1 passes test 2 passes test 3 fails test 4 passes