Data Serialization Concepts
Decode Pairs
Read key-value text back into direct scalar lookups.
decode-pairs
Decoding splits serialized text into fields that code can inspect.
Decode Pairs
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";
$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;$key ← name, $value ← Ada, $fields{$key} ← Ada
pass 1 of 28for my $pairname=Ada (split /;/, $encodedname=Ada;role=admin) {9 my ($key→ name, $value→ Ada) = split /=/, $pairname=Ada;10 $fields{$key}→ Ada = $valueAda;11}$key ← role, $value ← admin, $fields{$key} ← admin
pass 2 of 28for my $pairrole=admin (split /;/, $encodedname=Ada;role=admin) {9 my ($key→ role, $value→ admin) = split /=/, $pairrole=admin;10 $fields{$key}→ admin = $valueadmin;11}$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
$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;$key ← name, $value ← Ada, $fields{$key} ← Ada
pass 1 of 28for my $pairname=Ada (split /;/, $encodedname=Ada;role=admin) {9 my ($key→ name, $value→ Ada) = split /=/, $pairname=Ada;10 $fields{$key}→ Ada = $valueAda;11}$key ← role, $value ← admin, $fields{$key} ← admin
pass 2 of 28for my $pairrole=admin (split /;/, $encodedname=Ada;role=admin) {9 my ($key→ role, $value→ admin) = split /=/, $pairrole=admin;10 $fields{$key}→ admin = $valueadmin;11}$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
$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;$key ← name, $value ← Ada, $fields{$key} ← Ada
pass 1 of 28for my $pairname=Ada (split /;/, $encodedname=Ada;role=admin) {9 my ($key→ name, $value→ Ada) = split /=/, $pairname=Ada;10 $fields{$key}→ Ada = $valueAda;11}$key ← role, $value ← admin, $fields{$key} ← admin
pass 2 of 28for my $pairrole=admin (split /;/, $encodedname=Ada;role=admin) {9 my ($key→ role, $value→ admin) = split /=/, $pairrole=admin;10 $fields{$key}→ admin = $valueadmin;11}$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