Data Serialization Concepts
Escaping Values
Replace separator characters before storing a value.
escaping-values
Escaping keeps delimiter characters from being confused with structure.
Escaping Values
escaping_values.pl
Replay: real traced execution (multi-file project)
use strict;
use warnings;
my $style = "equals";
my $value = "a=b";
if ($style eq "semicolon") {
$value = "a;b";
} elsif ($style eq "plain") {
$value = "abc";
}
my $escaped = $value;
$escaped =~ s/=/\\=/g;
$escaped =~ s/;/\\;/g;
print "style=$style\n";
print "value=$value\n";
print "escaped=$escaped\n";
use strict;
use warnings;
my $style = "semicolon";
my $value = "a=b";
if ($style eq "semicolon") {
$value = "a;b";
} elsif ($style eq "plain") {
$value = "abc";
}
my $escaped = $value;
$escaped =~ s/=/\\=/g;
$escaped =~ s/;/\\;/g;
print "style=$style\n";
print "value=$value\n";
print "escaped=$escaped\n";
use strict;
use warnings;
my $style = "plain";
my $value = "a=b";
if ($style eq "semicolon") {
$value = "a;b";
} elsif ($style eq "plain") {
$value = "abc";
}
my $escaped = $value;
$escaped =~ s/=/\\=/g;
$escaped =~ s/;/\\;/g;
print "style=$style\n";
print "value=$value\n";
print "escaped=$escaped\n";
$style ← equals, $value ← a=b, $escaped ← a=b
4my $style→ equals = "equals"; #@style="semicolon", "plain"5my $value→ a=b = "a=b";6if ($style eq "semicolon") {7 $value = "a;b";8} elsif ($style eq "plain") {9 $value = "abc";10}1112my $escaped→ a=b = $valuea=b;13$escaped→ a\=b =~ s/=/\\=/g;14$escapeda\=b =~ s/;/\\;/g;1516print "style=$styleequals\n";17print "value=$valuea=b\n";18print "escaped=$escapeda\=b\n";outputstyle=equals value=a=b escaped=a\=b
$style ← semicolon, $value ← a=b
4my $style→ semicolon = "semicolon";5my $value→ a=b = "a=b";6if ($style eq "semicolon") {$value ← a;b
5my $value = "a=b";6if ($stylesemicolon eq "semicolon") {7 $value→ a;b = "a;b";8} elsif ($style eq "plain") {$escaped ← a;b
12my $escaped→ a;b = $valuea;b;13$escapeda;b =~ s/=/\\=/g;14$escaped→ a\;b =~ s/;/\\;/g;1516print "style=$stylesemicolon\n";17print "value=$valuea;b\n";18print "escaped=$escapeda\;b\n";outputstyle=semicolon value=a;b escaped=a\;b
$style ← plain, $value ← a=b
4my $style→ plain = "plain";5my $value→ a=b = "a=b";6if ($style eq "semicolon") {$value ← abc
7 $value = "a;b";8} elsif ($styleplain eq "plain") {9 $value→ abc = "abc";10}$escaped ← abc
12my $escaped→ abc = $valueabc;13$escapedabc =~ s/=/\\=/g;14$escapedabc =~ s/;/\\;/g;1516print "style=$styleplain\n";17print "value=$valueabc\n";18print "escaped=$escapedabc\n";outputstyle=plain value=abc escaped=abc