After thinking through the situation, it turns out that this is the exact model for what I was doing in the larger script. Note the re-definition of $sortfunc.
Now, yes I know that there's a definite package-scoping problem, but I'm posting this to see if this is actually a potential problem with the 5.6.0 interpreter and pseudohashes that might come out in other situations, not just one where the programmer (me) is making a scoping error.
scorpion:/export/home/kinyonro-> cat abcd
#!/usr/local/bin/perl
use strict;
use 5.6.0;
use efgh qw(do_thing);
######################################################################
+#########
my $foo = [ [ { blah => 'a' }, {blah => 'b'}, ],
[ { blah => 'e' }, {blah => 'f'}, ],
[ { blah => 'c' }, {blah => 'd'}, ],
];
my $sortfunc = sub { $a->[0]->{blah} cmp $b->[0]->{blah} };
my @bar = do_thing($foo, $sortfunc);
for my $lref (@bar) {
for my $hash (@$lref) {
print "$_ => $hash->{$_}\n" for keys %$hash;
}
print "\n";
}
######################################################################
+#########
$foo = [ { blah => 'd' }, { blah => 'b' }, { blah => 'c' }, ];
$sortfunc = sub { $a->{blah} cmp $b->{blah} };
@bar = do_thing($foo, $sortfunc);
for my $hash (@bar) {
print "$_ => $hash->{$_}\n" for keys %$hash;
print "\n";
}
scorpion:/export/home/kinyonro-> cat efgh.pm
use strict;
use 5.6.0;
package efgh;
use Exporter;
our @ISA = qw(Exporter);
our @EXPORT_OK = qw(do_thing);
use Data::Dumper;
sub do_thing {
my ($data, $func) = @_;
print Data::Dumper->Dump([$data]);
my @bar = sort $func @$data;
print Data::Dumper->Dump([@bar]);
return @bar;
}
1;
scorpion:/export/home/kinyonro-> abcd
$VAR1 = [
[
{
'blah' => 'a'
},
{
'blah' => 'b'
}
],
[
{
'blah' => 'e'
},
{
'blah' => 'f'
}
],
[
{
'blah' => 'c'
},
{
'blah' => 'd'
}
]
];
$VAR1 = [
{
'blah' => 'a'
},
{
'blah' => 'b'
}
];
$VAR2 = [
{
'blah' => 'e'
},
{
'blah' => 'f'
}
];
$VAR3 = [
{
'blah' => 'c'
},
{
'blah' => 'd'
}
];
blah => a
blah => b
blah => e
blah => f
blah => c
blah => d
$VAR1 = [
{
'blah' => 'd'
},
{
'blah' => 'b'
},
{
'blah' => 'c'
}
];
No such pseudo-hash field "blah" at abcd line 32.
|