X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2Fbytes.pm;h=b7fabbf359d1a85bc34e7934a2abaf1bcd89c27b;hb=4f3b9739f9aa4291e372527205413c88e84985b9;hp=f2f7e0157cb8a92ec97e4dab2e248dc23af56781;hpb=22d4bb9ccb8701e68f9243547d7e3a3c55f70908;p=p5sagit%2Fp5-mst-13.2.git diff --git a/lib/bytes.pm b/lib/bytes.pm index f2f7e01..b7fabbf 100644 --- a/lib/bytes.pm +++ b/lib/bytes.pm @@ -1,5 +1,7 @@ package bytes; +our $VERSION = '1.03'; + $bytes::hint_bits = 0x00000008; sub import { @@ -12,10 +14,17 @@ sub unimport { sub AUTOLOAD { require "bytes_heavy.pl"; - goto &$AUTOLOAD; + goto &$AUTOLOAD if defined &$AUTOLOAD; + require Carp; + Carp::croak("Undefined subroutine $AUTOLOAD called"); } -sub length ($); +sub length (_); +sub chr (_); +sub ord (_); +sub substr ($$;$$); +sub index ($$;$); +sub rindex ($$;$); 1; __END__ @@ -27,12 +36,16 @@ bytes - Perl pragma to force byte semantics rather than character semantics =head1 SYNOPSIS use bytes; + ... chr(...); # or bytes::chr + ... index(...); # or bytes::index + ... length(...); # or bytes::length + ... ord(...); # or bytes::ord + ... rindex(...); # or bytes::rindex + ... substr(...); # or bytes::substr no bytes; -=head1 DESCRIPTION -WARNING: The implementation of Unicode support in Perl is incomplete. -See L for the exact details. +=head1 DESCRIPTION The C pragma disables character semantics for the rest of the lexical scope in which it appears. C can be used to reverse @@ -45,7 +58,7 @@ 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, +in UTF-8 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>: @@ -54,16 +67,22 @@ up the UTF8 encoding - and C returns C<2>: print "Length is ", length $x, "\n"; # "Length is 1" printf "Contents are %vd\n", $x; # "Contents are 400" { - use bytes; + use bytes; # or "require bytes; bytes::length()" print "Length is ", length $x, "\n"; # "Length is 2" printf "Contents are %vd\n", $x; # "Contents are 198.144" } +chr(), ord(), substr(), index() and rindex() behave similarly. + For more on the implications and differences between character -semantics and byte semantics, see L. +semantics and byte semantics, see L and L. + +=head1 LIMITATIONS + +bytes::substr() does not work as an lvalue(). =head1 SEE ALSO -L, L +L, L, L =cut