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
#!/usr/bin/perl use strict; use warnings; use Data::Dumper; local $Data::Dumper::Purity; $Data::Dumper::Purity = 1; local $Data::Dumper::Useqq; $Data::Dumper::Useqq = 1; local $Data::Dumper::Deparse = 1; $Data::Dumper::Deparse = 1; local $Data::Dumper::Sortkeys; $Data::Dumper::Sortkeys = sub { my ($hash) = @_; return [(sort {lc $a cmp lc $b} keys %$hash)]; }; use 5.010; system 'cls'; my @dispatch = ( { moduldatei => "./test_require2.pl", aufruf_sub => \&subname, }, ); my %varenv = (test1 => 'start'); my $href = $dispatch[0]; require $href->{moduldatei}; $href->{aufruf_sub}(\%varenv); say Dumper(\%varenv);
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
#!/usr/bin/perl use strict; use warnings; sub subname { my ($varenv) = @_; $varenv->{test2} = 'test2 ok'; if (!defined $varenv->{zeiger_geladen}) { my $code = require "./test_require3.pl"; $code->($varenv); } } return '1';
1 2 3 4 5 6 7 8 9
#!/usr/bin/perl use strict; use warnings; no warnings 'void'; sub { my ($varenv) = @_; $varenv->{test3} = 'hier bin ich!'; }
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
#!/usr/bin/perl use strict; use warnings; use Data::Dumper; local $Data::Dumper::Purity; $Data::Dumper::Purity = 1; local $Data::Dumper::Useqq; $Data::Dumper::Useqq = 1; local $Data::Dumper::Deparse = 1; $Data::Dumper::Deparse = 1; local $Data::Dumper::Sortkeys; $Data::Dumper::Sortkeys = sub { my ($hash) = @_; return [(sort {lc $a cmp lc $b} keys %$hash)]; }; use 5.010; system 'cls'; require "./test_require3.pl"; my @dispatch = ( { moduldatei => "./test_require2.pl", aufruf_sub => \&subname, }, ); my %varenv = (test1 => 'start'); my $href = $dispatch[0]; require $href->{moduldatei}; $href->{aufruf_sub}(\%varenv); say Dumper(\%varenv);
1 2 3 4 5 6 7 8 9 10 11 12
#!/usr/bin/perl use strict; use warnings; no warnings 'void'; print "3 wird geladen: ".join(' ~ ',caller)."\n"; sub { my ($varenv) = @_; $varenv->{test3} = 'hier bin ich!'; $varenv->{zeiger_geladen} = defined; }
$varenv->{zeiger_geladen} = defined;
$varenv->{test2} = ...;
1 2 3 4 5 6 7
sub zeigeWattzahl { my $self = shift; my $test = shift; print "'" . $self->{name} . "' hat eine Birne mit "; print $self->{wattzahl} . " Watt.\n"; say $test->{hans}; }
2020-12-20T09:32:03 biancaSehr gut geschrieben, flüssig lesbar.
2020-12-20T09:32:03 biancaIch arbeite schon lange mit Perl, habe aber nie eine große Tiefe erreicht.
Quote[*]Im ganzen Text ist $classname nicht erklärt. Was ist das? Ist das der <Magie ein> Schalter?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
#!/usr/bin/python # coding: utf-8 # OOP-Beispielskript 3 class Lamp: def __init__(self, wattzahl = 40, name = "Standardlampe"): self.wattzahl = wattzahl self.name = name def zeigeWattzahl(self): print "'" + self.name + "' hat eine Birne mit " + str(self.wattzahl) + " Watt." lamp = Lamp(wattzahl = 11) lamp.zeigeWattzahl()
Quote[*]Unter 5. steht im letzten Satz die Rückgabe mit "return". Wie sähe das aus und wofür bräuchte man das? Man hat doch die Möglichkeit, unendlich viele Attribute zu definieren.
Quote[*]Zu 8.: definiere ich die Wattzahl mit 0 macht die Magie daraus auch 40 als hätte man nichts angegeben. Ist vielleicht nicht in jedem Fall erwünscht, denn der Parameter fehlt ja nicht. Ein Hinweis darauf wäre m. E. sinnvoll.
Quote[*]Zur Vererbung: beeindruckende Möglichkeiten. Wenn man nun aber eine Methode versehentlich neu definiert kommt keine Warnung. Anders als das bei sub's der Fall ist. Kann man sich selbst dafür eine Sicherheit einbauen?
Quote[*]Ergänzungsvorschlag als Frage: gibt es immer nur ein $self oder kann man sich in komplexen Fällen auch mehrere definieren?
Quote[*]Wenn ich eine übergreifende Variable %env hereingeben will, ist das dann so korrekt (funktionieren tut es, was aber ja nicht immer best practice ist)?
2020-12-20T09:32:03 biancaAuf jeden Fall werde ich deinen Text auf meinen "Spickzettel" setzen und die nächste größere sub wird stattdessen ein package. Ich hatte in Tutorial für Module u. a. schon mal einen Anlauf dazu genommen aber bin wieder ab gekommen.
Danke für deine Arbeit!