#!/usr/bin/perl # http://perlmonks.org/?node_id=1194483 use strict; use warnings; use Algorithm::Diff qw(traverse_sequences); my @from = split //, shift // 'shanghai rulez'; my @to = split //, shift // 'sakhalin rulez'; my $string = ''; traverse_sequences( \@from, \@to, { MATCH => sub { $string .= 0 }, DISCARD_A => sub { $string .= 1 }, DISCARD_B => sub { $string .= 2 }, } ); printf "p=%d\tq=%d\tl=%d\n", $` =~ tr/01//, $` =~ tr/02//, length $& while $string =~ /0+/g;