[Dbix-class] String evaluation in resultset->next
    Peter Rabbitson 
    rabbit+dbic at rabbit.us
       
    Tue Nov 18 11:23:58 GMT 2014
    
    
  
On 11/18/2014 10:58 AM, Christian Lackas wrote:
> Hi Everybody,
>
> I frequently use
>
>      use overload '""' => sub { shift->toString }, fallback => 1;
>
> for my Row classes (via a role).
>
> ...
>
> However, besides the warnings, I am also wondering if there is a
> performance penalty by using stringify without actually needing it.
>
This part of your question deals with the main problem - you have 
defined *only* stringification in combination with fallback, so some 
things are autogenerated (including boolification as described in 
https://metacpan.org/pod/overload#Magic-Autogeneration and also the last 
sentence of 
https://metacpan.org/pod/overload#Minimal-Set-of-Overloaded-Operations). 
This has nothing to do with next(): consider the following "one-liner"
~$ perl -MScalar::Util -e '
   sub refdesc ($) {
     sprintf "%s%s(0x%x)",
       ( defined( $_[1] = Scalar::Util::blessed $_[0]) ? "$_[1]=" : "" ),
       Scalar::Util::reftype $_[0],
       Scalar::Util::refaddr($_[0]),
     ;
   }
   {
     package One;
     use overload
       bool => sub { warn "Called boolification on " . ::refdesc $_[0]},
       q("") => sub { warn "Called stringification on " . ::refdesc $_[0] },
       fallback => 1
     ;
   }
   {
     package Two;
     use overload
       q("") => sub { warn "Called stringification on " . ::refdesc $_[0] },
       fallback => 1
     ;
   }
   {
     package Three;
     use overload
       q("") => sub { warn "Called stringification on " . ::refdesc $_[0] },
     ;
   }
   {
     package Four;
     use overload
       q("") => sub { warn "Called stringification on " . ::refdesc $_[0] },
       fallback => 0,
     ;
   }
   for my $obj ( map { bless {}, $_ } qw(One Two Three Four) ) {
     my $is_false = !$obj;
   }
'
> Also, I believe this next-behavior is also responsible for a 'deep
> recursion' error I see in a more complex Template Toolkit usage (at
> least I see similar warnings and using a for loop worked around the
> issue; have not fully investigated this yet, though).
Note in the script above I did not write:
   ... q("") => sub { warn "Called stringification on $_[0]" }
but instead added a sub to properly format the ref without touchinbg the 
overloads.
I am not 100% sure but you may be facing a similar issue - you are 
stringifying within your stringification sub.
Cheers
    
    
More information about the DBIx-Class
mailing list