my $rxParsePath = qr {(?x) # Use extended regular expression syntax to # allow comments and white space ^ # Anchor pattern to beginning of string (?=.) # Zero-width look ahead assertion to ensure # that there must be at least one character # for the match to succeed (.*/)? # A memory grouping (1st) for path, greedy # match of any characters up to and including # the rightmost slash (the path part) with a # quantifier of '?' (0 or 1), i.e. there # may or may not be a directory part ( # Open memory grouping (2nd) for file name (.*?) # A memory grouping (3rd) for file name stub # of a non-greedy match of any character # without a quantifier since, if there is a # file name part, at least some of it will # form a stub otherwise it would be a dot-file ( # A memory grouping (4th) for file name # extension (?<=[^/]) # zero width look behind assertion such # that following pattern will only succeed # if preceded by any caracter other than # a slash '/' \.[^.]+ # a literal dot '.' followed by one or more # non-dots )? # Close memory grouping (4th) with a quantifier # of '?' (0 or 1), i.e. there may or may not # be a file name extension part )? # Close memory grouping (2nd) with a quantifier # of '?' (0 or 1), i.e. there may or may not # be a file name part $ # Anchor pattern to end of string };