gnupod - can't use hash as reference.

Steve Roome me at stephenroome.com
Mon Apr 29 20:09:26 UTC 2019


Hi all, sorry for the noise here, my pkg installed gnupod is apparently
maintained by ports@

It is: gnupod-0.99.8_3 on: 12.0-RELEASE-p3 GENERIC  amd64

Perl for me is: v5.28.1

For the last few years any use of gnupod_addsong.pl has always immediately
crashed like so:

Can't use 'defined(@array)' (Maybe you should just omit the defined()?) at
/usr/local/lib/perl5/site_perl/GNUpod/XMLhelper.pm line 362.
Compilation failed in require at /usr/local/bin/gnupod_addsong.pl line 25.
BEGIN failed--compilation aborted at /usr/local/bin/gnupod_addsong.pl line
25.

As suggested, I do remove the wrapping defined() from XMLhelper.pm:

--- /usr/local/lib/perl5/site_perl/GNUpod/XMLhelper.pm.orig     2019-04-29
20:45:40.054385000 +0100
+++ /usr/local/lib/perl5/site_perl/GNUpod/XMLhelper.pm  2019-04-29
20:45:50.724704000 +0100
@@ -359,7 +359,7 @@
                        print OUT " </smartplaylist>\n";
                }
                elsif(my $phr = get_plpref($current_plname)) { #plprefs
found..
-                       if
(defined(@{$XDAT->{playlists}->{data}->{$current_plname}})) { #the playlist
is not empty
+                       if
(@{$XDAT->{playlists}->{data}->{$current_plname}}) { #the playlist is not
empty
                                print OUT "\n ".mkfile({playlist=>$phr},
{return=>1,noend=>1})."\n";

foreach(@{$XDAT->{playlists}->{data}->{$current_plname}}) {
                                        print OUT "   $_\n";


It then fails with:

Can't use a hash as a reference at
/usr/local/lib/perl5/site_perl/GNUpod/FileMagic.pm line 365.
Compilation failed in require at /usr/local/bin/gnupod_addsong.pl line 27.
BEGIN failed--compilation aborted at /usr/local/bin/gnupod_addsong.pl line
27.

There are three other similar hashes as references issues, and so I patch
FileMagic as follows:

--- /usr/local/lib/perl5/site_perl/GNUpod/FileMagic.pm.orig     2018-04-25
23:49:44.587365000 +0100
+++ /usr/local/lib/perl5/site_perl/GNUpod/FileMagic.pm  2019-04-29
20:50:27.565552000 +0100
@@ -362,7 +362,7 @@
                foreach (keys(%{$in})) {
                        my $kvp = __flatten($_, $exclude); # key
                        next if !defined($kvp);
-                       my $v = __flatten(%{$in}->{$_}, $exclude); # value
+                       my $v = __flatten(%{{$in}->{$_}}, $exclude); # value
                        $kvp .= " : ".$v     if (defined($v) && ("$v" ne
""));
                        push @out, $kvp;
                }
@@ -418,9 +418,10 @@
        my $case = "check";

        if (ref($options) eq "HASH") {
-               $joinby = %{$options}->{joinby}        if
defined(%{$options}->{joinby});
-               $wspace = lc(%{$options}->{wspace})    if
defined(%{$options}->{wspace});
-               $case   = lc(%{$options}->{case})      if
defined(%{$options}->{case});
+               my %hh = %$options;
+               $joinby = $hh{joinby}        if $hh{joinby};
+               $wspace = lc($hh{wspace})    if $hh{wspace};
+               $case   = lc($hh{case})      if $hh{case};
        }
        my $merged = "";



This then makes gnupod work for me, and I can put music on my ipod once
again.

This problem has hampered me for a while, but I've not supplied a patch
sooner
and I've not done them as attachments either as I'm no longer sure of my
perl-fu
and I've a feeling that possibly this ought to be fixed differently.

Hope this is useful,

Steve Roome


More information about the freebsd-ports mailing list