Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hi, ich hätte ein paar fragen zu dem Codefragment. Das ganze ist in Perl geschrieben und da ich leider kein Perl kann kenn ich mcih net ganz so aus.

open macht nach meinem Verständnis eine Datei auf, deren Pfad als Variable $mbox übergeben wird. Und ich vermute, das MBOX als "interner Name" verwendet wird. Stimmt das so?

Mir ist nur nicht klar was while (<MBOX>) bewirkt. Ich kenne zwar while, aber was macht <MBOX> ?

Beim rest denk ich das er die DAtei nach From durchsucht, und jedes mal wen er eins findet wieder in ne neue Datei schreibt, wobei darauf geachtet wird das keine Datei doppelt geschrieben wird.

mit Close macht er das zeugs dann wieder zu.

Wenn ich das script laufen lasse, bekomme ich eine fehler beim letzten Close(Cyrus ....

Er sagt mir das es 0. nicht schließen konnte.

Aber nach meinem Verständnis sollte es doch gar kein 0. geben.

:confused:

Wäre spitze wenn mir jemand helfen könnte!!

Danke

Just_itt

--------------------------------------

Code

--------------------------------------

use strict;

use Getopt::Long;

my $mbox = "";

my $path = "";

my $countstart = 0;

my $i = 0;

GetOptions('mbox=s' => \$mbox,

'path=s' => \$path,

'countstart=i' => \$countstart,

'usage' => sub {usage});

$i = $countstart;

open(MBOX, $mbox) || die "can't open $mbox :(\n";

unless ($path eq "") { chdir($path) || die "bla" ; }

while (<MBOX>)

{

chomp;

if (/^From /)

{

print Variable $i

unless ($i == $countstart) {close(CYRUS) || die "can't close $i. :( \n";}

$i++;

while (-e "$i.") {$i++;}

open(CYRUS, ">$i.") || die "can't open $i. :(\n";

}

print CYRUS $_ . "\x0D\x0A";

}

close(MBOX) || die "can't open $mbox :(\n";

close(CYRUS) || die "can't close $i. :( \n";

exit(0);

Geschrieben

Punkt 1: <MBOX>

der Befehl <MBOX> liest eine Zeile aus der Datei und gibt wahr zurück solange er was lesen konnte. Die gelesene Zeile steht in der Variablen $_. while (<MBOX>) liest also zeilenweise eine Datei ein.

Punkt 2:

auf die Schnelle betrachtet ist die Kombination der beiden close(CYRUS) schuld. Kommentiere mal beide aus und setze close(CYRUS) direkt unter die Zeile print CYRUS $_ . "\x0D\x0A"; , also noch vor }.

Geschrieben

Hallo,

er gibt dir AFAIS eine Fehlermeldung beim ersten close(CYRUS), weil CYRUS garnicht geöffnet ist. :rolleyes:

Tipps:

  • starte Perl mit dem Switch -w (oder #!/bin/perl -w in der erste Zeile)
  • verwende use diagnostics

Gruß

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...