in reply to A new perl {cough} feature?

This seems to be a bug in Data::Dumper. With the perl debugger (before the grep, thanks tye):

main::(-:1): my @matrix = (); DB<1> n main::(-:2): $matrix[2]->[3] = "What's goin' on?"; DB<1> n main::(-:3): grep {/Huh?/}@$_ for @matrix; DB<1> print @matrix ARRAY(0x8103f2c) DB<2> x @matrix 0 undef 1 undef 2 ARRAY(0x8103f2c) 0 empty slot 1 empty slot 2 empty slot 3 'What\'s goin\' on?' DB<3>

With Data::Denter:

Before grep: @ ? ? @ ? ? ? What's goin on? After grep: @ @ @ @ ? ? ? What's goin on?

... indicating undef (?) before the grep, as normal, and empty array refs (@) after the grep, as normal due to autovivification upon array dereference. Only Data::Dumper seems to get it wrong, or at least what seems to be wrong.

Replies are listed 'Best First'.
Re: Re: A new perl {cough} feature?
by Anarion (Hermit) on Feb 17, 2002 at 16:32 UTC
    Yes, but try this one:
    use Data::Denter; my @matrix = (); $matrix[2]->[3]= "What's goin on?"; print "Before grep:\n", Denter(\@matrix); #print grep{ /Huh?/ }@$_ for @matrix; print map { grep{ /Huh?/ }@$_ } @matrix; print "\nAfter grep:\n", Denter(\@matrix);


    Where is the bug then in Data::Dumper or in Data::Denter or in map, grep, for or autovivification?

    $anarion=\$anarion;

    s==q^QBY_^=,$_^=$[x7,print

Re: Re: A new perl {cough} feature?
by belg4mit (Prior) on Feb 17, 2002 at 17:28 UTC
    It's not unreasonable that it is a Data::Dumper flaw. Recently I was using Data::Dumper on some not so complex structures and some of the values it output were array-refs (where no array-ref ought to live) i.e. it output the scalar form of the array-ref, not even an evalable form.

    --
    perl -pe "s/\b;([st])/'\1/mg"

(tye)Re: A new perl {cough} feature?
by tye (Sage) on Feb 18, 2002 at 14:16 UTC

    Quick clarification: Note that the first set of output is from before grep gets run. It is the grep that autovivifies those empty array references.

            - tye (but my friends call me "Tye")