Lavender: Vergleichen von 2 Array/String/Texten (u.Änderungen aufzeigen)

Hallo zusammen,

ich muss 2 Texte auf Änderungen vergleichen (wie diff unter Linux) d.h. die Änderungen auch mit + bzw. - aufzeigen.

Gut funktioniert u.g. Script - allerdings kann ich damit gar nichts anfangen, da ich nicht weiß, wie ich die Dumper-Werte weiter verarbeiten soll/kann (es gibt $VAR1=... zurück, will ich diese Variable aber nutzen, steht sie nicht zur Verfügung...).

Außerdem stört mich die Ausgabe:
$VAR1 = [ [ '-', 'ist' ], [ '-', 'text' ], [ '+', 'Text' ], [ '+', '.' ] ];

Ich brauche eigentlich
@diff=('-|ist','-|text'...)
aber immer wenn ich etwas an der map Zeile änder funktioniert gar nichts mehr...

Kann mir bitte jemand weiterhelfen und evtl. das Script anpassen oder mir sagen, wie ich das diff Problem sonst lösen kann (das Diff Modul steht nicht zur Verfügung)

Vielen Dank im Voraus.

Viele Grüße
Lavender

Hier das Script:
#!/usr/bin/perl

use Data::Dumper;
my (%ha, %hb);

my @a = ('dies','ist','ein','test','text','');
my @b = ('','dies','','ein','Text','test','.');

@ha{@a} = (1) x @a;
@hb{@b} = (1) x @b;

my @diff = ( (map { ['-', $_] } grep { !($hb{$_}) } @a),
             (map { ['+', $_] } grep { !($ha{$_}) } @b) );

print "Content-type: text/html\n\n";
print Dumper (@diff);

  1. gudn tach!

    ich muss 2 Texte auf Änderungen vergleichen (wie diff unter Linux) d.h. die Änderungen auch mit + bzw. - aufzeigen.

    diff-module gibt's schon. z.b.
    Text::Diff
    Algorithm::Diff

    (das Diff Modul steht nicht zur Verfügung)

    mist. beide?

    ansonsten gaebe es auch einfach die moeglichkeit diff in perl aufzurufen und sich die ausgabe in eine variable schreiben zu lassen, und zwar mit hilfe von backticks.

    Gut funktioniert u.g. Script - allerdings kann ich damit gar nichts anfangen, da ich nicht weiß, wie ich die Dumper-Werte weiter verarbeiten soll/kann (es gibt $VAR1=... zurück, will ich diese Variable aber nutzen, steht sie nicht zur Verfügung...).

    das manual von Data::Dumper sollte dir weiterhelfen.

    Außerdem stört mich die Ausgabe:
    $VAR1 = [ [ '-', 'ist' ], [ '-', 'text' ], [ '+', 'Text' ], [ '+', '.' ] ];

    Ich brauche eigentlich
    @diff=('-|ist','-|text'...)

    nach my $diff=...
    $_=join('|',@{$_}) foreach @diff;
    oder
    map {$_=join('|',@{$_})} @diff;

    aber immer wenn ich etwas an der map Zeile änder funktioniert gar nichts mehr...

    da steht, wie's geht.

    prost
    seth

    1. Vielen Dank - das hat mir sehr geholfen :)

      Viele Grüße
      Lavender

      PS: es steht keins der beiden Module zur Verfügung - umso besser, dass es auch so geht :)