X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2Foverload.pm;h=81c859869473d88c2afbf6ebd718ca5727ac452f;hb=3b0db4f96671dacfd3421850abb588b84e2ce6da;hp=838c91fcee0479881aaa7909c8958eb9e2d4b6ac;hpb=d1be9408a3c14848d30728674452e191ba5fffaa;p=p5sagit%2Fp5-mst-13.2.git diff --git a/lib/overload.pm b/lib/overload.pm index 838c91f..81c8598 100644 --- a/lib/overload.pm +++ b/lib/overload.pm @@ -2,7 +2,7 @@ package overload; our $VERSION = '1.00'; -$overload::hint_bits = 0x20000; +$overload::hint_bits = 0x20000; # HINT_LOCALIZE_HH sub nil {} @@ -91,7 +91,7 @@ sub AddrRef { } sub StrVal { - (OverloadedStringify($_[0]) or ref($_[0]) eq 'Regexp') ? + (ref $_[0] && OverloadedStringify($_[0]) or ref($_[0]) eq 'Regexp') ? (AddrRef(shift)) : "$_[0]"; } @@ -108,11 +108,11 @@ sub mycan { # Real can would leave stubs. } %constants = ( - 'integer' => 0x1000, - 'float' => 0x2000, - 'binary' => 0x4000, - 'q' => 0x8000, - 'qr' => 0x10000, + 'integer' => 0x1000, # HINT_NEW_INTEGER + 'float' => 0x2000, # HINT_NEW_FLOAT + 'binary' => 0x4000, # HINT_NEW_BINARY + 'q' => 0x8000, # HINT_NEW_STRING + 'qr' => 0x10000, # HINT_NEW_RE ); %ops = ( with_assign => "+ - * / % ** << >> x .", @@ -333,9 +333,9 @@ The following symbols can be specified in C directive: "**", "**=", "<<", "<<=", ">>", ">>=", "x", "x=", ".", ".=", For these operations a substituted non-assignment variant can be called if -the assignment variant is not available. Methods for operations "C<+>", -"C<->", "C<+=>", and "C<-=>" can be called to automatically generate -increment and decrement methods. The operation "C<->" can be used to +the assignment variant is not available. Methods for operations C<+>, +C<->, C<+=>, and C<-=> can be called to automatically generate +increment and decrement methods. The operation C<-> can be used to autogenerate missing methods for unary minus or C. See L<"MAGIC AUTOGENERATION">, L<"Calling Conventions for Mutators"> and @@ -355,10 +355,10 @@ arrays, C is used to compare values subject to C. "&", "^", "|", "neg", "!", "~", -"C" stands for unary minus. If the method for C is not +C stands for unary minus. If the method for C is not specified, it can be autogenerated using the method for -subtraction. If the method for "C" is not specified, it can be -autogenerated using the methods for "C", or "C<\"\">", or "C<0+>". +subtraction. If the method for C is not specified, it can be +autogenerated using the methods for C, or C<"">, or C<0+>. =item * I @@ -382,11 +382,11 @@ C<0+>. =item * I - "bool", "\"\"", "0+", + 'bool', '""', '0+', If one or two of these operations are not overloaded, the remaining ones can be used instead. C is used in the flow control operators -(like C) and for the ternary "C" operation. These functions can +(like C) and for the ternary C operation. These functions can return any arbitrary Perl value. If the corresponding operation for this value is overloaded too, that operation will be called again with this value. @@ -404,6 +404,9 @@ glob (which may require a stringification). The same overloading happens both for the I syntax C$varE> and I syntax C${var}E>. +B Even in list context, the iterator is currently called only +once and with scalar context. + =item * I '${}', '@{}', '%{}', '&{}', '*{}'. @@ -919,10 +922,7 @@ numeric value.) This prints: =head2 Two-face references Suppose you want to create an object which is accessible as both an -array reference and a hash reference, similar to the -L -builtin Perl type. Let's make it better than a pseudo-hash by -allowing index 0 to be treated as a normal element. +array reference and a hash reference. package two_refs; use overload '%{}' => \&gethash, '@{}' => sub { $ {shift()} };