[Koha-bugs] [Bug 25516] New: Item/pickup_locations wantarray removed, so dies on Perl >=5.24 where "autoderef" feature absent
bugzilla-daemon at bugs.koha-community.org
bugzilla-daemon at bugs.koha-community.org
Fri May 15 17:10:19 CEST 2020
https://bugs.koha-community.org/bugzilla3/show_bug.cgi?id=25516
Bug ID: 25516
Summary: Item/pickup_locations wantarray removed, so dies on
Perl >=5.24 where "autoderef" feature absent
Change sponsored?: ---
Product: Koha
Version: master
Hardware: All
OS: All
Status: NEW
Severity: normal
Priority: P5 - low
Component: Hold requests
Assignee: stalkernoid at gmail.com
Reporter: nugged at gmail.com
QA Contact: testopia at bugs.koha-community.org
CC: gmcharlt at gmail.com, slavashishkin at gmail.com
After last updates, until around May 11, "wantarray" in sub pickup_locations
was removed, but it might be hidden on Perls before v5.24, because there was
autoderef experimental feature
(https://www.effectiveperlprogramming.com/2010/11/use-array-references-with-the-array-operators/),
the feature removed in Perl v5.24, and Ubuntu 16.04 has Perl v5.22, Ubuntu
18.04 has Perl v5.26.
Since newer Perls it will definitely produce the error because now it uses
$arr_reference as a single item and maps over it once, and the process dies
with "no method" or whatever. There might be other places in the code that uses
this v5.14-5.24 feature for example to keys, map, grep $arr_reference.
The place I bumped in:
1. On the clean devenv after “reset_all” go to
/cgi-bin/koha/admin/smart-rules.pl and press “Save” button on “Default
checkout, hold and return policy” to save the empty record (GUI allows that), –
this is needed to have in the table “circulation_rule” key
“hold_fulfillment_policy” appeared with empty string value so code will reach
the right place.
Another option to have the same “hold_fulfillment_policy” empty string is to
reset DB and go through onboarding.pl (and how I found). So, after onboarding,
you don’t ever need to save the empty record, it will be filled automatically.
To check:
SELECT rule_name, rule_value
FROM circulation_rules WHERE rule_name='hold_fulfillment_policy'
it produces:
"hold_fulfillment_policy", ""
2. open item record
/cgi-bin/koha/reserve/request.pl?biblionumber=1&borrowernumber=1 - it produced
the bug:
Software error:
Can't call method "unblessed" on unblessed reference at ../reserve/request.pl
line 581.
The code from request.pl line 581:
```
$item->{pickup_locations} = join( ', ',
map { $_->unblessed->{branchname} }
Koha::Items->find($itemnumber)
->pickup_locations( { patron => $patron } ) );
$item->{pickup_locations_code} = join( ',',
map { $_->unblessed->{branchcode} }
Koha::Items->find($itemnumber)
->pickup_locations( { patron => $patron } ) );
```
and that's because sub pickup_locations (recent changes, where wantarray
removed, so might be more places) now does this:
return \@pickup_locations;
Yet it might work on Perl <5.24.
Peter: please search through code where we might have similar issues,
and meanwhile, provide a patch for the current one above.
--
You are receiving this mail because:
You are watching all bug changes.
More information about the Koha-bugs
mailing list