perl sorting data-dump

¿Cómo se ordena la salida de Data:: Dumper(perl)?



sorting data-dump (5)

Quiero volcar los valores de mi objeto en mi navegador, pero sigue imprimiendo las claves fuera de servicio. ¿Cómo puedo descargar las claves en orden (recursivo)?

use Data::Dumper; sub dump{ my($self) = @_; print "<pre>",Dumper($self),"</pre>"; }


Configure $Data::Dumper::Sortkeys = 1 para obtener el orden de clasificación predeterminado de Perl. Si desea personalizar el pedido, configure $Data::Dumper::Sortkeys en una referencia a una subrutina que recibe una referencia a un hash como entrada, y emite una referencia a la lista de las claves del hash en el orden que desee. a aparecer.

# sort keys $Data::Dumper::Sortkeys = 1; print Dumper($obj); # sort keys in reverse order - use either one $Data::Dumper::Sortkeys = sub { [reverse sort keys %{$_[0]}] }; $Data::Dumper::Sortkeys = sub { [sort {$b cmp $a} keys %{$_[0]}] }; print Dumper($obj);


De la documentación Data::Dumper :

$Data::Dumper::Sortkeys or $OBJ->Sortkeys([NEWVAL]) Can be set to a boolean value to control whether hash keys are dumped in sorted order. A true value will cause the keys of all hashes to be dumped in Perl''s default sort order. Can also be set to a subroutine reference which will be called for each hash that is dumped. In this case Data::Dumper will call the subroutine once for each hash, passing it the reference of the hash. The purpose of the subroutine is to return a reference to an array of the keys that will be dumped, in the order that they should be dumped. Using this feature, you can control both the order of the keys, and which keys are actually used. In other words, this subroutine acts as a filter by which you can exclude certain keys from being dumped. Default is 0, which means that hash keys are not sorted.


Puede establecer la variable $Data::Dumper::Sortkeys en un valor verdadero para obtener una clasificación predeterminada:

use Data::Dumper; $Data::Dumper::Sortkeys = 1; my $hashref = { bob => ''weir'', jerry =>, ''garcia'', nested => {one => ''two'', three => ''four''}}; print Dumper($hashref), "/n";

o coloque una subrutina allí para ordenar las teclas como lo desee.


Respuesta corta para el impaciente

Use Data :: Dumper :: Concise en su lugar. Clasifica tus llaves. Úselo así:

use Data::Dumper::Concise; my $pantsToWear = { pony => ''jeans'', unicorn => ''corduroy'', marsupials => {kangaroo => ''overalls'', koala => ''shorts + suspenders''}, }; warn Dumper($pantsToWear);

Más palabras para los curiosos

Data :: Dumper :: Concise también le brinda una salida más compacta y fácil de leer.

Tenga en cuenta que Data :: Dumper :: Concise es Data :: Dumper con valores de configuración predeterminados razonables establecidos para usted. Es equivalente a usar Data :: Dumper de esta manera:

use Data::Dumper; { local $Data::Dumper::Terse = 1; local $Data::Dumper::Indent = 1; local $Data::Dumper::Useqq = 1; local $Data::Dumper::Deparse = 1; local $Data::Dumper::Quotekeys = 0; local $Data::Dumper::Sortkeys = 1; warn Dumper($var); }


Para aquellos que quieren ordenar un hashref por valor cuando lo imprimen con Data::Dumper , aquí hay un ejemplo:

$Data::Dumper::Sortkeys = sub { # Using <=> to sort numeric values [ sort { $_[0]->{$a} <=> $_[0]->{$b} } keys %{ $_[0] } ] };

Y aquí hay una alternativa más legible, haciendo lo mismo pero con una variable para mantener el hash. Es menos eficiente, pero para pequeños hashes, algunos pueden encontrarlo más agradable:

$Data::Dumper::Sortkeys = sub { my %h = %{$_[0]}; # cmp for string comparisons [ sort { $h{$a} cmp $h{$b} } keys %h ]; };