A hash value can be updated, and sorted keys make the printed result predictable.

hash update Assigning through a hash key changes the stored value for that key.

Hash Update Count

color
hash_update_count.pl
Replay: real traced execution (multi-file project)
use strict;
use warnings;

my %counts = (
    red  => 2,
    blue => 1,
);
my $color = "blue";
$counts{$color} += 1;
my @keys = sort keys %counts;
my $key_list = join(",", @keys);
my $value = $counts{$color};

print "color=$color\n";
print "value=$value\n";
print "keys=$key_list\n";
use strict;
use warnings;

my %counts = (
    red  => 2,
    blue => 1,
);
my $color = "red";
$counts{$color} += 1;
my @keys = sort keys %counts;
my $key_list = join(",", @keys);
my $value = $counts{$color};

print "color=$color\n";
print "value=$value\n";
print "keys=$key_list\n";
use strict;
use warnings;

my %counts = (
    red  => 2,
    blue => 1,
);
my $color = "green";
$counts{$color} += 1;
my @keys = sort keys %counts;
my $key_list = join(",", @keys);
my $value = $counts{$color};

print "color=$color\n";
print "value=$value\n";
print "keys=$key_list\n";
  1. %counts ← 2, $color ← blue, $counts{$color} ← 2, @keys ← 2, $key_list ← blue,red

    4my %counts→ 2 = (5    red  => 2,6    blue => 1,7);8my $color→ blue = "blue"; #@color="red", "green"9$counts{$color}→ 2 += 1;10my @keys→ 2 = sort keys %counts2;11my $key_list→ blue,red = join(",", @keys2);12my $value→ 2 = $counts{$color}2;1314print "color=$colorblue\n";15print "value=$value2\n";16print "keys=$key_listblue,red\n";
    outputcolor=blue
    value=2
    keys=blue,red
  1. %counts ← 2, $color ← red, $counts{$color} ← 3, @keys ← 2, $key_list ← blue,red

    4my %counts→ 2 = (5    red  => 2,6    blue => 1,7);8my $color→ red = "red";9$counts{$color}→ 3 += 1;10my @keys→ 2 = sort keys %counts2;11my $key_list→ blue,red = join(",", @keys2);12my $value→ 3 = $counts{$color}3;1314print "color=$colorred\n";15print "value=$value3\n";16print "keys=$key_listblue,red\n";
    outputcolor=red
    value=3
    keys=blue,red
  1. %counts ← 2, $color ← green, $counts{$color} ← 1, @keys ← 3, $key_list ← blue,green,red

    4my %counts→ 2 = (5    red  => 2,6    blue => 1,7);8my $color→ green = "green";9$counts{$color}→ 1 += 1;10my @keys→ 3 = sort keys %counts3;11my $key_list→ blue,green,red = join(",", @keys3);12my $value→ 1 = $counts{$color}1;1314print "color=$colorgreen\n";15print "value=$value1\n";16print "keys=$key_listblue,green,red\n";
    outputcolor=green
    value=1
    keys=blue,green,red

Update One Count

  1. %counts starts with red => 2 and blue => 1.
  2. $color is blue.
  3. $counts{$color} += 1 changes blue from 1 to 2.
  4. Sorting keys prints them as blue,red. | Key | Start | After update | | --- | --- | --- | | blue | 1 | 2 | | red | 2 | 2 |

Exercise: hash_update_count.pl

Increase one hash count, sort the keys, and print the updated value