Of course we could, but why fix the calls when we can fix the subroutine itself ?
I filed a bug report : https://bugs.koha-community.org/bugzilla3/show_bug.cgi?id=19809 Le 14/12/2017 à 00:51, David Cook a écrit : > Alternatively, you could write: > > my $foo = Koha::Patrons->find("foo"); > my $hashref = { a => $foo, b => "bar" }; > > or > my $foo = Koha::Patrons->find("foo"); > my $hashref = { b => "bar" }; > $hashref->{a} = $foo if $foo; > > Personally, I'm not a fan of putting function calls in data structures. > > David Cook > Systems Librarian > Prosentient Systems > 72/330 Wattle St > Ultimo, NSW 2007 > Australia > > Office: 02 9212 0899 > Direct: 02 8005 0595 > > -----Original Message----- > From: koha-devel-boun...@lists.koha-community.org > [mailto:koha-devel-boun...@lists.koha-community.org] On Behalf Of Julian > Maurice > Sent: Thursday, 14 December 2017 1:57 AM > To: Marcel de Rooy <m.de.r...@rijksmuseum.nl> > Cc: koha-devel@lists.koha-community.org > Subject: Re: [Koha-devel] Bug 18539 - Forbid Koha::Objects->find calls in > list context > > Probably, but that's not my point. > > I understand why the previous code needed to be fixed, which is to avoid > that > > { a => Koha::Patrons->find("foo"), b => "bar" } > > would result in { a => "b", "bar" => undef } > > My question is: why the solution to this problem was to forbid calls in list > context while we could simply return an explicit undef? > It forces us to write 'scalar' in front of a call that should always return > a single value, and in my opinion it's a "code smell" > > Le 13/12/2017 à 15:29, Marcel de Rooy a écrit : >> i forgot to add scalar in the second.. >> >> probably you should >> >> if( $a = xxx->find ) >> >> push @b, $a >> >> >> ---------------------------------------------------------------------- >> -- >> *Van:* Julian Maurice <julian.maur...@biblibre.com> >> *Verzonden:* woensdag 13 december 2017 15:20:34 >> *Aan:* Marcel de Rooy >> *Onderwerp:* Re: [Koha-devel] Bug 18539 - Forbid Koha::Objects->find >> calls in list context >> >> This particular line will work (only the first, in the second, find is >> still called in list context), but @a would contain one element >> (undef) and the example code given by Jonathan will also fail, whether >> we call find in list context or not. >> >> Le 13/12/2017 à 15:12, Marcel de Rooy a écrit : >>> Are you sure ? >>> >>> push @a, scalar Koha..->find >>> >>> or @a = ( ...->find ) >>> >>> >>> should work imo >>> >>> --------------------------------------------------------------------- >>> --- >>> *Van:* koha-devel-boun...@lists.koha-community.org >>> <koha-devel-boun...@lists.koha-community.org> namens Julian Maurice >>> <julian.maur...@biblibre.com> >>> *Verzonden:* woensdag 13 december 2017 15:07:11 >>> *Aan:* Jonathan Druart >>> *CC:* koha-devel@lists.koha-community.org >>> *Onderwerp:* Re: [Koha-devel] Bug 18539 - Forbid Koha::Objects->find >>> calls in list context >>> >>> Ok, but the proposed fix doesn't fix this code: >>> >>> @a = scalar Koha::Patrons->find('foo'); if (@a) { # still equals to 1 >>> say $a[0]->borrowernumber; # still BOOM } >>> >>> And yes, that was the link ;) >>> >>> Le 13/12/2017 à 14:58, Jonathan Druart a écrit : >>>> Hi Julian, >>>> >>>> >>>>> @a = Koha::Patrons->find('foo'); # would result in @a = (undef) >>>> >>>> And that leads to issues: >>>> if ( @a ) { # = 1 >>>> say $a[0]->borrowernumber; # BOOM >>>> } >>>> >>>> See also https://perlmaven.com/how-to-return-undef-from-a-function >>>> (was it the link you were talking about?) >>>> >>>> Cheers, >>>> Jonathan >>>> >>>> On Wed, 13 Dec 2017 at 10:34 Julian Maurice >>>> <julian.maur...@biblibre.com <mailto:julian.maur...@biblibre.com>> > wrote: >>>> >>>> Hi developers, >>>> >>>> I stumbled upon a line of code recently and I can't figure out >>>> why it >>>> has be done this way. I hope you can help me :) >>>> >>>> The line in question is in Koha::Objects::find: >>>> >>>> croak 'Cannot use "->find" in list context' if wantarray; >>>> >>>> I read the two bugs (18539 and 18179) and the link given by >>>> Jonathan but >>>> I still don't understand why the call in list context has been >>>> forbidden. Why not simply return undef (an explicit undef) when >>>> no >>>> records have be found ? It would work as expected in scalar and >>>> list >>>> contexts. >>>> >>>> Here is a possible rewrite of 'find' to better explain what I mean: >>>> >>>> sub find { >>>> my ( $self, @pars ) = @_; >>>> >>>> my $object = undef; >>>> >>>> @pars = grep { defined } @pars; >>>> if (@pars) { >>>> my $result = $self->_resultset()->find(@pars); >>>> if ($result) { >>>> $object = >>>> $self->object_class()->_new_from_dbic($result); >>>> } >>>> } >>>> >>>> return $object; >>>> } >>>> >>>> @a = Koha::Patrons->find('foo'); # would result in @a = (undef) >>>> {a => K::P->find('foo'), b => 'bar'}; # would result in {a => >>>> undef, b >>>> => 'bar'} >>>> >>>> Please tell me what you think. >>>> >>>> -- >>>> Julian Maurice <julian.maur...@biblibre.com >>>> <mailto:julian.maur...@biblibre.com>> >>>> BibLibre >>>> _______________________________________________ >>>> Koha-devel mailing list >>>> Koha-devel@lists.koha-community.org >>>> <mailto:Koha-devel@lists.koha-community.org> >>>> >>>> http://lists.koha-community.org/cgi-bin/mailman/listinfo/koha-devel >>>> website : http://www.koha-community.org/ >>>> git : http://git.koha-community.org/ >>>> bugs : http://bugs.koha-community.org/ >>>> >>> >>> -- >>> Julian Maurice <julian.maur...@biblibre.com> BibLibre >>> _______________________________________________ >>> Koha-devel mailing list >>> Koha-devel@lists.koha-community.org >>> http://lists.koha-community.org/cgi-bin/mailman/listinfo/koha-devel >>> website : http://www.koha-community.org/ git : >>> http://git.koha-community.org/ bugs : http://bugs.koha-community.org/ >> >> -- >> Julian Maurice <julian.maur...@biblibre.com> BibLibre > > -- > Julian Maurice <julian.maur...@biblibre.com> BibLibre > _______________________________________________ > Koha-devel mailing list > Koha-devel@lists.koha-community.org > http://lists.koha-community.org/cgi-bin/mailman/listinfo/koha-devel > website : http://www.koha-community.org/ git : > http://git.koha-community.org/ bugs : http://bugs.koha-community.org/ > > -- Julian Maurice <julian.maur...@biblibre.com> BibLibre _______________________________________________ Koha-devel mailing list Koha-devel@lists.koha-community.org http://lists.koha-community.org/cgi-bin/mailman/listinfo/koha-devel website : http://www.koha-community.org/ git : http://git.koha-community.org/ bugs : http://bugs.koha-community.org/