NAME
Gnuplot::Builder::JoinDict - immutable ordered hash that joins its values in stringification
SYNOPSIS
use Gnuplot::Builder::JoinDict;
my $dict = Gnuplot::Builder::JoinDict->new(
separator => ', ',
content => [x => 640, y => 480]
);
"$dict"; ## => 640, 480
$dict->get("x"); ## => 640
$dict->get("y"); ## => 480
my $dict2 = $dict->set(y => 16);
"$dict"; ## => 640, 480
"$dict2"; ## => 640, 16
my $dict3 = $dict2->set(x => 8, z => 32);
"$dict3"; ## => 8, 16, 32
my $dict4 = $dict3->delete("x", "y");
"$dict4"; ## => 32
DESCRIPTION
Basically Gnuplot::Builder::JoinDict is just an ordered associative array (sometimes called as a "dictionary"), so it's the same as Tie::IxHash.
The difference from Tie::IxHash is:
Gnuplot::Builder::JoinDict is immutable. Every setter method doesn't alter the original object, but returns a new one.
When a Gnuplot::Builder::JoinDict object is stringified, it joins all its values with the given separator and returns the result.
EXPORTABLE FUNCTIONS
$dict = joind($separator, @content)
Alias for Gnuplot::Builder::JoinDict->new(separator => $separator, content => \@content)
. Exported only by request.
CLASS METHODS
$dict = Gnuplot::Builder::JoinDict->new(%args)
The constructor.
Fields in %args
are:
separator
=> STR (optional, default: "")-
The separator string that is used when joining.
content
=> ARRAY_REF (optional, default: [])-
The content of the
$dict
. The array-ref must contain key-value pairs. Keys must not beundef
. filter
=> CODE_REF (optional)-
If set, this code-ref is called when the
$dict
is stringified (i.e.$dict->to_string
is called). The code-ref is supposed to modify the values in$dict
to produce the final result of stringification.@modified_values = $filter->($dict)
where
$dict
is the Gnuplot::Builder::JoinDict object. The filter must return a list@modified_values
.For example,
my $dict = Gnuplot::Builder::JoinDict->new( separator => " & ", content => [x => 10, y => 20], filter => sub { my ($dict) = @_; my @keys = $dict->get_all_keys(); my @values = $dict->get_all_values(); return map { "$keys[$_]=$values[$_]" } 0 .. $#keys; } ); "$dict"; ## => x=10 & y=20
The filter is inherited by Gnuplot::Builder::JoinDict objects derived from the original one.
validator
=> CODE_REF (optional)-
If set, this code-ref is called when some key-value pairs are set or deleted to a Gnuplot::Builder::JoinDict object. The code-ref is supposed to check the content and throw an exception when something is wrong.
$validator->($dict)
where
$dict
is the Gnuplot::Builder::JoinDict object.The validator is called when
new()
,delete()
,set()
andset_all()
methods are called.The validator is inherited by Gnuplot::Builder::JoinDict objects derived from the original one.
OBJECT METHODS
$str = $dict->to_string()
Join $dict
's values with the separator and return the result.
If some values are undef
, those values are ignored.
$value = $dict->get($key)
Return the $value
for the $key
.
If $dict
doesn't have $key
, it returns undef
.
@keys = $dict->get_all_keys()
Return all keys from $dict
.
@values = $dict->get_all_values()
Return all values from $dict
.
$new_dict = $dict->set($key => $value, ...)
Add new key-value pairs to $dict
and return the result. You can specify more than one key-value pairs.
If $dict
already has $key
, its value is replaced in $new_dict
. Otherwise, a new pair of $key
and $value
is added.
$new_dict = $dict->set_all($value)
Set all values to $value
and return the result.
$new_dict = $dict->delete($key, ...)
Delete the given keys from $dict
and return the result. You can specify more than one $key
s.
If $dict
doesn't have $key
, it's just ignored.
$new_dict = $dict->clone()
Create and return a clone of $dict
.
$separator = $dict->separator()
Get the separator.
OVERLOAD
When you evaluate a $dict
as a string, it executes $dict->to_string()
. That is,
"$dict" eq $dict->to_string;
Data::Focus COMPATIBLITY
Gnuplot::Builder::JoinDict implements Lens()
method, so you can use Data::Focus to access its attributes.
The Lens()
method creates a Data::Focus::Lens object for accessing the content via get()
and set()
methods.
use Data::Focus qw(focus);
my $scalar = focus($dict)->get("x");
## same as: my $scalar = $dict->get("x");
my $new_dict = focus($dict)->set(x => '($1 * 1000)');
## same as: my $new_dict = $dict->set(x => '($1 * 1000)');
AUTHOR
Toshio Ito, toshioito at cpan.org