Leser: 23
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"; }
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;
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;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
#!/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->setzeNachricht("super duper hyper fehler text!"); $modul1->setzeFehlerbehandlung($modul2,"fehlerbehandlung"); $modul1->printMessage(); 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"; }
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; my $fehlerHandler; my $fehlerfunc; my $msg = "testfehler"; sub new { my $self = shift; return $self; } sub setzeFehlerbehandlung { my $self = shift; $fehlerHandler = shift; $fehlerfunc = shift; } sub printMessage { my $self = shift; $fehlerHandler->${fehlerfunc}($msg); } sub getError { my $self = shift; return $msg; } sub setzeNachricht { my $self = shift; my $text = shift; $msg = $text; } 1;
QuoteGlobal symbol "%self" requires explicit package name at Test/Case/Modul1.pm line 37.
syntax error at Test/Case/Modul1.pm line 37, near "$self{FEHLERFUNC"
Global symbol "$self" requires explicit package name at Test/Case/Modul1.pm line 37.
syntax error at Test/Case/Modul1.pm line 38, near "}"
Compilation failed in require at ./main.pl line 6.
BEGIN failed--compilation aborted at ./main.pl line 6.
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 38 39 40
package Test::Case::Modul1; use strict; use warnings; sub new { my $self = shift; my $ref = {}; bless($ref, $self); $ref->{FEHLERHANDLER}=undef; $ref->{FEHLERFUNC}=undef; $ref->{FEHLERMSG}="standardfehler"; $ref; } sub setzeFehlerbehandlung { my $self = shift; $self->{FEHLERHANDLER} = shift; $self->{FEHLERFUNC} = shift; } sub getError { my $self = shift; return $self->{FEHLERMSG}; } sub setzeNachricht { my $self = shift; $self->{FEHLERMSG} = shift; } sub printMessage { my $self = shift; $self->{FEHLERHANDLER}->$self{FEHLERFUNC}($self->{FEHLERMSG}); } 1;
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");
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;
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;
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");
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;
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;
2009-11-17T23:29:34 topeg...[Zweite Variante, Modul1:]
Code (perl): (dl )1 2 3 4 5 6 7sub new { my $class = shift; my $self = {}; my $self->{FehlerHandler} = $self; # <-- bless($self,$class); return $self; }