More literal transcription of your original code is to allow zero-length match, which maintains "pos", and then checking the match length.
#!/usr/bin/env perl6
use v6.c;
given " foo bar" {
die unless m/^\s+/;
die unless m:p/ foo\s+ /;
die if m:p/[ willnotmatch ]?/ && $/.chars;
die unless m:p/ bar /;
}
say $/.pos; # yields "13"
-y
