Data-Nested
view release on metacpan or search on metacpan
lib/Data/Nested/Multiele.pm view on Meta::CPAN
} else {
# For a hash
# If $ele is given and it is empty
# Put the new element there
# Elsif $ele is given and it doesn't exist
# Put it there
# Else
# Error
if ($ele && _ele_empty($self,$ele)) {
_add_element_sethash($self,$ele,$nds);
} elsif ($ele && ! _ele_exists($self,$ele)) {
_add_element_sethash($self,$ele,$nds);
} else {
$$self{'err'} = 'nmeele02';
$$self{'errmsg'} = "Attempt to overwrite an existing element: $ele";
return;
}
}
$$self{'elesx'} = undef;
$$self{'elesxh'} = {};
$$self{'elesn'} = undef;
$$self{'elesnh'} = undef;
}
sub _add_element_setlist {
my($self,$ele,$nds) = @_;
$$self{'raw'}[$ele] = $nds;
}
sub _add_element_insert {
my($self,$ele,$nds) = @_;
splice(@{ $$self{'raw'} },$ele,0,$nds);
if ($#{ $$self{'data'} } >= $ele) {
splice(@{ $$self{'data'} },$ele,0,undef);
}
}
sub _add_element_push {
my($self,$nds) = @_;
my $n = $#{ $$self{'raw'} };
$n++;
_add_element_setlist($self,$n,$nds);
}
sub _add_element_sethash {
my($self,$ele,$nds) = @_;
$$self{'raw'}{$ele} = $nds;
}
###############################################################################
# UPDATE_ELE METHOD
###############################################################################
sub update_ele {
my($self,$ele,$path,$val,$new,$ruleset) = @_;
if (! $$self{'file'}) {
$$self{'err'} = 'nmefil06';
$$self{'errmsg'} = 'No file set.';
return;
}
# Check to make sure $ele is valid (it need only exist)
if (! _ele_exists($self,$ele)) {
$$self{'err'} = 'nmeele01';
$$self{'errmsg'} = "The specified element does not exist: $ele";
return;
}
# If $val is not passed in, erase the path.
my $NDS = $self->nds();
my $nds = $$self{'raw'}{$ele};
if (! defined $val) {
$NDS->erase($nds,$path);
if ($NDS->err()) {
$$NDS{'err'} = '';
$$NDS{'errmsg'} = '';
$$self{'err'} = 'nmends02';
$$self{'errmsg'} = "Problem encountered while erasing a path: $path";
}
} else {
# Check new/ruleset values
if (! defined $ruleset &&
defined $new &&
$NDS->ruleset_valid($new)) {
$ruleset = $new;
$new = '';
}
$ruleset = 'replace' if (! $ruleset);
# Merge in the new value
if (! $NDS->ruleset_valid($ruleset)) {
$$self{'err'} = 'ndserr01';
$$self{'errmsg'} = "An invalid ruleset was passed in: $ruleset";
return;
}
$NDS->merge_path($nds,$val,$path,$ruleset,$new);
if ($NDS->err()) {
$$NDS{'err'} = '';
$$NDS{'errmsg'} = '';
$$self{'err'} = 'nmends03';
$$self{'errmsg'} = 'The value had an invalid structure.';
return;
}
( run in 0.726 second using v1.01-cache-2.11-cpan-cdf2f3d4e48 )