$ a =“ fddf \ n dfdf \ n eeee \ n“
$ b =“ fddf \ n dfdf \ n pppp \ n erww \ n“
输出应为“ eeee \ n”,因为第二个字符串中缺少该输出。我曾想过使用perl正则表达式,但是它不能告诉我第二个字符串中缺少什么。
答案 0 :(得分:1)
首先:始终使用严格和警告,不要在种类之外使用$a
和$b
,它们是special。
use strict;
use warnings;
my $x = " fddf\n dfdf\n eeee\n";
my $y = " fddf\n dfdf\n pppp\n erww\n";
my @x_chars = split //, $x;
my @y_chars = split //, $y;
my @missing_chars;
while (@x_chars and @y_chars) {
my $next = shift @x_chars;
if ($next eq $y_chars[0]) {
shift @y_chars;
} else {
push @missing_chars, $next;
}
}
push @missing_chars, @x_chars;
my $missing = join '', @missing_chars;
如所提到的,String::Diff(Algorithm :: Diff的包装器)等CPAN模块将在您的需求变得更加复杂时提供更简单,更全面的解决方案。