# New Ticket Created by Zoffix Znet
# Please include the string: [perl #130843]
# in the subject line of all future correspondence about this issue.
# <URL: https://rt.perl.org/Ticket/Display.html?id=130843 >
If .seek(... SeekFromCurrent) is called after a call to .readchars, the
position sought to appears to be way off target:
22:54 IOninja m: "/tmp/Foo.pm6".IO.spurt: "I love you so very much";
with "/tmp/Foo.pm6".IO.open { .read(2); .seek: 1, SeekFromCurrent; .tell.say }
22:54 camelia rakudo-moar 5ec251: OUTPUT: «3»
22:55 IOninja m: "/tmp/Foo.pm6".IO.spurt: "I love you so very much";
with "/tmp/Foo.pm6".IO.open { .readchars(2); .seek: 1, SeekFromCurrent;
.tell.say }
22:55 camelia rakudo-moar 5ec251: OUTPUT: «24»
22:55 IOninja looks .readchars messes up the current position as far
as seekage is concerned (it's fine if you try to read more, for example)
After some discussion on IRC (https://irclog.perlgeek.de/perl6-dev/2017-02-22
), one suggestion was that there's some sort of buffering involved:
23:00 m: "/tmp/Foo.pm6".IO.spurt: "I love you\nso very much";
with "/tmp/Foo.pm6".IO.open { .readchars(2); .seek: 1, SeekFromCurrent;
.tell.say }
23:00 camelia rakudo-moar 5ec251: OUTPUT: «24»
23:00 IOninja m: "/tmp/Foo.pm6".IO.spurt: "I love you\nso very much"
x 100; with "/tmp/Foo.pm6".IO.open { .readchars(2); .seek: 1, SeekFromCurrent;
.tell.say }
23:00 camelia rakudo-moar 5ec251: OUTPUT: «2301»
23:00 jnthn Anyway, just sayin' that if it's off-by-one it's
actually not lying :)
23:00 IOninja m: "/tmp/Foo.pm6".IO.spurt: "I love you\nso very much"
x 10000; with "/tmp/Foo.pm6".IO.open { .readchars(2); .seek: 1,
SeekFromCurrent; .tell.say }
23:00 camelia rakudo-moar 5ec251: OUTPUT: «32769»
23:00 IOninja m: "/tmp/Foo.pm6".IO.spurt: "I love you\nso very much"
x 20000; with "/tmp/Foo.pm6".IO.open { .readchars(2); .seek: 1,
SeekFromCurrent; .tell.say }
23:00 camelia rakudo-moar 5ec251: OUTPUT: «32769»
This behaviour is not present on JVM.