Gesucht: Erste Schritte

Liebe ExpertInnen,

nachdem mein erstes perl-script läuft, versuche ich zu modularisieren, kriege aber nicht raus, wie das zu machen ist.

  • subroutine als ostertag.pm in \lib eingestellt

    -w;
    use strict;

    sub ostertag {
    my ($jahr) = @_;

    return ($osterdatum);
    }

  • im main „use ostertag“

  • Aufruf liefert die Meldung

„Undefined subroutine &main::ostertag called at ostertage.pl line 10.“
Wenn ich das „use ostertag“ weglasse, kommt übrigens die gleiche Meldung. Der Fachmann lacht sich jetzt wohl einen Kropf, aber mir fehlt jede Idee. Mit einem kleinen Skeleton wäre mir sehr geholfen.

Gruß Ralf

Hallo,

die saubere Methode erfordert ein bisschen mehr Arbeit, aber da du Modulisierung anstrebst, präsentiere ich sie dir mal:

package Ostertag;
use strict;
require Exporter;

# "erbe" von Exporter:
our @ISA = qw(Exporter);

# lege fest, welche Funktionen exportiert werden:
our @EXPORT = qw(ostertag);
our %EXPORT\_TAGS = (":all" =\> \@EXPORT);

sub ostertag {
...
}

1;

Dabei mußt du beachten, dass das Modul true zurückliefert, daher die 1; in der letzten Zeile.
Benutzen kannst du es dann mit

use ostertag qw(ostertag);

oder

use ostertag qw(:all);

Als weitere Lektüre kann ich dir perldoc perlmod sowie perldoc perlmodlib sowie „How do I create a perl module“ in perlfaq7 empfehlen.

Grüße,
Moritz

Hallo.

Liebe ExpertInnen,

Eine unverdiente Bezeichnung :wink:

nachdem mein erstes perl-script läuft, versuche ich zu
modularisieren, kriege aber nicht raus, wie das zu machen ist.

Grundlegend: welche Perlversion wird verwendet ? Unter Windows wäre
das aktuell ‚ActivePerl‘ 5.8x, unter *nix Perl 5.8x. Bei Programmen mit Serverhintergrund ist dieser ebenfalls zu nennen, z.B. Apache 2.x

  • subroutine als ostertag.pm in \lib eingestellt

Auch in das Verzeichnis der aufrufenden perl-Datei ?

 -w;


> use strict;  
>   
> sub ostertag {  
> my ($jahr) = @\_;  
> .....  
> return ($osterdatum);  
> }

versucht ?

Die Fehlermeldung zu bringen ist schon mal gut :smile:
Aber ohne genauen Quellcode wird das schwieriger :frowning:
Das hier könnte noch als Skeleton dienen: http://wiki.perl-community.de/bin/view/Wissensbasis/…

HTH
mfg M.L.

Moin, M.L.,

danke, aber das war’s nicht so ganz. Mein Problem ist nicht die Konstruktion einer Subroutine, das ist längst erledigt :smile:)), sondern die Auslagerung der Subroutine in ein eigenes Modul, so dass sie von beliebiger Stelle her wiederverwendet werden kann, und damit auch das Einbinden und der Aufruf einer „externen“ Subroutine. Mit dem, was Moritz geschrieben hat, werde ich wohl zurechtkommen.

Gruß Ralf