in reply to The dreaded if-elsif-else construct (code)

I'm probably not completely clear on what you have to do, but this (not 100% perl) solution may give you a hint or two:
use diagnostics; use strict; use Data::Dumper; my %sprockets; my %cogs; open FILES, "c:/cygwin/bin/find.exe data -type f -print|" or die "no +data"; while(<FILES>){ m[sprocket_logs/(\w+)\.(\d+)] and $sprockets{$1} = $2; m[cog_logs/(\w+)\.(\d+)] and $cogs{$1} = $2; } print Dumper(%sprockets, %cogs);
The basic idea here is a two column table with the REs and tasks, separated by "and"s. You could (clearly) make it a 100% Pure Perl solution by writing your own find. It may not solve your problem directly, but it might give you at least a partial idea toward a solution.

HTH, --traveler