I have this sitting in my ~/bin
#! /usr/bin/perl -w
# onchange file ... command
# run command if any of the given files/directories
# change
use strict;
use warnings;
use File::Find;
use Digest::MD5;
my $Command = pop @ARGV;
my $Files = [@ARGV];
my $Last_digest = '';
sub has_changed {
my $files = shift;
my $ctx = Digest::MD5->new;
find(sub {$ctx->add($File::Find::name, (stat($_))[9])}, grep {
+-e $_} @$files);
my $digest = $ctx->digest;
my $has_changed = $digest ne $Last_digest;
$Last_digest = $digest;
return($has_changed);
};
while (1) {
system($Command) if has_changed($Files);
sleep 1;
};
I have this in my .cshrc
alias testwatch "onchange Makefile.PL Makefile */*.pod */*.pm *.pm t t
+est.pl 'clear; make test \!*'"
I then type % testwatch or % testwatch TEST_VERBOSE=1 in the root directory of any module I'm messing with.
This won't work 100% of the time but hits that 80/20 spot for me.
I have a little todo list on an improved test monitor that I will, when some of that mythical free time comes along, implement. Now we have the lovely Test::Harness::Straps it's not even that difficult.
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.
|