Beefy Boxes and Bandwidth Generously Provided by pair Networks
"be consistent"
 
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 browsing the Monastery: (14)
As of 2014-12-19 21:22 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    Is guessing a good strategy for surviving in the IT business?





    Results (92 votes), past polls