SEARCH
NEW RPMS
DIRECTORIES
ABOUT
FAQ
VARIOUS
BLOG

 
 

perl-Lexical-Persistence rpm build for : OpenSuSE 13.X. For other distributions click perl-Lexical-Persistence.

Name : perl-Lexical-Persistence
Version : 1.023 Vendor : obs://build_opensuse_org/devel:languages:perl
Release : 18.2 Date : 2015-04-25 11:23:24
Group : Development/Libraries/Perl Source RPM : perl-Lexical-Persistence-1.023-18.2.src.rpm
Size : 0.07 MB
Packager : (none)
Summary : Persistent lexical variable values for arbitrary calls.
Description :
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, \"\
\" }

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 => { \'AATTmember\' => [ 2, \'.\', 7, 1, 8 ] } );
$lp->set_context(
animal => {
\'%member\' => { cat => \"meow\", dog => \"woof\" }
}
);

$lp->call(\\&display);

sub display {
my ($pi_member, AATTe_member, %animal_member);

print \"pi = $pi_member\
\";
print \"e = AATTe_member\
\";
while (my ($animal, $sound) = each %animal_member) {
print \"The $animal goes... $sound!\
\";
}
}

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!\
\";
}

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!\
\";
}

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(
_ => {
\'AATTmind\' => [qw(My mind is going. I can feel it.)]
}
);

while (1) {
$lp->call(\\&display);
my $mind = $lp->get_context(\"_\")->{\'AATTmind\'};
splice AATT$mind, rand(AATT$mind), 1;
last unless AATT$mind;
}

sub display {
my AATTmind;
print \"AATTmind\
\";
}

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, \"\
\";
}

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\
\"\' );

Which gives the output:

Hello, world

If you come up with other fun uses, let us know.

RPM found in directory: /packages/linux-pbone/ftp5.gwdg.de/pub/opensuse/repositories/devel:/languages:/perl/openSUSE_13.1/noarch

Content of RPM  Changelog  Provides Requires

Hmm ... It's impossible ;-) This RPM doesn't exist on any FTP server

Provides :
perl(Lexical::Persistence)
perl-Lexical-Persistence

Requires :
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
perl(Devel::LexAlias) => 0.05
rpmlib(PayloadIsLzma) <= 4.4.6-1
perl(PadWalker) => 1.96
perl(:MODULE_COMPAT_5.18.1)


Content of RPM :
/usr/lib/perl5/vendor_perl/5.18.1/Lexical
/usr/lib/perl5/vendor_perl/5.18.1/Lexical/Persistence.pm
/usr/lib/perl5/vendor_perl/5.18.1/i586-linux-thread-multi
/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

 
ICM