It won't work on general data. It will find the first subsequence of @a that is in @b and be content with it. But it was an interesting attempt.
Update: For @a = qw(a b c); @b = qw(a b c) it prints b. For two element lists it does not work at all.
Update:
Changed the code to:
my $str = join(" ", @a) . "&" . join(" ", @b);
if ($str =~ /(?:\b\w+\b\s*)*?
((?:\b\w+\b\s*)+)
(?:\s*\b\w+\b\s*)*?
&
(?:\b\w+\b\s*)*?
\1
(?:\s*\b\w+\b)*?/x) {
my $result = $1;
$result =~ s/\s*$//;
print "found '$result'\n";
}
It does not have the problem with cutting the first and last elements of the list, but still for
@a = qw(a b c); @b = qw(a x b c) it prints
a.