Are there any strings in your logfile array containing CSS which shouldn't be altered? If not, you could just go with
for (@filenames) { s/CSS//; } # or written with a statement modifier: # s/CSS// for @filenames;
You could run the above code over your array and check for false positives, and extend the regular expression if so.
Since your strings are tokens concatenated with a dot, of which the last is always ErrorLog, you could anchor your regular expression at the end with $ and remove CSS from the token preceeding the last two:
for (@filenames) { s{ # substitute CSS # the string CSS ( # and a capture consisting in \. # a literal dot, [^\.]+ # any number of non-dots, \. # another literal dot, ErrorLog # and the constant ErrorLog ) # (end of capture) $ # anchored at the end of the string } {$1}x; # against the capture above }
Or written more concisely with a terse explanation:
for (@filenames) { s/CSS(\.[^\.]+\.ErrorLog)$/$1/; # remove CSS from end of antepenul +timate token }
Perhaps more effective and faster, if you have only a few strings with CSS: look for CSS, if found, split, remove and join:
for (@filenames) { if (/CSS/) { my @t = split /\./; $t[-3] =~ s/CSS$//; $_ = join '.', @t; } }
In reply to Re: Perl file name parsing - Regular expression
by shmem
in thread Perl file name parsing - Regular expression
by rinkish85
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |