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