It's not possible to combine those regexps if those are trully meant to be captures ((...)) and not groupings ((?:...)). At least, it wouldn't be possible without change the variables in which the data is captured.
Let's assume that you only used the parens for grouping (and that you forgot $ at the end of each regexp), then you'd be starting with the following:
if ($file =~ /^\d{8}(?:_\d+)*\.ilf$/i ||
$file =~ /^\d{8}(?:\s\d+)*\.sht$/i
) {
...
}
The possibilities for joining are still quite limited since there is a mixture of common and not common elements. The following illustrates this:
vvvvvvvvv vvv vvv vvvv common
/^\d{8}(?:_ \d+)*\.ilf$/ix
/^\d{8}(?:\s\d+)*\.sht$/ix
^^ ^^^ not common
The best that can be done, as far as I can tell, is to join the common beginning and the common ending. The following illustrates this:
(?:_ \d+)*\.ilf
/^\d{8} $/ix
(?:\s\d+)*\.sht
We get the following regexp:
if ($file =~ /^\d{8}(?:(?:_\d+)*\.ilf|(?:\s\d+)*\.sht)$/i) {
...
}
This is definitely less readable.
|