Thread Subroutine calls über mehrere packages / module
(7 answers)
Opened by Haspasus at 2009-11-17 22:15
Hallo!
Mein derzeitiges Projekt besteht aus mehreren Modulen und einer Hauptroutine. Da die einzelnen Module natürlich auch zu anderem Zweck wiederverwendet werden können sollen, möchte ich bei einem der Module die Fehlerbehandlung auslagern. Soll heißen: Ich übergebe dem Modul eine Referenz auf eine Subroutine, die aufgerufen wird, sobald ein Fehler auftritt. Liegt die SUbroutine in meiner Hauptroutine, funktioniert das ganze problemlos. Aber wie kann ich eine Referenz auf eine Subroutine des Moduls "Modul2" übergeben (siehe hierzu main.pl:Zeile9 und Modul1.pm:Zeilen 14 und 19))? Ich möchte also, dass die Subroutine "printMessage" aus Modul1.pm die Subroutine "fehlerbehandlung" aus Modul2.pm aufruft. Ich würde mich freuen, wenn jemand das Problem lösen und auch erläutern kann, denn auch nach etlichen Seiten perldoc konnte ich die Lösung nicht finden. Der derzeitige (funktionierende) Stand: main.pl Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 #!/usr/bin/perl -w use Test::Case::Modul1; use Test::Case::Modul2; my $modul1 = new Test::Case::Modul1; my $modul2 = new Test::Case::Modul2; $modul1->setzeFehlerbehandlung(\&fehlerbehandlung); $modul1->printMessage(); $modul2->fehlerbehandlung("asdasd"); sub fehlerbehandlung { my $nachricht = shift; print "-" x 30; print "\n"; print "Fehlerbehandlung in der Hauptroutine\n"; print "Aufruf von: ".caller(0)."\n"; print "Nachricht: $nachricht\n"; print "-" x 30; print "\n"; } Modul1.pm Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 package Test::Case::Modul1; my $fehlerHandler; my $msg = "testfehler"; sub new { $self = shift; return $self; } sub setzeFehlerbehandlung { $self = shift; $fehlerHandler = shift; } sub printMessage { $self = shift; &$fehlerHandler($msg); } 1; Modul2.pm Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 package Test::Case::Modul2; sub new { $self = shift; return $self; } sub fehlerbehandlung { $self = shift; $msg = shift; print "O" x 30; print "\n"; print "Error handling in Modul2\n"; print "Caller was: ".caller(0)."\n"; print "Message: ".$msg."\n"; print "O" x 30; print "\n"; } 1; Gruß Haspasius |