#!/usr/bin/env perl use strict; use warnings; BEGIN { delete @ENV{qw{PATH IFS CDPATH ENV BASH_ENV}} } use autodie ':all'; use constant { INDIR => '/home/ken/tmp/pm_11137850/whole_head', OUTDIR => '/home/ken/tmp/pm_11137850/just_brain', ZOMBIE => '/home/ken/tmp/pm_11137850/zombie', }; use Getopt::Long; my ($in_dir, $out_dir); my $filter_string = ''; GetOptions( 'indir=s' => \$in_dir, 'outdir=s' => \$out_dir, 'filters=s' => \$filter_string, ); my @filters; my @raw_filters = split /,/, $filter_string; my @problems; _set_dirs(\$in_dir, \$out_dir, \@problems); _get_filters(\@raw_filters, \@filters, \@problems); die @problems if @problems; system(ZOMBIE, INDIR."/wh_$_", OUTDIR."/jb_$_") for @filters; sub _get_filters { my ($raw_filters, $filters, $problems) = @_; my $re = qr{^(\d+)$}; if (! @$raw_filters) { push @$problems, "No filters specified.\n"; } else { for my $raw_filter (@$raw_filters) { if ($raw_filter =~ $re) { push @$filters, $1; } else { push @$problems, "Invalid filter: '$raw_filter'\n"; } } } return; } sub _set_dirs { my ($in, $out, $problems) = @_; my $re = qr{^(\/[\w\/]+)$}; if (length $$in) { if ($$in =~ $re) { $$in = $1; if (! -d $$in) { push @$problems, "Non-existent input directory: '$$in'\n"; } } else { push @$problems, "Invalid input directory name: '$$in'\n"; } } else { $$in = INDIR; } if (length $$out) { if ($$out =~ $re) { $$out = $1; if (! -d $$out) { push @$problems, "Non-existent output directory: '$$out'\n"; } } else { push @$problems, "Invalid output directory name: '$$out'\n"; } } else { $$out = OUTDIR; } return; }