[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: debhelper upstream should correct the perl from "use v5.24;" into "use v5.28;".



On Wed, 2021-05-26 at 20:05 +0100, Sérgio Basto wrote:
> Hi, 
> debhelper-devel ML doesn't exist anymore, please let me know if I
> should report this in other place . 
> 
> I can't build debhelper on Centos epel 8, which have Perl 5.26.3
> 

I forgot to mention from changelog of debhelper-13.1 "Dh_Lib.pm:
Require perl v5.24 (available in Debian oldstable) to enable more
modern features. "
But seems this is not correct, it needs Perl 5.28.0

> fedpkg clone debhelper
> cd debhelper
> fedpkg srpm && mock -r epel-8-x86_64  --no-clean --rebuild debhelper-
> 13.3.4-1.fc35.src.rpm 
> 
> and in epel8 build ends with
> "Initialization of state variables in list context currently forbidden
> at /builddir/build/BUILD/debhelper-
> 13.3.4/lib/Debian/Debhelper/Dh_Lib.pm line 2021, near");" "
> 
> Petr wrote : 
> perl has a "splain" tool which explains the compiler errors and
> warnings:
> 
> $ splain
> /usr/bin/splain: Reading from STDIN
> Initialization of state variables in list context currently forbidden
> at /home/test/fedora/debhelper/debhelper-
> 13.3.4/lib/Debian/Debhelper/Dh_Lib.pm line 2021, near ");"
> Initialization of state variables in list context currently forbidden
> at
>         /home/test/fedora/debhelper/debhelper-
> 13.3.4/lib/Debian/Debhelper/Dh_Lib.pm line 2021, near ");" (#1)
>     (F) state only permits initializing a single scalar variable, in
> scalar
>     context.  So state $a = 42 is allowed, but not state ($a) = 42.  To
> apply
>     state semantics to a hash or array, store a hash or array reference
> in a
>     scalar variable.
> 
> What do we have at the line 2021?:
> 
>         state %rrr = map { $_ => 1 } split(' ', $rrr_env);
> 
> That's it. perl 5.26.3 does not support "state" declaration for hashes
> (%err).
> Here is a one-line reproducer:
> 
> $ perl -e 'use v5.24; sub foo {state %rrr = map { $_ => 1 } split(q{ },
> q{});}'
> Initialization of state variables in list context currently forbidden
> at -e line 1, near ");"
> Execution of -e aborted due to compilation errors.
> 
> Which can be reduced to:
> 
> $ perl -e 'use v5.24; state %rrr = ();'
> Initialization of state variables in list context currently forbidden
> at -e line 1, near ");"
> Execution of -e aborted due to compilation errors.
> 
> Please note that the "use v5.24;" statement is taken from debhelper
> code.
> It's obviously an upstream bug. The code is not valid syntax for perl
> 5.24.
> 
> The state support for non-scalar types was implemented in Perl 5.28.0
> (see
> "perldoc perl5280delta" command output):
> 
>   Initialisation of aggregate state variables
>     A persistent lexical array or hash variable can now be initialized,
> by
>     an expression such as "state @a = qw(x y z)". Initialization of a
> list
>     of persistent lexical variables is still not possible.
> 
> You should reach out debhelper upstream to correct the "use v5.24;"
> into "use
> v5.28;". Or you can ask them to refactor the code to support perl 5.26.
> 
> 
> 
> Thanks ,

-- 
Sérgio M. B.


Reply to: