Thread Subroutine calls über mehrere packages / module
(7 answers)
Opened by Haspasus at 2009-11-17 22:15
Ich habe es mal überarbeitet.
So würde ich es machen, da man damit sehr flexible ist. main.pl Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 #!/usr/bin/perl use strict: use warnings; use Test::Case::Modul1; use Test::Case::Modul2; my $modul1 = new Test::Case::Modul1; my $modul2 = new Test::Case::Modul2; $modul1->setzeFehlerbehandlung( sub{ $modul2->fehlerbehandlung(@_); }); $modul1->printMessage("testfehler"); 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 22 23 24 25 26 27 28 29 package Test::Case::Modul1; use strict; use warnings; sub new { my $class = shift; my $self = {}; my $self->{FehlerHandler} = sub{warn("$_[0]\n"); 1}; bless($self,$class); return $self; } sub setzeFehlerbehandlung { my $self = shift; my $handler = shift; if(ref($handler) eq 'CODE'){ $self->{FehlerHandler}=$handler; return 1; } return 0; } sub printMessage { my $self = shift; my $msg = shift || ''; return $self->{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 23 24 25 26 27 package Test::Case::Modul2; use strict; use warnings; sub new { my $class = shift; my $self = {}; bless($self,$class); return $self; } sub fehlerbehandlung { my $self = shift; my $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"; return 1; } 1; #################################################################### oder etwas anders: Das wäre ähnlich dem was Java als "Interface" kennt main.pl Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 #!/usr/bin/perl use strict: use warnings; use Test::Case::Modul1; use Test::Case::Modul2; my $modul1 = new Test::Case::Modul1; my $modul2 = new Test::Case::Modul2; $modul1->setzeFehlerbehandlung( $modul2 ); $modul1->printMessage("testfehler"); 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 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 package Test::Case::Modul1; use strict; use warnings; sub new { my $class = shift; my $self = {}; my $self->{FehlerHandler} = $self; bless($self,$class); return $self; } sub setzeFehlerbehandlung { my $self = shift; my $handler = shift; if($handler->can('fehlerbehandlung')){ $self->{FehlerHandler}=$handler; return 1; } return 0; } sub printMessage { my $self = shift; my $msg = shift || ''; return $self->{FehlerHandler}->fehlerbehandlung($msg); } sub fehlerbehandlung { my $self = shift; my $msg = shift; warn("$msg"); return 1; } 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 23 24 25 26 27 package Test::Case::Modul2; use strict; use warnings; sub new { my $class = shift; my $self = {}; bless($self,$class); return $self; } sub fehlerbehandlung { my $self = shift; my $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"; return 1; } 1; Beides ungetestet. |