Wie erstelle ich ein hybrides (Skript und Modul) Modul??

Inhalt:

In letzter Zeit kam häufiger die Frage danach, wie man ein hybrides Modul erstellen kann. Also ein Modul, das sowohl Modul als auch Skript sein kann. Ich habe hier mal ein Beispiel

Modul

package TestModul;

sub new{
  bless {},$_[0];
}

sub test{
  print "test\n";
}

my $scalar = caller;
print "Caller: $scalar\n";

return 1 if(caller);

test();

Skript

#!/usr/bin/perl

use strict;
use warnings;
use lib qw(.);
use TestModul;

my $test = TestModul->new();
$test->test();

Ausgabe

C:\community>perl TestModul.pm
Caller:
test

C:\community>perl modultest.pl
Caller: main
test

Wenn man es als Modul benutzt - wie beim ersten Aufruf - wird die 1 zurückgegeben, weil caller den Namen des packages zurückliefert, von dem aus das Modul benutzt wird. der Aufruf test() wird also nicht mehr ausgeführt.

Wird es aber als Skript ausgeführt, liefert caller im skalaren Kontext nichts zurück und der Aufruf test() wird ausgeführt.

Ergänzungen, Kommentare

Kommentare werden am besten in folgender Form vorgenommen, damit sie im Inhaltsverzeichnis angezeigt werden (natürlich ohne das <verbatim>):
---+++ Main.??? - 14 Jul 2003 - Betreff

UtilFaqSubForm edit

Titel Wie erstelle ich ein hybrides (Skript und Modul) Modul??
Autor ReneeBaecker
Bereich FaqModule
Tags Modul
Topic revision: 2007-05-25, TinaMueller
 
Bitte die NutzungsBedingungen beachten.
Bei Vorschlägen, Anfragen oder Problemen mit dem PerlCommunityWiki bitten wir um WebBottomBarExample">Rückmeldung.