blob: ffd870cb087d257d03fa5cc9a7179811f7ebe1ac (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
#!/usr/bin/env perl
use strict;
use warnings;
sub commonPath {
# Normalize paths (merge multiple "/"s into a single one)
map s|/+|/|g, @_;
# This array stores the common path components so far
my @common = split m|/|, shift, -1;
# Iterate over arguments (paths) and update @common accordingly
foreach my $path (@_) {
my @current = split m|/|, $path, -1;
# Cut @common if longer than the current one
@common = @common[0 .. $#current] if $#current < $#common;
# Cut @common to keep only the matching components
foreach my $i (0 .. $#common) {
if ($common[$i] ne $current[$i]) {
@common = @common[0 .. $i-1];
last;
}
}
}
# Corner case: @common == ('') means root
return @common == 1 && $common[0] eq ''
? "/"
: join "/", @common;
}
# CLI usage
if (@ARGV) {
print commonPath(@ARGV), "\n";
} else {
print "Usage: $0 path1 path2 ...\n";
}
|