in reply to Do as I say. Not as I do

I'm wondering if you couldn't rearrange the split and the =~ statement (I don't know if the input array would allow this) .. so you'd do
# Delete (something) from the input stream, separate the # count from the file name. s/$in_prefix//; my ( $count, $file ) = split;

instead.

As a matter of coding style I use brackets when calling something like split; Since the delimiter is a slash, I'd also avoid the leaning toothpicks by using ' delimiters. So I would write

# Decompose directory/sub-directory/file into campaign, # month and file. my ( $campaign, $month, $fname ) = split ( '/', $file );

Finally, I'd probably add the comment that you mentioned already at the top.

# Build an array of hash references from the output from # the output wc -l command containing campaign, month and # count data. my @files = map {

However, this looks like a situation where a hash of hashes might be more useful -- especially if you want to do subtotals across various months -- or campaigns.

"Excellent. Release the hounds." -- Monty Burns.