$ cat pm_11145036_parm_defaults.json
{
"margin-left" : [ null, "margin-horizontal" ],
"margin-right" : [ null, "margin-horizontal" ],
"margin-top" : [ null, "margin-vertical" ],
"margin-bottom" : [ null, "margin-vertical" ],
"margin-horizontal" : [ null, "margin" ],
"margin-vertical" : [ null, "margin" ],
"margin" : [ 10, null ]
}
####
#!/usr/bin/env perl
use strict;
use warnings;
use autodie;
use constant {
VALUE => 0,
DEFER => 1,
};
use JSON;
my $json_file = 'pm_11145036_parm_defaults.json';
my $par = decode_json(
do { local $/; open my $fh, '<', $json_file; <$fh>; }
);
sub _get {
my ($key) = @_;
if (! defined $par->{$key}[VALUE]) {
_get($par->{$key}[DEFER])
}
else {
return $par->{$key}[VALUE];
}
}
sub _set {
my ($key, $value) = @_;
if (! defined $par->{$key}[DEFER]) {
warn "Can't change factory default: '$key'.\n";
}
else {
$par->{$key}[VALUE] = $value;
}
return;
}
# Some examples of usage:
print 'margin-left = ', _get('margin-left'), "\n";
_set('margin-horizontal', 20);
print 'margin-left = ', _get('margin-left'), "\n";
_set('margin-left', 30);
print 'margin-left = ', _get('margin-left'), "\n";
print 'margin = ', _get('margin'), "\n";
_set('margin', 50);
print 'margin = ', _get('margin'), "\n";
##
##
margin-left = 10
margin-left = 20
margin-left = 30
margin = 10
Can't change factory default: 'margin'.
margin = 10