Jak wydrukować hash w Perl

W języku programowania Perl czasami występuje konieczność wydrukować zawartość mieszania.

Na przykład, istnieje hash %h o następującej treści:

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

W zależności od tego, co jest wymagane, istnieje kilka różnych sposobów, jak to możliwe wydrukować hesh.

Korzystanie z Data::Dumper

W przypadku, gdy trzeba szybko sprawdzić, co znajduje się w хеше, to dla tego wygodny w użyciu moduł Data::Dumper. To może się przydać w trakcie opracowywania lub debugowania programu.

Oto przykład kodu:

▶ Run
#!/usr/bin/perl

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

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

print Dumper \%h;

Oto co wyświetla ten program:

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

Hesh przechowuje w sobie nie uporządkowane pary wartości. Różne uruchamianie programu wyświetli pary w różnym porządku.

Korzystanie z print

A co się stanie, jeśli po prostu przekazać hash w print?

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

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

print %h;

Program wyświetla jedną linię do następującego:

JohnredBobyellowAlicesilver

Widać, że w tym przypadku print wyprowadził na ekran płynnie wszystkie pary klucz-wartość z mieszania. Hesh przechowuje w sobie nie uporządkowane pary wartości. Różne uruchomienia programu będą wydawać różne wnioski.

print i zmienna $,

Jeśli po prostu określić print %h;, to wydrukuje wszystkie pary klucz-wartość płynnie. Można zapytać perl wstawić jakiś znak między elementami. Na przykład, znak nowej linii \n.

Do tego trzeba umieścić ten symbol w specjalną zmienną $,. Oto kod:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

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

$, = "\n";

print %h;

Jeden z możliwych wyników działania programu (dane w хеше nie są uporządkowane, więc różne starty będą wyprowadzać pary w różnej kolejności):

Bob
yellow
Alice
silver
John
red

Ale sposób ten należy stosować ostrożnie. Zmienna $, — globalna. Jeśli można ją zmienia, to zmienia się dla całego programu. W niektórych sytuacjach to ma sens, albo w ogóle nie używać w taki sposób albo zapisać wartość tej zmiennej tymczasowej zmiennej, a po print odzyskać w niej wartość, na przykład w taki sposób:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

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

my $saved = $,;

$, = "\n";

print %h;

$, = $saved;

Iteracja po хешу

Najbardziej wydajny i elastyczny sposób jak wyświetlić zawartość mieszania na ekran — to przejść po wszystkich wartości w хеше i wyprowadzić na ekran w postaci jak trzeba. Oto jeden z przykładów jak można to zrobić:

▶ 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}";
}

Wyjście programu jest zawsze jeden i ten sam:

Alice silver
Bob yellow
John red

Dla par wartości w хеше kolejność неопределен, ale w tym programie jest używany sort do aby wyświetlić klucze w kolejności alfabetycznej.

Tematy pokrewne

Inne artykuły