use File::Watch;
my $w = File::Watch->new(
file => '/var/run/foo',
open = sub {
use YAML;
return LoadFile( $_->[0] )
}
};
my $data = $w->get;
while( 1 ) {
# uses the same $data forever
do_something( $data );
sleep 10;
}
while( 1 ) {
# may the same $data forever, unless /var/run/foo changes
# during the process's lifetime
do_something( $w->get );
sleep 10;
}
####
#! /usr/local/bin/perl -w
use Regexp::Assemble;
my $re = Regexp::Assemble->new->add(
10..374,
376..379,
382..385,
388..499,
530..534,
541..543,
618,
619,
700..704,
707..709
);
% ./ra
(?:3(?:7[012346789]?|8[234589]?|0\d?|1\d?|2\d?|3\d?|4\d?|5\d?|6\d?|9\d?)|1(?:0\d?|1\d?|2\d?|3\d?|4\d?|5\d?|6\d?|7\d?|8\d?|9\d?)|2(?:0\d?|1\d?|2\d?|3\d?|4\d?|5\d?|6\d?|7\d?|8\d?|9\d?)|4(?:0\d?|1\d?|2\d?|3\d?|4\d?|5\d?|6\d?|7\d?|8\d?|9\d?)|5(?:[01256789]|3[01234]?|4[123]?)|7(?:[123456789]|0[01234789]?)|6(?:[023456789]|1[89]?)|8\d|9\d)
% ./ra | wc -c
335
####
my $foo = [
1,
[2, 3],
[4, [5, 6, 7]],
];
my $path = Thing->new($foo);
while( defined( my $p = $path->next )) {
print join( ' ' => @$p ), "\n";
}
__PRDDUCES__
1 2 4 5
1 2 4 6
1 2 4 7
1 3 4 5
1 3 4 6
1 3 4 7
####
