Beefy Boxes and Bandwidth Generously Provided by pair Networks
Think about Loose Coupling
 
PerlMonks  

Re: Pseudo-hash intrusion...

by stephen (Priest)
on Jun 21, 2001 at 19:46 UTC ( #90421=note: print w/ replies, xml ) Need Help??


in reply to Pseudo-hash intrusion...

Hmm... something's a little odd here. Pseudo-hashes are arrayrefs with a hash associating fieldname with array index as the first member. If @$foo contained a bunch of arrayrefs which contained hashrefs, the error would make sense to me, since Perl might see the first member of $a and $b and get confused.

Here, though, you say that @$foo contains hashrefs. Therefore $a and $b should both be hashrefs, and there shouldn't be any confusion on Perl's part. So either A. there's a serious bug in Perl, or B. the data in @$foo is not what you think it should be. If you can isolate the behavior into a small standalone program and post it here, then I'll be more willing to believe it's a bug in Perl. :)

stephen


Comment on Re: Pseudo-hash intrusion...
Replicated the pseudo-hash mis-error statement...
by dragonchild (Archbishop) on Jun 21, 2001 at 19:58 UTC
    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.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://90421]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others studying the Monastery: (8)
As of 2015-07-04 13:49 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (60 votes), past polls