Sådan udskrives en hash i Perl

I programmeringssproget Perl er nogle gange nødvendigt for at udskrive indholdet af hash.

For eksempel er der en hash %h med følgende indhold:

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

Alt på hvad du vil, der er et par forskellige måder for at udskrive hash.

Brug Data::Dumper

Hvis du har brug for hurtigt at se, hvad der er indeholdt i hash, så er denne det er praktisk at bruge modulet Data::Dumper. Dette kan være nyttigt i processen med udvikling eller fejlsøgning i et program.

Her er et eksempel kode:

▶ Run
#!/usr/bin/perl

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

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

print Dumper \%h;

Det er, hvad vil tage dette program:

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

Hash-butikker ikke har bestilt par af værdier. Forskellige startup programmer vil output-par i en anden rækkefølge.

Brug print

Hvad sker der, hvis du bare passere hash i print?

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

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

print %h;

Programmet viser en linje af formen:

JohnredBobyellowAlicesilver

Det er tydeligt, at i dette tilfælde print bragt til skærmen sammen alle par nøgle-værdi af hash. Hash-butikker ikke har bestilt par af værdier. Forskellige kørsler af programmet vil give de forskellige output.

print og variabel $,

Hvis du skal blot angive print %h;, vil det udskrive alle nøgle og værdi sammen. Du kan spørge perl til at indsætte et symbol mellem elementer. For eksempel, den nye linje-tegn \n.

For dette er du nødt til at sætte dette symbol i en særlig variabel $,. Her er koden:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

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

$, = "\n";

print %h;

En af de mulige resultater af programmet (data i hash er ikke bestilt, så forskellige kørsler, vil output-par i en anden rækkefølge):

Bob
yellow
Alice
silver
John
red

Men denne metode er nødt til at bruge omhyggeligt. Variabel $, — global. Hvis er du på skiftende det ændringer, ændringer for hele programmet. I nogle situationer giver mening ikke at bruge denne metode, enten for at gemme værdien denne variabel er en midlertidig variabel, og derefter print til at returnere værdien i det, for eksempel således:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

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

my $saved = $,;

$, = "\n";

print %h;

$, = $saved;

Iteration over hash

Den mest kraftfulde og fleksible måde at output-indholdet i hash på skærmen gå gennem alle de værdier, der er i hash-og print ud på skærmen efter behov. Her er et eksempel på hvordan det kan gøres:

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

Output af programmet er altid den samme:

Alice silver
Bob yellow
John red

For værdi-par i hash-for er udefineret, men dette program bruger sortfor for at vise taster i alfabetisk rækkefølge.

Relaterede emner

Andre artikler