I'm a bit confused by this behaviour, and am unsure whether it needs
to be better documented, or perhaps is a bug.

int main() {
    object buf = Stdio.Buffer("#44");
    write("Matches: %O %O\n", buf->sscanf("#%2[4]"), (string)buf);
    buf = Stdio.Buffer("#4");
    write("Doesn't: %O %O\n", buf->sscanf("#%2[4]"), (string)buf);
    buf = Stdio.Buffer("#44");
    write("Matches: %O %O\n", buf->match("#%2[4]"), (string)buf);
    buf = Stdio.Buffer("#4");
    write("Doesn't: %O %O\n", buf->match("#%2[4]"), (string)buf);
}

When using sscanf, the successful match returns ({"44"}) and leaves
the buffer empty, and the unsuccessful match returns an empty array
and leaves the "4" in the buffer. This makes sense; the hash was
matched and consumed, but the 2-character requirement meant that
nothing was matched.

Using match instead produces a somewhat odd result though. If there's
enough text in the buffer, it returns "44" and leaves the buffer
empty; this corresponds to sscanf's behaviour. In the other case,
though, it returns "#%2[4]" (the pattern), and leaves "4" in the
buffer. Is this intentional?

(If the first character of the buffer isn't a hash, both return 0 and
leave the buffer unchanged. This behaviour is also correct. It's only
the partial match that seems curious.)

ChrisA
  • Und... Chris Angelico
    • ... Henrik Grubbstr�m (Lysator) @ Pike (-) developers forum
      • ... Marcus Comstedt (ACROSS) (Hail Ilpalazzo!) @ Pike (-) developers forum
        • ... Henrik Grubbstr�m (Lysator) @ Pike (-) developers forum
      • ... Chris Angelico
        • ... Marcus Comstedt (ACROSS) (Hail Ilpalazzo!) @ Pike (-) developers forum
        • ... Chris Angelico
          • ... Marcus Comstedt (ACROSS) (Hail Ilpalazzo!) @ Pike (-) developers forum
    • ... Chris Angelico

Reply via email to