#!/usr/bin/perl use diagnostics; use strict; use warnings; use Data::Dumper;# nur für die Ausgabe my @array1 = ("apfel 752 523 grün", "birne 448 038 gelb", "orange 361 098 orange", ); my @array2 = ("apfel 752 523 grün", "birne 448 638 gelb", "zitrone 361 098 gelbgrün", ); my @diff = (); sub ist_element_in_array ($$) { my $elem = shift; my $array = shift; my $elem_wort = (split / /, $elem)[0]; for my $aelem (@$array) { my $array_wort = (split / /, $aelem)[0]; if ($elem_wort eq $array_wort) { return $aelem; } } return undef; } for my $elem (@array1) { my $elem2 = ist_element_in_array($elem, \@array2); if (defined $elem2) { if ($elem eq $elem2) { #Ja: Ok, wir brauchen es nicht in der Ausgabe } else { #Nein: Schreibe beide Elemente in das Array diff push @diff, ($elem, $elem2); } } else { # Nein: Nur in Array1, ok, schreibs ins Array diff push @diff, $elem; } } for my $elem2 (@array2) { if (ist_element_in_array($elem2, \@array1)) { # Ja: Ok nichts zu tun, das wurde in der ersten Schleife # schon mit erfasst } else { # Nein: Nur in Array2, ok, schreibs ins Array diff push @diff, $elem2; } } print "Array 1 :\n", Dumper(\@array1), "\n", "Array 2 :\n", Dumper(\@array2), "\n", "Array diff:\n", Dumper(\@diff), "\n";