Based on an off-list discussion, it turns out that unary C<=> is not slurpy as mentioned in S04. The following patch to S04 corrects this; I've already applied the patch but thought I'd pass it by p6l for review/comments/reactions.
Pm
Index: S04.pod =================================================================== --- S04.pod (revision 3802) +++ S04.pod (working copy) @@ -12,7 +12,7 @@ Maintainer: Larry Wall <[EMAIL PROTECTED]> Date: 19 Aug 2004 - Last Modified: 29 Jan 2005 + Last Modified: 15 Jun 2005 Number: 4 Version: 5 @@ -185,13 +185,10 @@ This has the added benefit of limiting the scope of the C<$line> parameter to the block it's bound to. (The C<while>'s declaration of C<$line> continues to be visible past the end of the block. Remember, -no implicit block scopes.) It is possible to write +no implicit block scopes.) It is also possible to write while =$*IN -> $line {...} -But it won't do what you expect, because unary C<=> does a slurp in scalar -context, so C<$line> will contain the entire file. - Note also that Perl 5's special rule causing while (<>) {...}