Karsten: EMailadresse aus der Datei löschen

Hallo,

kann mir jemand sagen warum die betreffende eMailadresse aus der Datei nicht gelöscht wird? Was ist an dem Script falsch?

#! /usr/bin/perl

$datei = "datei.dat";
$email = "testman@domain.de";

open(FH, "<$datei") || die "Datei nicht gefunden";
while (<FH>) {
push(@emails, $_) unless (lc($_) =~ /^$email\n$/);
}
close (FH);

print <<EOL;
Content-type: text/html

<b>Die eMailadresse wurde erfolgreich gelöscht!
EOL
 exit;

  1. Hallo Karsten,

    kann mir jemand sagen warum die betreffende eMailadresse aus der Datei nicht gelöscht wird? Was ist an dem Script falsch?

    #! /usr/bin/perl

    $datei = "datei.dat";
    $email = "testman@domain.de";

    open(FH, "<$datei") || die "Datei nicht gefunden";
    while (<FH>) {
    push(@emails, $_) unless (lc($_) =~ /^$email\n$/);
    }
    close (FH);

    print <<EOL;
    Content-type: text/html

    <b>Die eMailadresse wurde erfolgreich gelöscht!
    EOL
    exit;

    Also in @emails wird die Adresse nicht mehr stehen, aber du schreibst @emails nicht zurück in die datei $datei. Deshalb ist die Sache ziemlich witzlos.

    Gruß Peter

  2. Hallo,

    kann mir jemand sagen warum die betreffende eMailadresse aus der Datei nicht gelöscht wird? Was ist an dem Script falsch?

    #! /usr/bin/perl

    ^^^
    Du solltest das Leerzeichen hier entfernen. Ausserdem solltest du mit '-w' arbeiten, dann wäre dir dein Fehler vermutlich aufgefallen.

    push(@emails, $_) unless (lc($_) =~ /^$email\n$/);

    Dein regulärer Ausdruck ist falsch:
    das '$' am Ende _ist_ das Zeilenende, du musst das '\n' vorher rausnehmen. Dies ist aber nicht der Fehler, denn du überschreibst die alte Datei nicht. Du musst jetzt auch noch Array in die Datei schreiben. Mit dem Pragma 'warnings' (-w) kommt die entsprechende Warnung:
    Name "main::emails" used only once: possible typo at test.pl line 8.

    use Tschoe qw(Matti);

    1. Hallo Matti,

      jetzt habe ich den Fehler gefunden.

      #!/usr/bin/perl -w

      $datei = "datei.dat";
      $email = "testman@domain.de";

      open(FH, "<$datei") || die "Datei nicht gefunden";
      while (<FH>) {
      push(@emails, $_) unless (lc($_) =~ /^$email\n$/);
      }
      close (FH);
      open (FH, ">$datei") || die "Datei nicht gefunden";
      print FH @emails;close(FH);

      print <<EOL;
      Content-type: text/html

      <b>Die eMailadresse wurde erfolgreich gelöscht!
      EOL
       exit;

      Getestet und es funzt!

      Danke!