#! perl use Modern::Perl; my @paths = ( '/home/instance/domains/abcd/xyz/1.txt', '/a1234/domains/abcd/xyz/1.txt', '/a1234/topfolder/instance/domains/abcd/xyz/1.txt', # '/a1234/topfolder/instance/domains/abcd/xyz/2.txt', ); my $lcss = lcss($paths[0], $paths[1]); my $found = defined $lcss && $paths[0] =~ / \Q$lcss\E $ /x && $paths[1] =~ / \Q$lcss\E $ /x; if ($found) { for (@paths[2 .. $#paths]) { $lcss = lcss($lcss, $_); unless ($lcss && / \Q$lcss\E $ /x) { $found = 0; last; } } } say $found ? 'Found common path+file: ' . $lcss : 'No common path+file found'; # lcss() was written by BrowserUk, see [id://308451] sub lcss { my $strings = join "\0", @_; my $lcss; for my $n (1 .. length $strings) { my $re = "(.{$n})" . '.*\0.*\1' x (@_ - 1); last unless $strings =~ $re; $lcss = $1; } return $lcss; }