Package - Verarbeitung – SELFHTML-Forum Forum als Ergänzung zum SELFHTML-Wiki und zur Dokumentation SELFHTML https://forum.selfhtml.org/self Package - Verarbeitung Fri, 27 Jul 07 11:25:07 Z https://forum.selfhtml.org/self/2007/jul/27/package-verarbeitung/1149136#m1149136 https://forum.selfhtml.org/self/2007/jul/27/package-verarbeitung/1149136#m1149136 <p>Hallo,<br> ich habe folgende Struktur:<br> Hauptprogramm<br>  ruft Subroutinen<br> Ende Hauptprogramm<br> Subroutine1<br> ...<br> Subroutinen<br>  $rc=isEmail($addr);<br> ....</p> <p>package CheckEMail;<br> use strict;<br> use vars qw($VERSION @ISA @EXPORT_OK $MailRegEx);<br> require Exporter;<br> @ISA       = qw(Exporter);<br> @EXPORT_OK = qw(isEmail $MailRegEx);<br> ........<br> sub isEmail($) {<br>   my $mail = shift;<br>   my $ergf= ($mail =~ /^$MailRegEx$/o);<br>   return $mail =~ /^$MailRegEx$/o;<br> }</p> <p>1;</p> <p>Ich bekomme an der Aufrufstelle von isEmail folgenden Fehler in der log-Datei:<br> Undefined subroutine &ModPerl::ROOT::ModPerl::Registry::C:/programmpfad/prog.pl::isEmail</p> <p>Namen habe ich zig-mal überprüft auch Groß-Kleinschreibung.<br> Wer hat eine Idee, woran das liegen könnte?<br> Weitere Fragen:<br> Stellt man Subroutinen besser vor oder hinter das Hauptprogramm?<br> Wie stelle ich es an, das package als externe Datei einzubinden?</p> <p>Danke für Eure Hilfe</p> Package - Verarbeitung Fri, 27 Jul 07 20:32:36 Z https://forum.selfhtml.org/self/2007/jul/27/package-verarbeitung/1149137#m1149137 https://forum.selfhtml.org/self/2007/jul/27/package-verarbeitung/1149137#m1149137 <p>Hallo!</p> <blockquote> <p>Wer hat eine Idee, woran das liegen könnte?</p> </blockquote> <p>*meld* ich hab ne Idee</p> <p>Du exportierst zwar die 'isEmail'-Subroutine aus ihrem Namensraum, allerdings musst du sie dazu auch explizit im Hauptnamensraum importieren.<br> Alternativ rufst du sie mit Angabe des Namensraumes auf:<br> my $rc = CheckEMail::isEmail($addr);</p> <p>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:</p> <pre><code class="block language-perl"> <span class="token keyword">use</span> strict<span class="token punctuation">;</span> <span class="token keyword">use</span> warnings<span class="token punctuation">;</span> </code></pre> <p><a href="http://de.selfhtml.org/perl/intro.htm#programmierstil" rel="nofollow noopener noreferrer">siehe auch hier</a></p> <blockquote> <p>Weitere Fragen:<br> Stellt man Subroutinen besser vor oder hinter das Hauptprogramm?</p> </blockquote> <p>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.</p> <blockquote> <p>Wie stelle ich es an, das package als externe Datei einzubinden?</p> </blockquote> <p>Im gleichen Verzeichnis wie das Skript als CheckEmail.pm speichern, im Skript selbst mit <code class="language-perl"><span class="token keyword">use</span> CheckEmail<span class="token punctuation">;</span></code> einbinden. Dann funktioniert das auch mit dem Exportieren auf Anhieb :)</p> <p>Zudem ist IMHO nur so ist das Bilden eines eigenen, nicht objektorierentierten Packages erst sinnvoll.</p> <blockquote> <p>Danke für Eure Hilfe</p> </blockquote> <p>Büddeschön</p> <p>Grüße, Skrilax</p> <div class="signature">-- <br> Democracy is a device which ensures that we shall be governed no better than we deserve.<br> (G. B. Shaw) </div> Package - Verarbeitung Fri, 27 Jul 07 20:52:39 Z https://forum.selfhtml.org/self/2007/jul/27/package-verarbeitung/1149138#m1149138 https://forum.selfhtml.org/self/2007/jul/27/package-verarbeitung/1149138#m1149138 <p>Hallo erst mal, und danke!</p> <blockquote> <p>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:</p> <pre><code class="block language-perl"></code></pre> </blockquote> <blockquote> <p>use strict;<br> use warnings;</p> </blockquote> <pre><code class="block"> > Die benutze ich - also nichts mit schämen! </code></pre>