- open G, "<:utf8", "b";
- $ok = $a = 0;
- for (@a) {
- unless (
- ($c = sysread(G, $b, 1)) == 1 &&
- length($b) == 1 &&
- ord($b) == ord($_) &&
- systell(G) == ($a += bytes::length($_))
- ) {
- print '# ord($_) == ', ord($_), "\n";
- print '# ord($b) == ', ord($b), "\n";
- print '# length($b) == ', length($b), "\n";
- print '# bytes::length($b) == ', bytes::length($b), "\n";
- print '# systell(G) == ', systell(G), "\n";
- print '# $a == ', $a, "\n";
- print '# $c == ', $c, "\n";
- last;
+
+ my %actions = (
+ syswrite => sub { syswrite G, shift; },
+ 'syswrite len' => sub { syswrite G, shift, 1; },
+ 'syswrite len pad' => sub {
+ my $temp = shift() . "\243";
+ syswrite G, $temp, 1; },
+ 'syswrite off' => sub {
+ my $temp = "\351" . shift();
+ syswrite G, $temp, 1, 1; },
+ 'syswrite off pad' => sub {
+ my $temp = "\351" . shift() . "\243";
+ syswrite G, $temp, 1, 1; },
+ );
+
+ foreach my $key (sort keys %actions) {
+ # syswrite() on should work on characters, not bytes
+ open G, ">:utf8", "b";
+
+ print "# $key\n";
+ $ok = $a = 0;
+ for (@a) {
+ unless (
+ ($c = $actions{$key}($_)) == 1 &&
+ systell(G) == ($a += bytes::length($_))
+ ) {
+ diagnostics();
+ last;
+ }
+ $ok++;