Index | index by Group | index by Distribution | index by Vendor | index by creation date | index by Name | Mirrors | Help | Search |
Name: perl-Lexical-Persistence | Distribution: openSUSE:Factory:zSystems |
Version: 1.023 | Vendor: openSUSE |
Release: 3.40 | Build date: Mon Nov 25 10:32:32 2013 |
Group: Development/Libraries/Perl | Build host: reproducible |
Size: 70830 | Source RPM: perl-Lexical-Persistence-1.023-3.40.src.rpm |
Packager: https://bugs.opensuse.org | |
Url: http://search.cpan.org/dist/Lexical-Persistence/ | |
Summary: Persistent lexical variable values for arbitrary calls. |
Lexical::Persistence does a few things, all related. Note that all the behaviors listed here are the defaults. Subclasses can override nearly every aspect of Lexical::Persistence's behavior. Lexical::Persistence lets your code access persistent data through lexical variables. This example prints "some value" because the value of $x persists in the $lp object between setter() and getter(). use Lexical::Persistence; my $lp = Lexical::Persistence->new(); $lp->call(\&setter); $lp->call(\&getter); sub setter { my $x = "some value" } sub getter { print my $x, "\n" } Lexicals with leading underscores are not persistent. By default, Lexical::Persistence supports accessing data from multiple sources through the use of variable prefixes. The set_context() member sets each data source. It takes a prefix name and a hash of key/value pairs. By default, the keys must have sigils representing their variable types. use Lexical::Persistence; my $lp = Lexical::Persistence->new(); $lp->set_context( pi => { '$member' => 3.141 } ); $lp->set_context( e => { '@member' => [ 2, '.', 7, 1, 8 ] } ); $lp->set_context( animal => { '%member' => { cat => "meow", dog => "woof" } } ); $lp->call(\&display); sub display { my ($pi_member, @e_member, %animal_member); print "pi = $pi_member\n"; print "e = @e_member\n"; while (my ($animal, $sound) = each %animal_member) { print "The $animal goes... $sound!\n"; } } And the corresponding output: pi = 3.141 e = 2 . 7 1 8 The cat goes... meow! The dog goes... woof! By default, call() takes a single subroutine reference and an optional list of named arguments. The arguments will be passed directly to the called subroutine, but Lexical::Persistence also makes the values available from the "arg" prefix. use Lexical::Persistence; my %animals = ( snake => "hiss", plane => "I'm Cartesian", ); my $lp = Lexical::Persistence->new(); while (my ($animal, $sound) = each %animals) { $lp->call(\&display, animal => $animal, sound => $sound); } sub display { my ($arg_animal, $arg_sound); print "The $arg_animal goes... $arg_sound!\n"; } And the corresponding output: The plane goes... I'm Cartesian! The snake goes... hiss! Sometimes you want to call functions normally. The wrap() method will wrap your function in a small thunk that does the call() for you, returning a coderef. use Lexical::Persistence; my $lp = Lexical::Persistence->new(); my $thunk = $lp->wrap(\&display); $thunk->(animal => "squirrel", sound => "nuts"); sub display { my ($arg_animal, $arg_sound); print "The $arg_animal goes... $arg_sound!\n"; } And the corresponding output: The squirrel goes... nuts! Prefixes are the characters leading up to the first underscore in a lexical variable's name. However, there's also a default context named underscore. It's literally "_" because the underscore is not legal in a context name by default. Variables without prefixes, or with prefixes that have not been previously defined by set_context(), are stored in that context. The get_context() member returns a hash for a named context. This allows your code to manipulate the values within a persistent context. use Lexical::Persistence; my $lp = Lexical::Persistence->new(); $lp->set_context( _ => { '@mind' => [qw(My mind is going. I can feel it.)] } ); while (1) { $lp->call(\&display); my $mind = $lp->get_context("_")->{'@mind'}; splice @$mind, rand(@$mind), 1; last unless @$mind; } sub display { my @mind; print "@mind\n"; } Displays something like: My mind is going. I can feel it. My is going. I can feel it. My is going. I feel it. My going. I feel it. My going. I feel My I feel My I My It's possible to create multiple Lexical::Persistence objects, each with a unique state. use Lexical::Persistence; my $lp_1 = Lexical::Persistence->new(); $lp_1->set_context( _ => { '$foo' => "context 1's foo" } ); my $lp_2 = Lexical::Persistence->new(); $lp_2->set_context( _ => { '$foo' => "the foo in context 2" } ); $lp_1->call(\&display); $lp_2->call(\&display); sub display { print my $foo, "\n"; } Gets you this output: context 1's foo the foo in context 2 You can also compile and execute perl code contained in plain strings in a a lexical environment that already contains the persisted variables. use Lexical::Persistence; my $lp = Lexical::Persistence->new(); $lp->do( 'my $message = "Hello, world" ); $lp->do( 'print "$message\n"' ); Which gives the output: Hello, world If you come up with other fun uses, let us know.
Artistic-1.0 or GPL-1.0+
* Mon Nov 25 2013 [email protected] - updated to 1.023, they forgot to update their changelog * Wed Sep 12 2012 [email protected] - use perl_requires macro * Mon Nov 29 2010 [email protected] - remove /var/adm/perl-modules * Tue May 11 2010 [email protected] - initial package (1.020)
/usr/lib/perl5/vendor_perl/5.40.0/Lexical /usr/lib/perl5/vendor_perl/5.40.0/Lexical/Persistence.pm /usr/share/doc/packages/perl-Lexical-Persistence /usr/share/doc/packages/perl-Lexical-Persistence/CHANGES /usr/share/doc/packages/perl-Lexical-Persistence/LICENSE /usr/share/doc/packages/perl-Lexical-Persistence/README /usr/share/doc/packages/perl-Lexical-Persistence/README.mkdn /usr/share/man/man3/Lexical::Persistence.3pm.gz
Generated by rpm2html 1.8.1
Fabrice Bellet, Tue Dec 3 23:45:09 2024