Package - Verarbeitung
Biggi
- perl
Hallo,
ich habe folgende Struktur:
Hauptprogramm
ruft Subroutinen
Ende Hauptprogramm
Subroutine1
...
Subroutinen
$rc=isEmail($addr);
....
package CheckEMail;
use strict;
use vars qw($VERSION @ISA @EXPORT_OK $MailRegEx);
require Exporter;
@ISA = qw(Exporter);
@EXPORT_OK = qw(isEmail $MailRegEx);
........
sub isEmail($) {
my $mail = shift;
my $ergf= ($mail =~ /^$MailRegEx$/o);
return $mail =~ /^$MailRegEx$/o;
}
1;
Ich bekomme an der Aufrufstelle von isEmail folgenden Fehler in der log-Datei:
Undefined subroutine &ModPerl::ROOT::ModPerl::Registry::C:/programmpfad/prog.pl::isEmail
Namen habe ich zig-mal überprüft auch Groß-Kleinschreibung.
Wer hat eine Idee, woran das liegen könnte?
Weitere Fragen:
Stellt man Subroutinen besser vor oder hinter das Hauptprogramm?
Wie stelle ich es an, das package als externe Datei einzubinden?
Danke für Eure Hilfe
Hallo!
Wer hat eine Idee, woran das liegen könnte?
*meld* ich hab ne Idee
Du exportierst zwar die 'isEmail'-Subroutine aus ihrem Namensraum, allerdings musst du sie dazu auch explizit im Hauptnamensraum importieren.
Alternativ rufst du sie mit Angabe des Namensraumes auf:
my $rc = CheckEMail::isEmail($addr);
Was mir an der Stelle grad auffällt: Benutzt du etwa gar nicht das strict-Pragma? Sofort ab in die Ecke zum Schämen! Danach folgende Zeilen an den Anfang des Skriptes schreiben und die Fehlermeldungen beseitigen:
use strict;
use warnings;
Weitere Fragen:
Stellt man Subroutinen besser vor oder hinter das Hauptprogramm?
Geschmackssache. Prototypen werden allerdings nur erkannt, wenn du sie vor dem ersten Aufruf definierst. Die Subroutine selbst kann deswegen ja immer noch unten drunter stehen, was in der Regel der Übersicht zuträglich ist.
Wie stelle ich es an, das package als externe Datei einzubinden?
Im gleichen Verzeichnis wie das Skript als CheckEmail.pm speichern, im Skript selbst mit use CheckEmail;
einbinden. Dann funktioniert das auch mit dem Exportieren auf Anhieb :)
Zudem ist IMHO nur so ist das Bilden eines eigenen, nicht objektorierentierten Packages erst sinnvoll.
Danke für Eure Hilfe
Büddeschön
Grüße, Skrilax
Hallo erst mal, und danke!
Was mir an der Stelle grad auffällt: Benutzt du etwa gar nicht das strict-Pragma? Sofort ab in die Ecke zum Schämen! Danach folgende Zeilen an den Anfang des Skriptes schreiben und die Fehlermeldungen beseitigen:
use strict;
use warnings;
>
Die benutze ich - also nichts mit schämen!