Data::Dumper: auto reference

Jiri Polcar polcar na physics.muni.cz
Pátek Květen 23 09:48:32 CEST 2008


    Ciao,

narazil jsem na jednu zahadu pri pouzit funkce Dumper z modulu
Data::Dumper:

    use Data::Dumper;

    $pole = [ qw(jedna dve tri) ];
    $struct = { 'key1' => $pole, 'key2' => $pole };

    print Dumper( $struct );

vrati:

    $VAR1 = {
              'key2' => [
                          'jedna',
                          'dve',
                          'tri'
                        ],
              'key1' => $VAR1->{'key2'}
            };


coz je v poradku. Kdyz ale nastavim:

    $Data::Dumper::Terse = 1;

dostanu na vystupu:

        {
          'key2' => [
                      'jedna',
                      'dve',
                      'tri'
                    ],
          'key1' => $VAR1->{'key2'}
        }

Coz uz samozrejmne nesezere eval, protoze $VAR1 neexistuje. Pred timto
varuje u dokumentace:


 ?   $Data::Dumper::Terse  or  $OBJ->Terse([NEWVAL])

     When set, Data::Dumper will emit single, non-self-referential
     values as atoms/terms rather than statements.  This means that the
     $VARn names will be avoided where possible, but be advised that
     such output may not always be parseable by "eval".

Ale zaroven vystup neni non-self-referential. Otazka zni, jak prinutim
Dumper, aby ve vytupu nepouzival $VARn.

S pozdravem,
Jiri


Další informace o konferenci Perl