Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl Monk, Perl Meditation
 
PerlMonks  

Re: Creating a persistent state for File::Monitor

by tobyink (Abbot)
on Jan 17, 2013 at 16:13 UTC ( #1013806=note: print w/ replies, xml ) Need Help??


in reply to Creating a persistent state for File::Monitor

Here's an example module for saved state between script runs. Save it as STATE.pm in one of your Perl library directories...

{ package STATE; use strict; use warnings; use Storable qw( retrieve store ); use constant FILENAME => sprintf '%s.state', $0; sub import { no strict 'refs'; my $p = caller; *{"$p\::STATE"} = (${^STATE}{$p}||={}); } sub BEGIN { %{^STATE} = %{ -f FILENAME ? retrieve FILENAME : {} } } sub END { store \%{^STATE} => FILENAME; } } 1;

Now you can load that module with use STATE. Once loaded, there will be a global hash called %{^STATE} which all modules have access to. Also, within any packages that call use STATE there will also be a hash called %STATE which acts as an alias for %{${^STATE}{(__PACKAGE__)}}.

So you can write a script like this:

#!/usr/bin/perl use STATE; print $STATE{counter}++, "\n";

... and it will retain state between runs, the counter being incremented each time.

It does this in a rather simplistic way, using a state file with the same name as the script, just with ".state" tacked onto the end of the filename.

This is not necessarily how you'd want to do things in a major project (often the permissions of the directory where you keep the script would preclude you from storing the state there!) but serves as a good simple example I think.

perl -E'sub Monkey::do{say$_,for@_,do{($monkey=[caller(0)]->[3])=~s{::}{ }and$monkey}}"Monkey say"->Monkey::do'


Comment on Re: Creating a persistent state for File::Monitor
Select or Download Code

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1013806]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others making s'mores by the fire in the courtyard of the Monastery: (10)
As of 2015-07-07 08:25 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (87 votes), past polls