var_export var_dump salto print_r print linea entre dump_var diferencias all php perl debugging

salto - var_dump die php



¿Cuál es el equivalente de Perl a print_r() de PHP? (5)

Como suele suceder con Perl, es posible que prefiera soluciones alternativas al venerable Data :: Dumper:

  • Data::Dump::Streamer tiene una salida más terser que Data :: Dumper, y también puede serializar algunos datos mejor que Data :: Dumper,
  • YAML (o Yaml::Syck , u otro módulo YAML) genera los datos en YAML, que es bastante legible.

Y, por supuesto, con el depurador, puede mostrar cualquier variable con el comando ''x''. Me gusta especialmente la forma '' x 2 $complex_structure '' donde 2 (o cualquier número) le dice al depurador que muestre solo 2 niveles de datos anidados.

Encuentro que print_r en PHP es extremadamente útil, pero me pregunto si hay algo remotamente equivalente en Perl.


Fui en busca de lo mismo y encontré esta encantadora pequeña función de Perl , explícitamente pensada para generar resultados como print_r ().

El autor del guión estaba haciendo su pregunta exacta en un foro here .

print objectToString($json_data);

Da esta salida:

HASH { time => 1233173875 error => 0 node => HASH { vid => 1011 moderate => 0 field_datestring => ARRAY { HASH { value => August 30, 1979 } } field_tagged_persons => ARRAY { HASH { nid => undef } } ...and so on...


Tenga en cuenta que @tchrist recomienda Data::Dump over Data::Dumper . No era consciente de ello, pero por lo que parece, parece que es mucho más fácil de usar y produce resultados más atractivos y más fáciles de interpretar.

Data::Dumper :

Un fragmento de los ejemplos que se muestran en el enlace de arriba.

use Data::Dumper; package Foo; sub new {bless {''a'' => 1, ''b'' => sub { return "foo" }}, $_[0]}; package Fuz; # a weird REF-REF-SCALAR object sub new {bless /($_ = / ''fu/'z''), $_[0]}; package main; $foo = Foo->new; $fuz = Fuz->new; $boo = [ 1, [], "abcd", /*foo, {1 => ''a'', 023 => ''b'', 0x45 => ''c''}, //"p/q/'r", $foo, $fuz]; ######## # simple usage ######## $bar = eval(Dumper($boo)); print($@) if $@; print Dumper($boo), Dumper($bar); # pretty print (no array indices) $Data::Dumper::Terse = 1; # don''t output names where feasible $Data::Dumper::Indent = 0; # turn off all pretty print print Dumper($boo), "/n"; $Data::Dumper::Indent = 1; # mild pretty print print Dumper($boo); $Data::Dumper::Indent = 3; # pretty print with array indices print Dumper($boo); $Data::Dumper::Useqq = 1; # print strings in double quotes print Dumper($boo);


Una alternativa a Data::Dumper que no produce código Perl válido, sino un formato más skimmable (igual que el comando x del depurador Perl) es Dumpvalue . También consume mucha menos memoria.

Además, existe Data::Dump::Streamer , que es más preciso en varios casos de bordes y esquinas que Data::Dumper .


Utilizo Data::Dump , su salida es un poco más limpia que Data :: Dumper''s (no $ VAR1), proporciona atajos rápidos y también intenta DTRT, es decir, imprime en STDERR cuando se invoca en contexto vacío y devuelve el volcado cadena cuando no.