Come stampare hash in Perl

Nel linguaggio di programmazione Perl a volte si verifica la necessità di stampare il contenuto di un hash.

Ad esempio, un hash %h con il seguente contenuto:

my %h = (
    John => 'red',
    Alice => 'silver',
    Bob => 'yellow',
);

A seconda di ciò che si desidera, ci sono diversi modi come è possibile stampare hash.

L'uso di Data::Dumper

Nel caso in cui bisogno di vedere rapidamente che contiene in хеше, per questo è conveniente utilizzare il modulo Data::Dumper. Questo può tornare utile nel processo di sviluppo o eseguire il debug del programma.

Ecco un esempio di codice:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;
use Data::Dumper;

my %h = (
    John => 'red',
    Alice => 'silver',
    Bob => 'yellow',
);

print Dumper \%h;

Ecco cosa porterà questo programma:

$VAR1 = {
          'Bob' => 'yellow',
          'Alice' => 'silver',
          'John' => 'red'
        };

Hash conserva in sé non coppie ordinate di valori. Diversi programmi di avvio visualizza le coppie in ordine diverso.

L'uso di print

E se semplicemente passare hash in print?

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

my %h = (
    John => 'red',
    Alice => 'silver',
    Bob => 'yellow',
);

print %h;

Il programma visualizza una riga del tipo:

JohnredBobyellowAlicesilver

Visto che in questo caso print ha lo schermo insieme tutte le coppie chiave-valore di hash. Hash conserva in sé non coppie ordinate di valori. Diversi lanci il programma emetterà una diversa conclusione.

print e variabile $,

Se solo specificare print %h;, questo stamperà tutte le coppie chiave-valore insieme. È possibile chiedere perl inserire un simbolo tra gli elementi. Ad esempio, il carattere di nuova riga \n.

Per questo è necessario mettere questo simbolo in una variabile $,. Ecco il codice:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

my %h = (
    John => 'red',
    Alice => 'silver',
    Bob => 'yellow',
);

$, = "\n";

print %h;

Uno dei possibili risultati del programma (dati in хеше non sono ordinati, quindi diversi lanci di prelevare le coppie in ordine diverso):

Bob
yellow
Alice
silver
John
red

Ma questo metodo deve essere usato con cautela. Variabile $, — global. Se si cambia, quello che cambia per l'intero programma. In alcune situazioni ha senso o non utilizzare questo metodo, o mantenere il valore questa variabile in una variabile temporanea, e dopo print tornare al suo valore, ad esempio, in questo modo:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

my %h = (
    John => 'red',
    Alice => 'silver',
    Bob => 'yellow',
);

my $saved = $,;

$, = "\n";

print %h;

$, = $saved;

Ripetizione di хешу

Il più potente e flessibile per come visualizzare il contenuto di hash lo schermo è passare per tutti i valori del хеше e disattivare lo schermo in forma come si deve. Ecco uno degli esempi di come si può fare:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;
use feature qw(say);

my %h = (
    John => 'red',
    Alice => 'silver',
    Bob => 'yellow',
);

foreach my $name (sort keys %h) {
    say "$name $h{$name}";
}

L'output del programma è sempre lo stesso:

Alice silver
Bob yellow
John red

Per le coppie di valori in хеше ordine indeterminato, ma in questo programma viene utilizzato sort al fine per ritirare le chiavi in ordine alfabetico.

Temi correlati

Altri articoli