Read key-value text back into direct scalar lookups.

decode-pairs Decoding splits serialized text into fields that code can inspect.

Decode Pairs

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

my $wanted = "name";
my $encoded = "name=Ada;role=admin";
my %fields;

for my $pair (split /;/, $encoded) {
    my ($key, $value) = split /=/, $pair;
    $fields{$key} = $value;
}

my $result = exists $fields{$wanted} ? $fields{$wanted} : "none";

print "wanted=$wanted\n";
print "result=$result\n";
print "count=" . scalar(keys %fields) . "\n";
use strict;
use warnings;

my $wanted = "role";
my $encoded = "name=Ada;role=admin";
my %fields;

for my $pair (split /;/, $encoded) {
    my ($key, $value) = split /=/, $pair;
    $fields{$key} = $value;
}

my $result = exists $fields{$wanted} ? $fields{$wanted} : "none";

print "wanted=$wanted\n";
print "result=$result\n";
print "count=" . scalar(keys %fields) . "\n";
use strict;
use warnings;

my $wanted = "missing";
my $encoded = "name=Ada;role=admin";
my %fields;

for my $pair (split /;/, $encoded) {
    my ($key, $value) = split /=/, $pair;
    $fields{$key} = $value;
}

my $result = exists $fields{$wanted} ? $fields{$wanted} : "none";

print "wanted=$wanted\n";
print "result=$result\n";
print "count=" . scalar(keys %fields) . "\n";
  1. $wanted ← name, $encoded ← name=Ada;role=admin, %fields ← 0

    4my $wanted→ name = "name"; #@wanted="role", "missing"5my $encoded→ name=Ada;role=admin = "name=Ada;role=admin";6my %fields→ 0;
  2. $key ← name, $value ← Ada, $fields{$key} ← Ada

    pass 1 of 2
    8for my $pairname=Ada (split /;/, $encodedname=Ada;role=admin) {9    my ($key→ name, $value→ Ada) = split /=/, $pairname=Ada;10    $fields{$key}→ Ada = $valueAda;11}
  3. $key ← role, $value ← admin, $fields{$key} ← admin

    pass 2 of 2
    8for my $pairrole=admin (split /;/, $encodedname=Ada;role=admin) {9    my ($key→ role, $value→ admin) = split /=/, $pairrole=admin;10    $fields{$key}→ admin = $valueadmin;11}
  4. $result ← Ada

    13my $result→ Ada = exists $fields{$wanted}Ada ? $fields{$wanted} : "none";1415print "wanted=$wantedname\n";16print "result=$resultAda\n";17print "count=" . scalar(keys %fields2) . "\n";
    outputwanted=name
    result=Ada
    count=2
  1. $wanted ← role, $encoded ← name=Ada;role=admin, %fields ← 0

    4my $wanted→ role = "role";5my $encoded→ name=Ada;role=admin = "name=Ada;role=admin";6my %fields→ 0;
  2. $key ← name, $value ← Ada, $fields{$key} ← Ada

    pass 1 of 2
    8for my $pairname=Ada (split /;/, $encodedname=Ada;role=admin) {9    my ($key→ name, $value→ Ada) = split /=/, $pairname=Ada;10    $fields{$key}→ Ada = $valueAda;11}
  3. $key ← role, $value ← admin, $fields{$key} ← admin

    pass 2 of 2
    8for my $pairrole=admin (split /;/, $encodedname=Ada;role=admin) {9    my ($key→ role, $value→ admin) = split /=/, $pairrole=admin;10    $fields{$key}→ admin = $valueadmin;11}
  4. $result ← admin

    13my $result→ admin = exists $fields{$wanted}admin ? $fields{$wanted} : "none";1415print "wanted=$wantedrole\n";16print "result=$resultadmin\n";17print "count=" . scalar(keys %fields2) . "\n";
    outputwanted=role
    result=admin
    count=2
  1. $wanted ← missing, $encoded ← name=Ada;role=admin, %fields ← 0

    4my $wanted→ missing = "missing";5my $encoded→ name=Ada;role=admin = "name=Ada;role=admin";6my %fields→ 0;
  2. $key ← name, $value ← Ada, $fields{$key} ← Ada

    pass 1 of 2
    8for my $pairname=Ada (split /;/, $encodedname=Ada;role=admin) {9    my ($key→ name, $value→ Ada) = split /=/, $pairname=Ada;10    $fields{$key}→ Ada = $valueAda;11}
  3. $key ← role, $value ← admin, $fields{$key} ← admin

    pass 2 of 2
    8for my $pairrole=admin (split /;/, $encodedname=Ada;role=admin) {9    my ($key→ role, $value→ admin) = split /=/, $pairrole=admin;10    $fields{$key}→ admin = $valueadmin;11}
  4. $result ← none

    13my $result→ none = exists $fields{$wanted}(empty) ? $fields{$wanted} : "none";1415print "wanted=$wantedmissing\n";16print "result=$resultnone\n";17print "count=" . scalar(keys %fields2) . "\n";
    outputwanted=missing
    result=none
    count=2