From: Simon Cozens Date: Mon, 18 Sep 2000 18:24:25 +0000 (+0100) Subject: Clarify documentation on 'use bytes'. X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=5de2853538d2396ad34f218ecc3a13db805f8d24;p=p5sagit%2Fp5-mst-13.2.git Clarify documentation on 'use bytes'. Subject: Re: What does 'use bytes' "mean" ? Message-ID: <20000918182425.A26765@deep-dark-truthful-mirror.perlhacker.org> p4raw-id: //depot/perl@7354 --- diff --git a/lib/bytes.pm b/lib/bytes.pm index f93d615..f2f7e01 100644 --- a/lib/bytes.pm +++ b/lib/bytes.pm @@ -38,11 +38,28 @@ The C pragma disables character semantics for the rest of the lexical scope in which it appears. C can be used to reverse the effect of C within the current lexical scope. -Perl normally assumes character semantics in the presence of -character data (i.e. data that has come from a source that has -been marked as being of a particular character encoding). - -To understand the implications and differences between character +Perl normally assumes character semantics in the presence of character +data (i.e. data that has come from a source that has been marked as +being of a particular character encoding). When C is in +effect, the encoding is temporarily ignored, and each string is treated +as a series of bytes. + +As an example, when Perl sees C<$x = chr(400)>, it encodes the character +in UTF8 and stores it in $x. Then it is marked as character data, so, +for instance, C returns C<1>. However, in the scope of the +C pragma, $x is treated as a series of bytes - the bytes that make +up the UTF8 encoding - and C returns C<2>: + + $x = chr(400); + print "Length is ", length $x, "\n"; # "Length is 1" + printf "Contents are %vd\n", $x; # "Contents are 400" + { + use bytes; + print "Length is ", length $x, "\n"; # "Length is 2" + printf "Contents are %vd\n", $x; # "Contents are 198.144" + } + +For more on the implications and differences between character semantics and byte semantics, see L. =head1 SEE ALSO