Some more code would help. Currently I imagine your base module and main program to be something like this:
#!/usr/bin/perl -w use strict; use vars qw(%rules); # From the base package sub filter_names { my ($rule_name,@files) = @_; my $rule = $main::rules{ $rule_name }; grep {/$rule/} @files }; %rules = ( INPUT_FILE_DESCRIPTION => "^Remote.*", OTHER_FILES => "^(?!Remote)" ); my @files = <DATA>; chomp @files; for my $rule (qw(INPUT_FILE_DESCRIPTION OTHER_FILES)) { print "$rule\n"; print "$_\n" for filter_names($rule, @files); }; __DATA__ Remote1 Other1 Remote2 Other2 Remote3 Another
My solution uses the negative lookahead, anchored to the start of the string. See perlre to find out more about negative lookahead. Also, you might want to consider a different approach that remembers whether a file was handled by a rule already and then raising an error about all unhandled files. Doing that would be possible by remembering for each file the rule(s) that applied.
In reply to Re: Regular expression question strikes again
by Corion
in thread Regular expression question strikes again
by jesuashok
For: | Use: | ||
& | & | ||
< | < | ||
> | > | ||
[ | [ | ||
] | ] |