From ss5 at renormalist.net Thu Oct 6 06:33:06 2011 From: ss5 at renormalist.net (Steffen Schwigon) Date: Thu, 06 Oct 2011 14:33:06 +0100 Subject: [Dresden-pm] Heute Message-ID: <87ipo22qjx.fsf@renormalist.net> falls einer fragt, ich tendiere zu Verschieben auf nächste Woche, weil ich etwas kränk bin. Falls aber doch, in eine Kneipe schaff ich's noch, dann aber mir SMS schicken. Kind regards, Steffen -- Steffen Schwigon From ss5 at renormalist.net Thu Oct 6 08:50:59 2011 From: ss5 at renormalist.net (Steffen Schwigon) Date: Thu, 06 Oct 2011 16:50:59 +0100 Subject: [Dresden-pm] Heute In-Reply-To: <87ipo22qjx.fsf@renormalist.net> (Steffen Schwigon's message of "Thu, 06 Oct 2011 14:33:06 +0100") References: <87ipo22qjx.fsf@renormalist.net> Message-ID: <87ehyq2k64.fsf@renormalist.net> Steffen Schwigon writes: > falls einer fragt, ich tendiere zu Verschieben auf nächste Woche, weil > ich etwas kränk bin. Falls aber doch, in eine Kneipe schaff ich's > noch, dann aber mir SMS schicken. Wir (mindestens 2) sind ab ca. 2o°° Terasse am Bischofsplatz. Steffen -- Steffen Schwigon From hd.kirmse at gmx.de Mon Oct 17 00:50:10 2011 From: hd.kirmse at gmx.de (Hans-Dietrich Kirmse) Date: Mon, 17 Oct 2011 09:50:10 +0200 Subject: [Dresden-pm] Problem mit 'exit', 'die' und 'croak' Message-ID: <4E9BDE32.9030004@gmx.de> Hallo, euer Zaungast aus Thüringen muss euch wiedermal belästigen. Ich habe folgendes Problem. Für unser Schulserver-Projekt habe ich eine Anzahl von Scripten zur User- und Rechnerverwaltung geschrieben. Damit diese von den betreffenden Lehrern genutzt werden können, werden die über ein Webinterface aufgerufen. Dieses wird von einem anderen Entwickler in PHP erstellt. Das Problem sind die Ausnahmen. Er möchte einen Rückgabecode mit einer Fehlernummer, also "exit( fehlernummer )". Andererseits möchte ich gern aussagekräftige Fehlermeldungen wie sie von "die" bzw. "croak" geliefert werden (zusätzlich zu meinen Fehlermeldungen). Meine Frage: wie kann ich 'croak' verwenden und trotzdem einen Fehlercode zurückgeben? - Ich stelle mir das so vor, dass man doch auf diese Variable irgendwie zugreifen kann und den Fehlercode explizit setzt. Allerdings habe ich nicht gefunden, welche Variable das wäre. Oder vielleicht gibt es ja eine Lösung, die ich trotz intensiver Suche in der (deutschsprachigen) Literatur und im Web nicht gefunden habe. Wäre für Vorschläge / Hinweise sehr dankbar. Viele Grüße Hans-Dietrich From falk.herrmann at bike24.net Mon Oct 17 02:43:41 2011 From: falk.herrmann at bike24.net (Falk Herrmann) Date: Mon, 17 Oct 2011 11:43:41 +0200 Subject: [Dresden-pm] Problem mit 'exit', 'die' und 'croak' In-Reply-To: <4E9BDE32.9030004@gmx.de> References: <4E9BDE32.9030004@gmx.de> Message-ID: <4E9BF8CD.9060202@bike24.net> Was spricht denn gegen print "...fehlerbeschreibung..."; exit(123); Beides könntest Du in eine eigene die() oder exit() Funktion packen. Hans-Dietrich Kirmse wrote: > Hallo, > > euer Zaungast aus Thüringen muss euch wiedermal belästigen. > > Ich habe folgendes Problem. Für unser Schulserver-Projekt habe ich eine > Anzahl von Scripten zur User- und Rechnerverwaltung geschrieben. Damit > diese von den betreffenden Lehrern genutzt werden können, werden die > über ein Webinterface aufgerufen. Dieses wird von einem anderen > Entwickler in PHP erstellt. > > Das Problem sind die Ausnahmen. Er möchte einen Rückgabecode mit einer > Fehlernummer, also "exit( fehlernummer )". Andererseits möchte ich gern > aussagekräftige Fehlermeldungen wie sie von "die" bzw. "croak" geliefert > werden (zusätzlich zu meinen Fehlermeldungen). > > Meine Frage: wie kann ich 'croak' verwenden und trotzdem einen > Fehlercode zurückgeben? - Ich stelle mir das so vor, dass man doch auf > diese Variable irgendwie zugreifen kann und den Fehlercode explizit > setzt. Allerdings habe ich nicht gefunden, welche Variable das wäre. > Oder vielleicht gibt es ja eine Lösung, die ich trotz intensiver Suche > in der (deutschsprachigen) Literatur und im Web nicht gefunden habe. > > Wäre für Vorschläge / Hinweise sehr dankbar. > > Viele Grüße > Hans-Dietrich > _______________________________________________ > Dresden-pm mailing list > Dresden-pm at pm.org > http://mail.pm.org/mailman/listinfo/dresden-pm > > From hd.kirmse at gmx.de Mon Oct 17 03:21:10 2011 From: hd.kirmse at gmx.de (Hans-Dietrich Kirmse) Date: Mon, 17 Oct 2011 12:21:10 +0200 Subject: [Dresden-pm] Problem mit 'exit', 'die' und 'croak' In-Reply-To: <4E9BF8CD.9060202@bike24.net> References: <4E9BDE32.9030004@gmx.de> <4E9BF8CD.9060202@bike24.net> Message-ID: <4E9C0196.2030503@gmx.de> Hallo Falk, Am 17.10.2011 11:43, schrieb Falk Herrmann: > Was spricht denn gegen > > print "...fehlerbeschreibung..."; > exit(123); es fehlt dann die Fehlermeldung, die "die" bzw. "croak" generiert. Da steht für mich nun die Frage, wie ich das wiederum simmulieren kann, also Scriptname (okay, das ist $0) und die Zeilennummer - das Letztere ist mir nicht klar wie das geht. :( > Beides könntest Du in eine eigene die() oder exit() Funktion packen. Das ist mir klar. Viele Grüße Hans-Dietrich From steffen.winkler at gmx.net Mon Oct 17 05:09:28 2011 From: steffen.winkler at gmx.net (Steffen Winkler) Date: Mon, 17 Oct 2011 14:09:28 +0200 Subject: [Dresden-pm] Problem mit 'exit', 'die' und 'croak' In-Reply-To: <4E9C0196.2030503@gmx.de> References: <4E9BDE32.9030004@gmx.de> <4E9BF8CD.9060202@bike24.net> <4E9C0196.2030503@gmx.de> Message-ID: <20111017120928.250480@gmx.net> "die" kann man mit eval abfangen: eval { die 'blaaaa'; # oder croak, confess, ... } die "Dumm gelaufen weil $@"; "exit", indem man: my $exit_code; { local *CORE::GLOBAL::exit = sub { $exit_code = shift; }; call_den_code_der_exit_aufruft(); } # nach dem Block ist exit wieder so, wie es davor war print "Das ist der exit_code $exit_code"; my $mein_eigener_exit_code = 123; exit $mein_eigener_exit_code; -- Empfehlen Sie GMX DSL Ihren Freunden und Bekannten und wir belohnen Sie mit bis zu 50,- Euro! https://freundschaftswerbung.gmx.de From steffen.winkler at gmx.net Mon Oct 17 05:21:29 2011 From: steffen.winkler at gmx.net (Steffen Winkler) Date: Mon, 17 Oct 2011 14:21:29 +0200 Subject: [Dresden-pm] Problem mit 'exit', 'die' und 'croak' In-Reply-To: <4E9C0196.2030503@gmx.de> References: <4E9BDE32.9030004@gmx.de> <4E9BF8CD.9060202@bike24.net> <4E9C0196.2030503@gmx.de> Message-ID: <20111017122129.200850@gmx.net> "exit", war falsch beschrieben, weil: ist ja schon compiliert. Also in die Compilierungsphase geschoben: my $exit_code; BEGIN { *CORE::GLOBAL::exit = sub { $exit_code = shift; }; } call_den_code_der_exit_aufruft(); print "Das ist der exit_code $exit_code"; my $mein_eigener_exit_code = 123; CORE::exit $mein_eigener_exit_code; # Entweder ruft man CORE::exit auf, also das Original oder man hebt sich den Code auf, bevor man überschreibt. -- NEU: FreePhone - 0ct/min Handyspartarif mit Geld-zurück-Garantie! Jetzt informieren: http://www.gmx.net/de/go/freephone From hd.kirmse at gmx.de Mon Oct 17 07:04:12 2011 From: hd.kirmse at gmx.de (Hans-Dietrich Kirmse) Date: Mon, 17 Oct 2011 16:04:12 +0200 Subject: [Dresden-pm] Problem mit 'exit', 'die' und 'croak' In-Reply-To: <20111017120928.250480@gmx.net> References: <4E9BDE32.9030004@gmx.de> <4E9BF8CD.9060202@bike24.net> <4E9C0196.2030503@gmx.de> <20111017120928.250480@gmx.net> Message-ID: <4E9C35DC.1060802@gmx.de> Hallo Steffen, Am 17.10.2011 14:09, schrieb Steffen Winkler: > "die" kann man mit eval abfangen: > > eval { > die 'blaaaa'; # oder croak, confess, ... > } > die "Dumm gelaufen weil $@"; ja, dass erfüllt natürlich alle meine Wünsche, zumindest wenn ich das richtig verstanden habe. Also ich fange "croak" ab, gebe meine Infos und den Inhalt von $@ mit print-Befehlen aus und rufe dann "exit(errorcode)" auf. - Danke. > "exit", indem man: > my $exit_code; > { > local *CORE::GLOBAL::exit = sub { > $exit_code = shift; > }; > call_den_code_der_exit_aufruft(); > } > # nach dem Block ist exit wieder so, wie es davor war > print "Das ist der exit_code $exit_code"; > my $mein_eigener_exit_code = 123; > exit $mein_eigener_exit_code; Das habe ich nicht verstanden, auch nicht in der 2. Mail. Aber so wie ich die Sache sehe, brauche ich es auch nicht mehr. Danke auch an alle anderen für's Mitdenken. Viele Grüße Hans-Dietrich From oeste.sebastian at googlemail.com Tue Oct 18 02:53:03 2011 From: oeste.sebastian at googlemail.com (Sebastian Oeste) Date: Tue, 18 Oct 2011 11:53:03 +0200 Subject: [Dresden-pm] Dresden-pm Nachrichtensammlung, Band 97, Eintrag 2 In-Reply-To: References: Message-ID: Hi, ich bin noch Perl anfänger aber wäre es nicht auch möglich die Zeilennummer und den aufrufendenden Kontext über die caller() Funktion herrauszufinden? Gruß Basti -------------- nächster Teil -------------- Ein Dateianhang mit HTML-Daten wurde abgetrennt... URL: From steffen.winkler at gmx.net Tue Oct 18 03:25:46 2011 From: steffen.winkler at gmx.net (Steffen Winkler) Date: Tue, 18 Oct 2011 12:25:46 +0200 Subject: [Dresden-pm] Dresden-pm Nachrichtensammlung, Band 97, Eintrag 2 In-Reply-To: References: Message-ID: <20111018102546.156490@gmx.net> Hallo, wird die Sub aufgerufen, dann kann man mit dem caller schauen woher. Hat man eine Sub aufgerufen und die endet mit einer Exception wie die, croak, confess, ..., dann muss man reagieren, also die Exception abfangen. Ich hatte das mit eval { ... } und $@ beschrieben, möchte aber noch hinweisen, dass http://search.cpan.org/perldoc?Try::Tiny die elegantere Variante ist. Da muss man nicht so mit den kryptischen Variablen wie $@ arbeiten. --Steffen -------- Original-Nachricht -------- > Datum: Tue, 18 Oct 2011 11:53:03 +0200 > Von: Sebastian Oeste > An: dresden-pm at pm.org > Betreff: Re: [Dresden-pm] Dresden-pm Nachrichtensammlung, Band 97, -- Empfehlen Sie GMX DSL Ihren Freunden und Bekannten und wir belohnen Sie mit bis zu 50,- Euro! https://freundschaftswerbung.gmx.de From hd.kirmse at gmx.de Tue Oct 18 05:28:48 2011 From: hd.kirmse at gmx.de (Hans-Dietrich Kirmse) Date: Tue, 18 Oct 2011 14:28:48 +0200 Subject: [Dresden-pm] Dresden-pm Nachrichtensammlung, Band 97, Eintrag 2 In-Reply-To: <20111018102546.156490@gmx.net> References: <20111018102546.156490@gmx.net> Message-ID: <4E9D7100.2010609@gmx.de> Hallo Steffen, hallo Sebastian, Am 18.10.2011 12:25, schrieb Steffen Winkler: > Hallo, > > wird die Sub aufgerufen, dann kann man mit dem caller schauen woher. > Hat man eine Sub aufgerufen und die endet mit einer Exception wie die, croak, confess, ..., dann muss man reagieren, also die Exception abfangen. > > Ich hatte das mit eval { ... } und $@ beschrieben, möchte aber noch hinweisen, dass http://search.cpan.org/perldoc?Try::Tiny die elegantere Variante ist. Da muss man nicht so mit den kryptischen Variablen wie $@ arbeiten. Ich habe inzwischen das gesuchte Token für Zeilennummer wieder gefunden: __LINE__ (ich hatte nach __LINES__ gesucht und dadurch nicht gefunden). Damit ergibt sich zumindest für 'croak' (nicht für 'die'!) die m.E. einfache Lösung mit sowas wie: print 'Fehler im File ', __FILE__, ' in Zeile ', __LINE__ , " aufgetreten!\n"; Anm.: diese Zeile habe ich mal als einzige Zeile in eine Textdatei 'test.txt' gesteckt und (unter Windows) mit 'perl test.txt' aufgerufen. Die Ausgabe sieht dann so aus: Fehler im File test.txt in Zeile 1 aufgetreten! Zusammen mit einer ordentlichen Beschreibung (nach Perl Best Practices) und dann das "exit(errornummer)" und mein Problem ist erledigt. Es wird in dem Buch bis auf eine Ausnahme eh 'croak' statt 'die' empfohlen, also ist das nach meinem derzeitigen Kenntnisstand die optimale Lösung. Nochmals meinen Dank. viele Grüße Hans-Dietrich From ss5 at renormalist.net Wed Oct 19 01:36:09 2011 From: ss5 at renormalist.net (Steffen Schwigon) Date: Wed, 19 Oct 2011 09:36:09 +0100 Subject: [Dresden-pm] Sponsoring cpantesters.org Message-ID: <87vcrlbcp2.fsf@renormalist.net> Hi! Falls einer Böcke hat, sich als ?dresden.pm? an einem Sponsoring für http://cpantesters.org zu beteiligen, bitte bei mir melden. Kind regards, Steffen -- Steffen Schwigon Dresden Perl Mongers From mailinglisten at renee-baecker.de Thu Oct 20 11:07:13 2011 From: mailinglisten at renee-baecker.de (mailinglisten at renee-baecker.de) Date: Thu, 20 Oct 2011 20:07:13 +0200 Subject: [Dresden-pm] 14. Deutscher Perl-Workshop - CfP Message-ID: <20111020_180713_096154.mailinglisten@renee-baecker.de> Hallo zusammen, der 13. Deutsche Perl-Workshop ist noch nicht vorbei, aber man darf sich schon auf 2012 freuen: Die Erlanger Perlmongers richten zusammen mit dem Kommunikationsnetz Franken den 14. Deutschen Perl-Workshop vom 5. bis 7. März 2012 aus. Die Schwerpunkte werden auf "modernem Perl", Einsteiger und auf praktische Workshops gelegt. Ab sofort können auch Vorträge unter http://conferences.yapceurope.org/gpw2012/newtalk eingereicht werden. Der Call for Papers ist unter http://conferences.yapceurope.org/gpw2012/wiki?node=CallForPapers zu finden. - Renée From oeste.sebastian at googlemail.com Wed Oct 26 04:14:37 2011 From: oeste.sebastian at googlemail.com (Sebastian Oeste) Date: Wed, 26 Oct 2011 13:14:37 +0200 Subject: [Dresden-pm] =?iso-8859-1?q?Perldoc_ist_nicht_vollst=E4ndig?= Message-ID: Hallo, ich habe folgendes Problem. Ich habe die Vermutung das meine perldoc Dokumentation nicht ganz vollständig ist. Zum Beispiel findet perldoc Test::Tutorial keine Dokumentation obwohl diese eigentlich da sein müsste. Bei anderen Modulen wie bspw. perldoc Test::Simple funktioniert es dann wieder. Wie kann ich dieses Problem beheben ? Ich hab auch schon gegooglet aber nichts hilfreiches gefunden. Vielen Dank im vorraus. Sebastian -------------- nächster Teil -------------- Ein Dateianhang mit HTML-Daten wurde abgetrennt... URL: From hd.kirmse at gmx.de Wed Oct 26 06:26:23 2011 From: hd.kirmse at gmx.de (Hans-Dietrich Kirmse) Date: Wed, 26 Oct 2011 15:26:23 +0200 Subject: [Dresden-pm] Frage zur Implementation von einer Schnittstelle Message-ID: <4EA80A7F.7000602@gmx.de> Hallo, ich komme wieder mit einer sicherlich exotischen Frage: wie gestaltet man eine Schnittstelle für eine "externe" Funktion. Ich meine damit Folgendes: ich habe für unser Schulserverprojekt eine ganze Reihe von Perl-Scripten zur User- und Rechnerverwaltung erstellt. Diese Scripte habe ich dann in ein Debian-Paket gesteckt und die werden darüber eingespielt. Nun ist es aber so, das diese Scripte nicht die Anforderungen von allen potentiellen Nutzern erfüllen werden. Es soll jetzt die Möglichkeit eingerichtet werden, dass andere Entwickler Scripte (Funktionen) schreiben, die sich in die von mir bereitgestellten Funktionen einklinken. Ein einfaches Beispiel: Beim Versetzen von Usern bzw. Klassen wird durch mein Script folgendes Codefragment aufgerufen: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # wir bilden den kompletten Name $name_curr = $forename_curr . ' ' . $lastname_curr; # und tragen den in den LDAP ein $mesg = $ldap->modify( $entry->dn, replace => { cn => $name_curr, sn => $lastname_curr, givenName => $forename_curr, displayName => $name_curr } ); $mesg->code and die "Abbruch: $mesg->error"; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Es wurden Wünsche geäußert, dass der displayname anders gebildert werden sollte, nämlich neben dem Name auch die Klasse angegeben werden. Andere lehnen das grundsätzlich ab, weil die Klasse ein eigener Entry im LDAP ist und es damit zu nicht gewollten Redundanzen kommt. Lösung des Problems, das für die, die das Attribut 'displayName' anders haben wollen, ein Funktion bereitzustellen, die eben für diesen User die Klasse im LDAP sucht und dann einen anderen Displaynamen bereitstellt. Das Problem ist nicht, wie so eine Funktion aussieht - das ist eher trivial. Das Problem ist, wie mache ich das, dass ein anderer Programmierer eine solche Funktion erstellen kann, diese in ein Modul steckt, dieses Modul in ein Debian-Paket steckt und wenn dieses Debian-Paket eingespielt wird, dass dann automatisch diese Funktion aufgerufen wird. Diese Sache hier mit dem Displayname ist dabei nur ein Beispiel. Es geht überhaupt darum, wie man so eine Schnittstelle implementiert. Ich habe dazu in der Literatur und im Netz (aber nur deutschsprachig) nicht gefunden. :( Ich hoffe, ich konnte mein Problem verständlich genug ausdrücken. Für jeden Hinweis, Idee wäre ich sehr dankbar. Viele Grüße Hans-Dietrich From ss5 at renormalist.net Fri Oct 28 04:01:55 2011 From: ss5 at renormalist.net (Steffen Schwigon) Date: Fri, 28 Oct 2011 12:01:55 +0100 Subject: [Dresden-pm] =?utf-8?q?Perldoc_ist_nicht_vollst=C3=A4ndig?= In-Reply-To: (Sebastian Oeste's message of "Wed, 26 Oct 2011 13:14:37 +0200") References: Message-ID: <87d3dhpefw.fsf@renormalist.net> Sebastian Oeste writes: > Hallo, > ich habe folgendes Problem. Ich habe die Vermutung das meine perldoc > Dokumentation nicht ganz vollständig ist. > Zum Beispiel findet perldoc Test::Tutorial keine Dokumentation obwohl diese > eigentlich da sein müsste. > Bei anderen Modulen wie bspw. perldoc Test::Simple funktioniert es dann > wieder. > > Wie kann ich dieses Problem beheben ? Ich hab auch schon gegooglet aber > nichts hilfreiches gefunden. Hm, ganz sicher bin ich nicht. Vielleicht ist es aus dem Core gewandert? Im git ist es allerdings noch, also eher unwahrscheinlich. Noch andere Module, die Du nicht findest? Gib mal mehr Details, welche Distro Du hast und Ausgaben von which perl which perldoc perl -V Sorry für die späte Antwort, $WORK und LinuxCon. Kind regards, Steffen -- Steffen Schwigon From ss5 at renormalist.net Fri Oct 28 04:17:50 2011 From: ss5 at renormalist.net (Steffen Schwigon) Date: Fri, 28 Oct 2011 12:17:50 +0100 Subject: [Dresden-pm] Frage zur Implementation von einer Schnittstelle In-Reply-To: <4EA80A7F.7000602@gmx.de> (Hans-Dietrich Kirmse's message of "Wed, 26 Oct 2011 15:26:23 +0200") References: <4EA80A7F.7000602@gmx.de> Message-ID: <871utxpdpd.fsf@renormalist.net> Hi! Ich glaube nicht, dass Du dieses Problem mit Technologie lösen kannst, aber hier trotzdem ein paar Ideen: 1. Nutze ein CPAN-Modul, die Plugins ermöglichen: http://search.cpan.org/~muir/Plugins-0.41/ 2. Hack selbst Dir was mit Modulen (die Plugins) und Funktionen darin zusammen, sinngemäß sowas: package MyProj::UserManagement::Plugin::KirmseStyle; sub get_display_name { my ($vorname, $nachname) = @_; return ?$vorname $nachname?; } 1; Das Interface ist hierbei der Namespace und die sub inklusive ihrer Parameter. Jemand anderes schreibt sein Plugin ?::SchwigonStyle, etc. Dann rein-eval'n und aufrufen. my $plugin = get_from_config() || "KirmseStyle"; # config or default my $plugin_class = "MyProj::UserManagement::Plugin::$plugin"; eval "use $plugin_class"; my $display_name = &{"${plugin_class}::get_display_name"}($vorname, $nachname); Ich empfehle das nicht wirklich, mache es aber selber auch so. Es ist zumindest eine technische Variante mit eval. Kind regards, Steffen Hans-Dietrich Kirmse writes: > Hallo, > > ich komme wieder mit einer sicherlich exotischen Frage: > wie gestaltet man eine Schnittstelle für eine "externe" Funktion. > > Ich meine damit Folgendes: ich habe für unser Schulserverprojekt eine > ganze Reihe von Perl-Scripten zur User- und Rechnerverwaltung > erstellt. Diese Scripte habe ich dann in ein Debian-Paket gesteckt und > die werden darüber eingespielt. > > Nun ist es aber so, das diese Scripte nicht die Anforderungen von > allen potentiellen Nutzern erfüllen werden. Es soll jetzt die > Möglichkeit eingerichtet werden, dass andere Entwickler Scripte > (Funktionen) schreiben, die sich in die von mir bereitgestellten > Funktionen einklinken. > > Ein einfaches Beispiel: Beim Versetzen von Usern bzw. Klassen wird > durch mein Script folgendes Codefragment aufgerufen: > > ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > > # wir bilden den kompletten Name > $name_curr = $forename_curr . ' ' . $lastname_curr; > > # und tragen den in den LDAP ein > $mesg = $ldap->modify( $entry->dn, > replace => { cn => $name_curr, > sn => $lastname_curr, > givenName => $forename_curr, > displayName => $name_curr } ); > $mesg->code and die "Abbruch: $mesg->error"; > > ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > > Es wurden Wünsche geäußert, dass der displayname anders gebildert > werden sollte, nämlich neben dem Name auch die Klasse angegeben > werden. Andere lehnen das grundsätzlich ab, weil die Klasse ein > eigener Entry im LDAP ist und es damit zu nicht gewollten Redundanzen > kommt. > > Lösung des Problems, das für die, die das Attribut 'displayName' > anders haben wollen, ein Funktion bereitzustellen, die eben für diesen > User die Klasse im LDAP sucht und dann einen anderen Displaynamen > bereitstellt. > > Das Problem ist nicht, wie so eine Funktion aussieht - das ist eher > trivial. Das Problem ist, wie mache ich das, dass ein anderer > Programmierer eine solche Funktion erstellen kann, diese in ein Modul > steckt, dieses Modul in ein Debian-Paket steckt und wenn dieses > Debian-Paket eingespielt wird, dass dann automatisch diese Funktion > aufgerufen wird. > > Diese Sache hier mit dem Displayname ist dabei nur ein Beispiel. Es > geht überhaupt darum, wie man so eine Schnittstelle implementiert. Ich > habe dazu in der Literatur und im Netz (aber nur deutschsprachig) > nicht gefunden. :( > > Ich hoffe, ich konnte mein Problem verständlich genug ausdrücken. > > Für jeden Hinweis, Idee wäre ich sehr dankbar. > > Viele Grüße > Hans-Dietrich > _______________________________________________ > Dresden-pm mailing list > Dresden-pm at pm.org > http://mail.pm.org/mailman/listinfo/dresden-pm > -- Steffen Schwigon From oeste.sebastian at googlemail.com Sat Oct 29 05:45:01 2011 From: oeste.sebastian at googlemail.com (Sebastian Oeste) Date: Sat, 29 Oct 2011 14:45:01 +0200 Subject: [Dresden-pm] Dresden-pm Nachrichtensammlung, Band 97, Eintrag 7 In-Reply-To: References: Message-ID: <4EABF54D.4020109@googlemail.com> Hi, >> Hallo, >> ich habe folgendes Problem. Ich habe die Vermutung das meine perldoc >> Dokumentation nicht ganz vollständig ist. >> Zum Beispiel findet perldoc Test::Tutorial keine Dokumentation obwohl diese >> eigentlich da sein müsste. >> Bei anderen Modulen wie bspw. perldoc Test::Simple funktioniert es dann >> wieder. >> >> Wie kann ich dieses Problem beheben ? Ich hab auch schon gegooglet aber >> nichts hilfreiches gefunden. > Hm, ganz sicher bin ich nicht. Vielleicht ist es aus dem Core gewandert? > Im git ist es allerdings noch, also eher unwahrscheinlich. > > Noch andere Module, die Du nicht findest? > > Gib mal mehr Details, welche Distro Du hast und Ausgaben von Ich arbeite auf einem Archlinux einmal 2.6.39. Kernel und einmal 2.6.37. Kernel. (falls das von Relevanz ist). Ja, es gibt ein paar Module die eigentlich im Core sind aber bei mir von der Perldoc nicht gefunden werden. Ich kann sie nur nicht aufzählen weil ich mir nicht mitgeschrieben habe welche genau das sind. Die oben waren nur ein paar Beispiele. > > which perl /usr/bin/perl > which perldoc /usr/bin/core_perl/perldoc > perl -V This is perl 5, version 14, subversion 1 (v5.14.1) built for x86_64-linux-thread-multi From hd.kirmse at gmx.de Sat Oct 29 13:49:59 2011 From: hd.kirmse at gmx.de (Hans-Dietrich Kirmse) Date: Sat, 29 Oct 2011 22:49:59 +0200 Subject: [Dresden-pm] Frage zur Implementation von einer Schnittstelle In-Reply-To: <871utxpdpd.fsf@renormalist.net> References: <4EA80A7F.7000602@gmx.de> <871utxpdpd.fsf@renormalist.net> Message-ID: <4EAC66F7.7040802@gmx.de> Hallo Steffen, ich möchte mich recht herzlich für deine Antwort bedanken. Am 28.10.2011 13:17, schrieb Steffen Schwigon: > Hi! > > Ich glaube nicht, dass Du dieses Problem mit Technologie lösen kannst, ich denke schon ;) > aber hier trotzdem ein paar Ideen: > > 1. Nutze ein CPAN-Modul, die Plugins ermöglichen: > > http://search.cpan.org/~muir/Plugins-0.41/ okay. dieses Modul habe ich trotz intensiver Suche nicht gefunden. Allerdings ist mir dieses Modul viel zu kompliziert gestrickt, sicher auch für meine doch kleinen Probleme da einfach zu mächtig/gewaltig. ;) > 2. Hack selbst Dir was mit Modulen (die Plugins) und Funktionen darin > zusammen, sinngemäß sowas: > > package MyProj::UserManagement::Plugin::KirmseStyle; > sub get_display_name { > my ($vorname, $nachname) = @_; > return ?$vorname $nachname?; > } > 1; > > Das Interface ist hierbei der Namespace und die sub inklusive ihrer > Parameter. Jemand anderes schreibt sein Plugin ?::SchwigonStyle, etc. ich denke, ich habe das inzwischen verstanden. > Dann rein-eval'n und aufrufen. > > my $plugin = get_from_config() || "KirmseStyle"; # config or default > my $plugin_class = "MyProj::UserManagement::Plugin::$plugin"; > eval "use $plugin_class"; > my $display_name =&{"${plugin_class}::get_display_name"}($vorname, $nachname); > > Ich empfehle das nicht wirklich, mache es aber selber auch so. > Es ist zumindest eine technische Variante mit eval. ja, werde ich wohl in dieser Art machen. Danke nochmal. viele Grüße Hans-Dietrich From create-soft at freenet.de Sun Oct 30 02:36:07 2011 From: create-soft at freenet.de (Torsten Knorr) Date: Sun, 30 Oct 2011 10:36:07 +0100 Subject: [Dresden-pm] Frage zur Implementation von einer Schnittstelle Message-ID: <000201cc96e7$5b5942d0$db23df5c@bigunix> Hallo Hans-Dietrich, auch wenn die Frage schon beantwortet scheint möchte ich noch folgenden Gedanken anhängen. Eine Schnittstelle in Perl zu Spezifizieren dürfe sich als schwierig erweisen da Perl eine typenlose Programmiersprache ist. Die Spezifizierung einer Schnittstelle setzt aber genau eine Solche Type-Überprüfung voraus. Aus diesem Grund möchte ich Dich auf ein anderes Konzept zur Lösung des obigen Problems hinweisen. Kurz: OOP - Vererbung Also eine Klasse mit abstrakten Methoden schreiben welche als Basisklasse dient. In den abgeleiteten Klassen kann dann jeder Programmierer seine eigene Implementierung der Methoden vornehmen. Wies geht wird von Damian Conway in "Objektorientiert Programmieren mit Perl" beschrieben. (in deutsch) Gruß Torsten P.S. Es handelt sich bei dem Tipp nicht um eine rechtsverbindliche Auskunft und wer Tippfehler findet, kann sie behalten. From ss5 at renormalist.net Sun Oct 30 02:52:50 2011 From: ss5 at renormalist.net (Steffen Schwigon) Date: Sun, 30 Oct 2011 09:52:50 +0000 Subject: [Dresden-pm] Frage zur Implementation von einer Schnittstelle In-Reply-To: <000201cc96e7$5b5942d0$db23df5c@bigunix> (Torsten Knorr's message of "Sun, 30 Oct 2011 10:36:07 +0100") References: <000201cc96e7$5b5942d0$db23df5c@bigunix> Message-ID: <87mxciolfx.fsf@renormalist.net> "Torsten Knorr" writes: > Kurz: OOP - Vererbung Wenn OO, dann IMHO aber mit Moose. http://moose.perl.org/ Das bietet den leichtesten und schlüssigsten Einstieg und skaliert trotzdem in der Komplexität. Für Plugins konkret in ::Roles schauen. Das Damian-Buch ist in dieser Hinsicht schon etwas ?dated?. Kind regards, Steffen -- Steffen Schwigon From steffen.winkler at gmx.net Sun Oct 30 05:10:24 2011 From: steffen.winkler at gmx.net (Steffen Winkler) Date: Sun, 30 Oct 2011 13:10:24 +0100 Subject: [Dresden-pm] Frage zur Implementation von einer Schnittstelle In-Reply-To: <000201cc96e7$5b5942d0$db23df5c@bigunix> References: <000201cc96e7$5b5942d0$db23df5c@bigunix> Message-ID: <20111030121024.137510@gmx.net> > ... eine typenlose Programmiersprache ist. Das ist so nicht ganz richtig. Es werden nur die Datentypen, die es selbstverständlich gibt, nicht sofort statisch mit den Variablen verbunden, wie das in C oder Java ist. Perl hat Variablentypen $scalar, @array, %hash, ... und Datentypen numeric, string, ... Und den Kontext scalar, list, string, numeric, boolean ... gibt es natürlich auch noch. Klar wird das, wenn man Variablen mit Devel::Peek anschaut. Das sollte man unbedingt!!! mal tun. Dann sieht man das sehr gut. Wenn man OO kennt und denkt, Variablen sind Spezialobjekte, dann trifft man die Realität eher. Wenn man typlos denkt, schreibt man schnell schlechten Code. Die Vorteile von Perl erscheinen dann wie Nachteile. Ich empfehle wie Steffen S. auch Moose, als moderne OO. Schon deswegen, damit man sich nicht totvererben muss. Grüße von Steffen Winkler, dem sächsischen Auswanderer. -- NEU: FreePhone - 0ct/min Handyspartarif mit Geld-zurück-Garantie! Jetzt informieren: http://www.gmx.net/de/go/freephone From hd.kirmse at gmx.de Sun Oct 30 11:28:52 2011 From: hd.kirmse at gmx.de (Hans-Dietrich Kirmse) Date: Sun, 30 Oct 2011 19:28:52 +0100 Subject: [Dresden-pm] Frage zur Implementation von einer Schnittstelle In-Reply-To: <000201cc96e7$5b5942d0$db23df5c@bigunix> References: <000201cc96e7$5b5942d0$db23df5c@bigunix> Message-ID: <4EAD9764.4060800@gmx.de> Hallo Torsten, Steffen & Steffen, ich bitte schon im Vorab um Entschuldigung, das ich als Gast (in Thüringen gibt es keine Perl-Mongers Gruppe) und Laie (beschäftige mich erst seit ca. 5 Jahren als Autodidact mit Perl) euren alternativen Vorschlag anzweifel und vielleicht fällt auf Grund meines Alters (noch 10 Jahre bis zur Rente) der Groschen manchmal sehr langsam, aber ich kann mir einfach nicht vorstellen, dass OOP hier überhaupt als Lösung in Betracht kommt. Am 30.10.2011 10:36, schrieb Torsten Knorr: > Hallo Hans-Dietrich, > > auch wenn die Frage schon beantwortet scheint möchte ich noch folgenden > Gedanken anhängen. > Eine Schnittstelle in Perl zu Spezifizieren dürfe sich als schwierig > erweisen da Perl eine typenlose > Programmiersprache ist. Die Spezifizierung einer Schnittstelle setzt aber > genau eine Solche > Type-Überprüfung voraus. Hier würde es im angegebenen Fall nur um Folgendes gehen: es würde um das Einbinden einer Funktion (Subroutine) gehen, die entweder gar kein Argument benötigt (es soll ja nur der Displayname gesetzt werden) oder noch besser, den alten Displayname entgegen nimmt = String. Zurück gibt diese Funktion den neuen Displayname, also auch wieder einen String. Das ist m.E. also hier absolut kein Problem. Weiterhin: da ich diese Schnittstelle selbst implementiere, sind *alle* Optionen offen. Ich könnte also z.B. vorgeben, wie das Modul/Paket und auch wie die Funktion heißt. > Aus diesem Grund möchte ich Dich auf ein anderes > Konzept zur Lösung > des obigen Problems hinweisen. > > Kurz: OOP - Vererbung ich habe (in Perl) noch nie OOP genutzt, wohl aber in Pascal/Delphi. Trotzdem: wie kann OOP ein Konzept dafür darstellen? > Also eine Klasse mit abstrakten Methoden schreiben welche als Basisklasse > dient. In den abgeleiteten > Klassen kann dann jeder Programmierer seine eigene Implementierung der > Methoden vornehmen. Und dann? Dann muss diese Klasse ja wohl instanziert und das neue Objekt aufgerufen werden. Das bedeutet aus meiner Sicht doch wohl, dass das Hauptprogramm diesbezüglich angepasst werden muss - anders gesagt, das Hauptprogramm muss doch wissen, dass es jetzt diese neue Klasse verwenden soll. damit wird dieser Addon-Entwickler gleichzeitig derjenige, der die aktuellste Version des eigentlichen Programms "erstellt" hat und nutzt. Wie geht das dann weiter? Der Entwickler des eigentlichen Programms (hier ich) erstellt eine neue Version. Nur in dem Fall, dass ich überhautp Kenntnis von diesem (vermeintlichen?) Addon habe, kann ich das berücksichtigen. Das hat aber doch wohl nichts mehr mit einer Schnittstelle für die angegebene Zielstellung (Add-on) zu tun. Mal auf ein anderes Programm übertragen: wenn ein Addon-Entwickler von Firefox den Firefox so erweitert, müßten aus meiner Sicht dann alle Addons in das Projekt einfließen, ansonsten fliegen die bei jedem Update (erstmal) wieder raus. > Wies geht wird von Damian Conway in > > "Objektorientiert Programmieren mit Perl" > > beschrieben. (in deutsch) Das Buch kenne ich (noch) nicht. Habe aber das Buch "Perl - Best Practices" von Damian Conway und auch "Perl Hacks ..." mit D.C. als Mitautor. Obwohl das Buch aus dem Jahre 2000 ist, werde ich mir das Buch mal zulegen. zu Moose: da ich in Perl noch nie objektorientiert programmiert habe, habe ich demzufolge auch noch nicht Moose genutzt. Aber ich verfolge im foo-Magazin sehr wohl das was zu Moose geschrieben wurde. Trotzdem, selbst wenn ich OOP mit Perl könnte - m.E. wäre das hier nicht zielführend. Wenn ich falsch liege, dann klärt mich bitte auf. Viele Grüße Hans-Dietrich From hd.kirmse at gmx.de Sun Oct 30 13:39:34 2011 From: hd.kirmse at gmx.de (Hans-Dietrich Kirmse) Date: Sun, 30 Oct 2011 21:39:34 +0100 Subject: [Dresden-pm] Frage zur Implementation von einer Schnittstelle - Nachtrag In-Reply-To: <4EAD9764.4060800@gmx.de> References: <000201cc96e7$5b5942d0$db23df5c@bigunix> <4EAD9764.4060800@gmx.de> Message-ID: <4EADB606.5000506@gmx.de> nochmal hallo, ich habe mir jetzt nach dem Vorschlag von Steffen mit dem 'eval' und einen Hinweis aus dem schon angegebenen Buch eine Lösung gebastelt. Am 30.10.2011 19:28, schrieb Hans-Dietrich Kirmse: > ... Habe aber das Buch "Perl - Best > Practices" von Damian Conway und auch "Perl Hacks ..." mit D.C. als > Mitautor. in "Perl Hacks ..." findet sich Hack 72. Dort wird getestet, ob in einem Package eine bestimmte Funktion vorhanden ist. (Im einem foo-Magazin findet sich dazu auch eine Seite von Renée Bäcker.) Zusammen ergibt das bei mir folgenden (Beispiel-)Code: ~~~~~~~~~~~~~~~~~~~~~~~~ Addon.pm ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ #!/usr/bin/perl use warnings; use strict; package Addon; BEGIN { use Exporter (); use vars qw ( @ISA @EXPORT_OK $VERSION ); $VERSION = '0.1'; @ISA = qw ( Exporter ); @EXPORT_OK = qw ( meine_funktion ); } sub meine_funktion { print "hallo Super-Welt\n"; } 1; __END__ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Nun ein Mini-Programm, was diese Funktion nutzt, falls es diese findet. Wenn die nicht gefunden wird, dann wird eine eigene Funktion genutzt: ~~~~~~~~~~~~~~~~~~~~~~~~ test.pl ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ #!/usr/bin/perl use warnings; use strict; my ($my_ref, $funktion_ref); # wir versuchen das Modul zu laden eval { require Addon; }; # wenn kein Fehler unless ($@) { # testen wir auf das Vorhandensein der Funktion $my_ref = Addon->can('meine_funktion'); # wenn definiert, dann Funktion aus dem Modul if ($my_ref) { $funktion_ref = \&Addon::meine_funktion; } # sonst vorhandene Funktion verwenden else { $funktion_ref = \&meine_funktion; } } # wenn Modul nicht geladen else { # dann auch vorhandene Funktion verwenden $funktion_ref = \&meine_funktion; } # jetzt die Funktion aufrufen &$funktion_ref; ############ Ende des Hauptprogramms ###################### sub meine_funktion { print "hallo Welt\n"; } __END__ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Es kommt hier "hallo Super-Welt". Benenne ich im Modul die Funktion um, dann kommt nur "hallo Welt". Gleiches gilt, wenn ich ein nichtvorhandenes Modul aufrufe. Bei mir hat das mit "use" nicht geklappt, sondern nur mit "require". Allerdings scheint das alle meine Anforderungen zu erfüllen. Will sagen: ich gebe das Paket und die Funktion vor. Wird ein solches installiert, dann wird das auch genutzt. Wenn kein solches Paket installiert wird, dann wird meine Funktion genutzt. Damit habe ich für mein (einfaches) Problem eine Schnittstelle. Ich bedanke mich bei allen fürs Mitdenken. Viele Grüße Hans-Dietrich From mailinglisten at renee-baecker.de Sun Oct 30 22:27:17 2011 From: mailinglisten at renee-baecker.de (mailinglisten at renee-baecker.de) Date: Mon, 31 Oct 2011 06:27:17 +0100 Subject: [Dresden-pm] =?utf-8?q?Google_Code_In_-_Hilfe_ben=C3=B6tigt?= Message-ID: <20111031_052717_026403.mailinglisten@renee-baecker.de> Hallo Perlmongers, wäre es nicht schön, frisches Blut in die Perl-Community zu bekommen? Perl wird deshalb am Google Code-In teilnehmen. Hier eine Mail von Paul Johnson, der eure Hilfe benötigt: ---- 8< ----- [ See this post in glorious HTML at http://blogs.perl.org/users/paul_johnson/2011/10/more-about-gci-2011.html ] The Google Code-in 2011 (GCI - http://wiki.enlightenedperl.org/gci2011) will be starting shortly. This is the programme under which students aged between 13 and 17 years are encouraged to get involved in open source projects. The Perl Foundation would like Perl to be a part of this programme, bringing both short and long-term benefits to Perl and the students alike. Many of you will have seen my previous post (http://blogs.perl.org/users/paul_johnson/2011/10/gci-2011.html) asking the Perl community for help in creating tasks for students. A few of you have subsequently added tasks to the ideas page (http://wiki.enlightenedperl.org/gci2011/gci2011/ideas). For this we are extremely grateful. Some of you may well be planning to add some tasks. We'll also be very grateful for these tasks. It's almost time to submit our application. But for our application to be successful we really need to add more tasks. So I'm renewing my appeal for your help. We need help from all sorts of people. From developers, from designers, from technical writers, from managers, from marketers, from QA people and testers, from architects, from trainers, from user interface specialists and from anyone who can speak more than one language. And if you're reading this and don't fit into any of those categories then you undoubtedly have other talents and we probably need you even more. We need you to visit the ideas page (http://wiki.enlightenedperl.org/gci2011/gci2011/ideas) and read about the sort of tasks we need. Then create a login and add a task. If you can't or don't want to create a login, please mail your task to me at paul at pjcj.net Here are some suggestions for tasks: - Develop a new feature. - Port to a new operating system. - Fix a bug. (Go and check your RT queue.) - Add tests for a feature. - Add tests to improve coverage. (Take a look at cpancover http://pjcj.sytes.net/cpancover/ ) - Add to or improve documentation. - Write a tutorial. - Make a tutorial video. - Make a promotional video. - Add internationalisation (I18N) to a module. - Translate documentation, tutorials or web sites. - Investigate API changes. - Research new ideas. algorithms or libraries. - Compare and contrast modules. But feel free to let your imagination run wild. Any task that a young student could perform that would be beneficial to the project is fair game. In addition, if you really cannot think of a task to add, but you would be willing to act as a mentor please add your name to the ideas page (http://wiki.enlightenedperl.org/gci2011/gci2011/ideas) and note any areas in which you would be willing to mentor. In particular we are in need of mentors who would be able to assist with translation tasks, so if you speak more than one language please add your name and note which languages you speak. We also need mentors who would be happy to work with students on bugs in modules where the author is unable to do so. But we're very happy to accept all volunteers. So please either add a task or sign up as a mentor. (Or both.) But this is getting very urgent. Our application needs to be on Tuesday so please don't delay and sign up today! Thank you very much for your assistance. I trust that with your help this year's GCI will be even more successful than last year's. ---- 8< -----