In article <[EMAIL PROTECTED]>, John W. Krahn wrote: > Kevin Pfeiffer wrote: >> >> In article <[EMAIL PROTECTED]>, John W. Krahn wrote: >> >> > my $string1 = 'C:\Program files\directory1\directory2\directory3'; >> > my $string2 = 'C:\Program files\directory1\dir2\dir3'; >> > >> > ( my $nulls = $string1 ^ $string2 ) =~ s/^(\0+).*/$1/s; >> > >> > ( my $string3 = substr $string1, 0, length $nulls ) =~ s/[^\\]*$//; >> >> Wish I understood how that works... > > ^ is the exclusive or (xor) operator. If you xor two different numbers > you will get a non-zero number and if you xor two identical numbers you > will get zero. Xor on strings xors each character in the two strings so > that characters that are the same in both strings will become "\0" > (ASCII NUL). The substitution removes everything after the leading NULs > so you are left with a string of NULs the length of which is the number > of characters at the beginning of the first two strings that are > identical. In the example above, that puts a string of 31 "\0" > characters in the variable $nulls. > > The 31 character string at the beginning of $string1 (or $string2, it > doesn't matter which) is assigned to $string3 ('C:\Program > files\directory1\dir') and any non-'\' character is removed from the end > so that $string3 finally contains 'C:\Program files\directory1\'.
Thanks! >> Here's my novice version (but I'm guessing the better/portable way is to >> use File::Spec?)... >> >> my @array1 = split /\\/, $string1; >> my @array2 = split /\\/, $string2; >> my @diff; > > my $length = @array1 < @array2 ? @array1 : @array2; I had this in and removed it at the last minute, deciding that it wasn't necessary (but forgot to change the next line in my already copied-in version)... >> for (0 .. $length) { >> last if ($array1[$_] ne $array2[$_]); # avoid trailing / >> push @diff, "\\" if @diff; >> push @diff, $array1[$_]; [...] -- Kevin Pfeiffer International University Bremen A: Because it messes up the order in which people normally read text. Q: Why is top-posting such a bad thing? -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]