Biggi: Package - Verarbeitung

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

  1. 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;  
    
    

    siehe auch hier

    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

    --
    Democracy is a device which ensures that we shall be governed no better than we deserve.
    (G. B. Shaw)
    1. 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!