From schwigon at webit.de Wed Aug 1 12:18:14 2007 From: schwigon at webit.de (Steffen Schwigon) Date: Wed, 01 Aug 2007 21:18:14 +0200 Subject: [Dresden-pm] Dresden Perl Mongers Treffen August 2007 Message-ID: Hi, Mittlerweile wisst ihr ja, dass meine Mail erst kurz vorher kommt. :-) Am Donnerstag (morgen vs. heute, wer gewinnt?) ist wieder Treffen der Dresden Perl Mongers. Donnerstag, den 2. August 2007 2o.oo Uhr Medienkulturhaus (wo auch das 'Kino im Dach' ist) Schandauer Str. 64, 01277 Dresden http://www.medienkulturhaus.de Wer etwas über Perl reden oder lernen mag, ist eingeladen. Wir sind offen für Einsteiger und Fortgeschrittene, jung und alt. Themen: * Perl 5.10 Regular Expressions * misc und Folklore Termine+Themen immer hier: * http://dresden-pm.org/cgi-bin/twiki/view/PM/TermineTreffen GreetinX Steffen -- Steffen Schwigon Dresden Perl Mongers From hd.kirmse at gmx.de Sat Aug 4 06:32:48 2007 From: hd.kirmse at gmx.de (Hans-Dietrich Kirmse) Date: Sat, 04 Aug 2007 15:32:48 +0200 Subject: [Dresden-pm] Frage zu Net::LDAP::LDIF Message-ID: <46B48000.2070905@gmx.de> Hallo, euer Zaungast aus Thüringen braucht wiedermal Hilfe ;) Ich habe den LDAP-Workshop durchgeackert und da dieser sehr verständlich geschrieben ist, erschließt sich mir trotz fehlender Englischkenntnisse auch die (bei weitem nicht so eingängige) Doku zu anderen LDAP-Modulen. Mein Problem: ich möchte den LDAP nach etwas abfragen und das Ergebnis der Abfrage in ein LDIF-File schreiben bzw. auf die Standardausgabe. Das mit den LDIF-File gelingt problemlos (ob das besser geht, weiss ich nicht, wäre aber für Hinweise dankbar), aber mein eigentliches Problem ist: wie schreibe ich das auf die Standardausgabe? was bei mir auch nicht geklappt hat, dass in dem LDIF-File dann die Version steht. will sagen, eine Zeile wie: $ldif->write_version(); geht bei mir nicht. :( ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ #!/usr/bin/perl -w use strict; use Net::LDAP; use Net::LDAP::LDIF; my $myfile = '/home/schueler_daten.ldif'; my $filter = 'uid=*'; my (@daten, $ldap_base, $ldap, $mesg, $ldif); # wir oeffnen die die ldap.conf open DATEI, '<', '/etc/ldap.conf' or die "konnte ldap.conf nicht oeffnen, $!\n"; # wir lesen solange Zeilen ein, bis wir die Suchbasis ($ldap_base) haben while (my $zeile = ) { if ($zeile =~ m/^\s*base\s+(\w.*\w)\s*$/) { $ldap_base = $1; last; } } # wir schliessen die Datei close DATEI; # wir verbinden uns mit den LDAP $ldap = Net::LDAP->new('127.0.0.1',version => 3) or die "$@"; $ldap->bind or die "konnte mich nicht mit dem Server verbinden"; # wir holen uns von den Schuelern die Daten (in denen das Login steht) $mesg = $ldap->search(base => "ou=SCHUELER, o=SCHULE, $ldap_base", filter => $filter ); $mesg->code and die $mesg->error; # wir trennen uns vom LDAP $ldap->unbind; # wir schreiben die Datensaetze in das File $ldif = Net::LDAP::LDIF->new( $myfile, "w", onerror => 'undef' ); $ldif->write_entry($mesg->entries); $ldif->done(); __END__ Für eure Hinweise im Voraus meinen Dank Mit freundlichen Grüßen Hans-Dietrich From mailinglisten at renee-baecker.de Sat Aug 4 06:50:26 2007 From: mailinglisten at renee-baecker.de (ReneeB) Date: Sat, 04 Aug 2007 15:50:26 +0200 Subject: [Dresden-pm] Frage zu Net::LDAP::LDIF In-Reply-To: <46B48000.2070905@gmx.de> References: <46B48000.2070905@gmx.de> Message-ID: <46B48422.3020803@renee-baecker.de> Hallo, probier mal: # wir schreiben die Datensaetze in das File $ldif = Net::LDAP::LDIF->new( *STDOUT, "w", onerror => 'undef' ); $ldif->write_entry($mesg->entries); $ldif->done(); Gruß, Renée Hans-Dietrich Kirmse wrote: > Hallo, > > euer Zaungast aus Thüringen braucht wiedermal Hilfe ;) > > Ich habe den LDAP-Workshop durchgeackert und da dieser sehr verständlich > geschrieben ist, erschließt sich mir trotz fehlender Englischkenntnisse > auch die (bei weitem nicht so eingängige) Doku zu anderen LDAP-Modulen. > > Mein Problem: ich möchte den LDAP nach etwas abfragen und das Ergebnis > der Abfrage in ein LDIF-File schreiben bzw. auf die Standardausgabe. > Das mit den LDIF-File gelingt problemlos (ob das besser geht, weiss ich > nicht, wäre aber für Hinweise dankbar), aber mein eigentliches Problem > ist: wie schreibe ich das auf die Standardausgabe? > > was bei mir auch nicht geklappt hat, dass in dem LDIF-File dann die > Version steht. will sagen, eine Zeile wie: > > $ldif->write_version(); > > geht bei mir nicht. :( > > > ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > #!/usr/bin/perl -w > use strict; > > use Net::LDAP; > use Net::LDAP::LDIF; > > my $myfile = '/home/schueler_daten.ldif'; > my $filter = 'uid=*'; > > my (@daten, $ldap_base, $ldap, $mesg, $ldif); > > # wir oeffnen die die ldap.conf > open DATEI, '<', '/etc/ldap.conf' > or die "konnte ldap.conf nicht oeffnen, $!\n"; > > # wir lesen solange Zeilen ein, bis wir die Suchbasis ($ldap_base) haben > while (my $zeile = ) { > if ($zeile =~ m/^\s*base\s+(\w.*\w)\s*$/) { > $ldap_base = $1; > last; > } > } > > # wir schliessen die Datei > close DATEI; > > > # wir verbinden uns mit den LDAP > $ldap = Net::LDAP->new('127.0.0.1',version => 3) or die "$@"; > $ldap->bind or die "konnte mich nicht mit dem Server verbinden"; > > # wir holen uns von den Schuelern die Daten (in denen das Login steht) > $mesg = $ldap->search(base => "ou=SCHUELER, o=SCHULE, $ldap_base", > filter => $filter ); > $mesg->code and die $mesg->error; > > # wir trennen uns vom LDAP > $ldap->unbind; > > # wir schreiben die Datensaetze in das File > $ldif = Net::LDAP::LDIF->new( $myfile, "w", onerror => 'undef' ); > $ldif->write_entry($mesg->entries); > $ldif->done(); > > __END__ > > > Für eure Hinweise im Voraus meinen Dank > > Mit freundlichen Grüßen > 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 Sun Aug 5 08:57:04 2007 From: hd.kirmse at gmx.de (Hans-Dietrich Kirmse) Date: Sun, 05 Aug 2007 17:57:04 +0200 Subject: [Dresden-pm] Frage zu Net::LDAP::LDIF In-Reply-To: <46B48422.3020803@renee-baecker.de> References: <46B48000.2070905@gmx.de> <46B48422.3020803@renee-baecker.de> Message-ID: <46B5F350.8090208@gmx.de> Hallo, ReneeB schrieb: > Hallo, > > probier mal: > > # wir schreiben die Datensaetze in das File > $ldif = Net::LDAP::LDIF->new( *STDOUT, "w", onerror => 'undef' ); > $ldif->write_entry($mesg->entries); > $ldif->done(); ich hatte Renée schon per PM geschrieben, dass dieser Vorschlag leider nicht die Lösung gebracht hat. Auch viele weitere Versuche mit "|" und statt der Option "w" das "a" verwendet waren keine Lösung. Inzwischen machen ich es einfach so, wenn die Ausgabe auf der Standardausgabe gewünscht ist, dann schreibe ich das in ein temporäres File und lese dieses einfach aus. Anschließend lösche ich dieses File und damit betrachte ich das Problem als hinreichend zufriedenstellend gelöst. Danke nochmal fürs Mitdenken. Mit freundlichen Grüßen Hans-Dietrich From schwigon at webit.de Mon Aug 6 07:45:02 2007 From: schwigon at webit.de (Steffen Schwigon) Date: Mon, 06 Aug 2007 16:45:02 +0200 Subject: [Dresden-pm] Beim Septembertreffen bebt die Erde Message-ID: <86hcncvi1d.fsf@tkr_suse.webit.de> Hi! Wir haben im September 5-jähriges, und ihr könnt euch alle mal am Schniepel reißen und diesen Termin im Kalender freihalten, damit wir so richtig einen draufmachen, mit regulären Kraftausdrücken, Kuchen und Wein. Das übliche halt, aber als Best-Of getarnt. * Donnerstag, 06. September 2007, 2o.oo Uhr * http://dresden-pm.org/cgi-bin/twiki/view/PM/TermineTreffen 3Steffen -- "I see that Perl is still the cinderella of languages, doing the hard work, while the ugly sisters get all the attention" -- Aaron 'Teejay' Trevena From schwigon at webit.de Mon Aug 6 08:20:19 2007 From: schwigon at webit.de (Steffen Schwigon) Date: Mon, 06 Aug 2007 17:20:19 +0200 Subject: [Dresden-pm] Beim Septembertreffen bebt die Erde In-Reply-To: <86hcncvi1d.fsf@tkr_suse.webit.de> (Steffen Schwigon's message of "Mon, 06 Aug 2007 16:45:02 +0200") References: <86hcncvi1d.fsf@tkr_suse.webit.de> Message-ID: <863aywvgek.fsf@tkr_suse.webit.de> Steffen Schwigon writes: > * Donnerstag, 06. September 2007, 2o.oo Uhr Ui, ich hab da selbst schon was wichtiges im Kalender stehen ... :-) From dresden-pm at demofreak.de Thu Aug 9 00:28:52 2007 From: dresden-pm at demofreak.de (Johannes Studt) Date: Thu, 9 Aug 2007 09:28:52 +0200 Subject: [Dresden-pm] Beim Septembertreffen bebt die Erde In-Reply-To: <863aywvgek.fsf@tkr_suse.webit.de> References: <86hcncvi1d.fsf@tkr_suse.webit.de> <863aywvgek.fsf@tkr_suse.webit.de> Message-ID: <200708090928.52356.dresden-pm@demofreak.de> Am Montag, 6. August 2007 schrieb Steffen Schwigon: > Ui, ich hab da selbst schon was wichtiges im Kalender stehen ... :-) Will heißen? Wir verschieben es? Wir lassen es gleich ganz ausfallen? Wir müssen den LSteffen ohne dich ärgern? ...? :-P From schwigon at webit.de Thu Aug 9 01:32:55 2007 From: schwigon at webit.de (Steffen Schwigon) Date: Thu, 09 Aug 2007 10:32:55 +0200 Subject: [Dresden-pm] Beim Septembertreffen bebt die Erde In-Reply-To: <200708090928.52356.dresden-pm@demofreak.de> (Johannes Studt's message of "Thu, 9 Aug 2007 09:28:52 +0200") References: <86hcncvi1d.fsf@tkr_suse.webit.de> <863aywvgek.fsf@tkr_suse.webit.de> <200708090928.52356.dresden-pm@demofreak.de> Message-ID: <867io5rtu0.fsf@tkr_suse.webit.de> Johannes Studt writes: > Am Montag, 6. August 2007 schrieb Steffen Schwigon: >> Ui, ich hab da selbst schon was wichtiges im Kalender stehen ... :-) > > Will heißen? Wir verschieben es? Wir lassen es gleich ganz ausfallen? Wir > müssen den LSteffen ohne dich ärgern? ...? Gute Frage. Ich dachte, ich könnte die Konsequenzen verdrängen. :-) Ich frag mal, ob wir im Penthaus eine Raum-/Zeit-Verschiebung um eine Woche hinbekommen. Falls es räumlich nicht klappt, verschieben wir's trotzdem und machen es woanders. Also tendieren wir schonmal langsam auf den 13. September 2007. 3Steffen -- Steffen Schwigon Dresden Perl Mongers Deutscher Perl-Workshop From stepardo at gmail.com Thu Aug 9 02:22:40 2007 From: stepardo at gmail.com (Steffen Liebergeld) Date: Thu, 09 Aug 2007 11:22:40 +0200 Subject: [Dresden-pm] Beim Septembertreffen bebt die Erde In-Reply-To: <200708090928.52356.dresden-pm@demofreak.de> References: <86hcncvi1d.fsf@tkr_suse.webit.de> <863aywvgek.fsf@tkr_suse.webit.de> <200708090928.52356.dresden-pm@demofreak.de> Message-ID: Johannes Studt schrieb: > Am Montag, 6. August 2007 schrieb Steffen Schwigon: >> Ui, ich hab da selbst schon was wichtiges im Kalender stehen ... :-) > > Will heißen? Wir verschieben es? Wir lassen es gleich ganz ausfallen? Wir > müssen den LSteffen ohne dich ärgern? ...? LSteffen ist am 5. nicht da. From dresden-pm at demofreak.de Thu Aug 9 03:17:46 2007 From: dresden-pm at demofreak.de (Johannes Studt) Date: Thu, 9 Aug 2007 12:17:46 +0200 Subject: [Dresden-pm] Beim Septembertreffen bebt die Erde In-Reply-To: References: <86hcncvi1d.fsf@tkr_suse.webit.de> <200708090928.52356.dresden-pm@demofreak.de> Message-ID: <200708091217.46456.dresden-pm@demofreak.de> Am Donnerstag, 9. August 2007 schrieb Steffen Liebergeld: > LSteffen ist am 5. nicht da. Zu kurz gehüpft. Erstens geht es um den 6.9. und zweitens verschieben wir das offenbar eh um eine Woche. Du entkommst mir also nicht. :D Hannes From schwigon at webit.de Thu Aug 9 02:53:37 2007 From: schwigon at webit.de (Steffen Schwigon) Date: Thu, 09 Aug 2007 11:53:37 +0200 Subject: [Dresden-pm] Beim Septembertreffen bebt die Erde In-Reply-To: (Steffen Liebergeld's message of "Thu, 09 Aug 2007 11:22:40 +0200") References: <86hcncvi1d.fsf@tkr_suse.webit.de> <863aywvgek.fsf@tkr_suse.webit.de> <200708090928.52356.dresden-pm@demofreak.de> Message-ID: <86ejidqbj2.fsf@tkr_suse.webit.de> Steffen Liebergeld writes: > Johannes Studt schrieb: >> Am Montag, 6. August 2007 schrieb Steffen Schwigon: >>> Ui, ich hab da selbst schon was wichtiges im Kalender stehen ... :-) >> >> Will heißen? Wir verschieben es? Wir lassen es gleich ganz ausfallen? Wir >> müssen den LSteffen ohne dich ärgern? ...? > > LSteffen ist am 5. nicht da. Am 5. September? Das wär nicht schlimm, da wir es am 6. oder am 13. machen. Oder meinst Du generell am 5. Jahrestag, um einen irgendwie gearteten Protest zu visualisieren? :-) 3Steffen -- "Perl is a hacker's wet dream." -- Duncan Patton in comp.lang.prolog From stepardo at gmail.com Thu Aug 9 04:48:48 2007 From: stepardo at gmail.com (Steffen Liebergeld) Date: Thu, 09 Aug 2007 13:48:48 +0200 Subject: [Dresden-pm] Beim Septembertreffen bebt die Erde In-Reply-To: <86ejidqbj2.fsf@tkr_suse.webit.de> References: <86hcncvi1d.fsf@tkr_suse.webit.de> <863aywvgek.fsf@tkr_suse.webit.de> <200708090928.52356.dresden-pm@demofreak.de> <86ejidqbj2.fsf@tkr_suse.webit.de> Message-ID: Steffen Schwigon schrieb: > Steffen Liebergeld writes: >> Johannes Studt schrieb: >>> Am Montag, 6. August 2007 schrieb Steffen Schwigon: >>>> Ui, ich hab da selbst schon was wichtiges im Kalender stehen ... :-) >>> Will heißen? Wir verschieben es? Wir lassen es gleich ganz ausfallen? Wir >>> müssen den LSteffen ohne dich ärgern? ...? >> LSteffen ist am 5. nicht da. > > Am 5. September? Das wär nicht schlimm, da wir es am 6. oder am > 13. machen. Oder meinst Du generell am 5. Jahrestag, um einen > irgendwie gearteten Protest zu visualisieren? :-) Ich fahre am 5.9. in den Urlaub, bin in der folgenden Woche wieder da. From schwigon at webit.de Tue Aug 14 07:35:29 2007 From: schwigon at webit.de (Steffen Schwigon) Date: Tue, 14 Aug 2007 16:35:29 +0200 Subject: [Dresden-pm] Test Message-ID: <86lkce421a.fsf@tkr_suse.webit.de> Test. -- Steffen Schwigon From schwigon at webit.de Tue Aug 14 07:36:21 2007 From: schwigon at webit.de (Steffen Schwigon) Date: Tue, 14 Aug 2007 16:36:21 +0200 Subject: [Dresden-pm] Test2 Message-ID: <86hcn241zu.fsf@tkr_suse.webit.de> Test $n -- Steffen Schwigon From thomas.rittsche at gmail.com Tue Aug 14 07:54:13 2007 From: thomas.rittsche at gmail.com (Thomas Rittsche) Date: Tue, 14 Aug 2007 16:54:13 +0200 Subject: [Dresden-pm] Problem mit Moduleinbindung Message-ID: <584da2df0708140754g1319d735o46e8d346c979b96@mail.gmail.com> Hallo Mongers, da trete ich doch doch mal aus dem passiven Schatten der ListenBeobachters heraus und bitte euch um Hilfe. Folgendes Problem: Aus technischen Gründen ;) binden wir Module dynamisch in einer Schleife ein: foreach (?) { eval "use $modulName"; my $affe = unsereSub(); } Grundsätzlich ist das schon nicht so schön, ich weiß. Aber wir sind gezwungen, auf gewachsenen Strukturen zu bauen ;). Zurück zum Problem. Die Module enthalten einige gleichnamige subs. Das gibt Fehler, weil diese ja dann redefined werden. Unser Ansatz wäre, es mit einem require zu versuchen. Allerdings ist uns dann nicht klar, wie der Aufruf der entsprechenden sub aussieht, die wir aus dem Modul benutzen. So was in der Art funktioniert nicht? foreach (?) { eval "require $modulName"; my $affe = eval"$modulName::unsereSub()"; } Ich hoffe, ihr versteht mein Problem. Aber ich bin da sehr optimistisch. Die Diskussion ist eröffnet. Vielen Dank schon mal an alle Gruß Thomas From steffen.winkler at gmx.net Tue Aug 14 08:04:21 2007 From: steffen.winkler at gmx.net (Steffen Winkler) Date: Tue, 14 Aug 2007 17:04:21 +0200 Subject: [Dresden-pm] Problem mit Moduleinbindung Message-ID: <20070814150421.3445360F86@web009.hongkon.kon> string eval in einer Schleife ist schweinelangsam. Das eval muß außen um die schleife ringsherum, dann wird es besser. Ein use module (); importiert auch nur nicht. Außerdem gibt es require $module; und schon sind die schlimmen string evals weg. Die werden sowieso immer zu leichtfertig benutzt. Mit UNIVERSAL->can('module', 'sub'); erfährt man ob's die sub gibt oder nicht. From schwigon at webit.de Tue Aug 14 08:11:12 2007 From: schwigon at webit.de (Steffen Schwigon) Date: Tue, 14 Aug 2007 17:11:12 +0200 Subject: [Dresden-pm] Problem mit Moduleinbindung In-Reply-To: <20070814150421.3445360F86@web009.hongkon.kon> (Steffen Winkler's message of "Tue, 14 Aug 2007 17:04:21 +0200") References: <20070814150421.3445360F86@web009.hongkon.kon> Message-ID: <86zm0u2ltb.fsf@tkr_suse.webit.de> "Steffen Winkler" writes: > Ein > use module (); > importiert auch nur nicht. Der Satz klingt bissel verworren, ist aber wahrscheinlich die wichtige Lösung für Thomas. Verwende eine leere Klammer beim use hinter dem Modulnamen, damit importiert er keine Subs mehr in den Namensraum Deines aktuellen Programmes und Du musst die Subs alle mit Modulname::subname() aufrufen. Das sollte den Überschneidungen der Sub-Namen vorbeugen. Damit kannst Du prinzipiell auch bei "use" bleiben. Warum das require bei Dir nicht geht, weiß ich jetzt auch noch nicht. Das hätte(tm) eigentlich auch gehen können. Steffen -- Steffen Schwigon Dresden Perl Mongers Deutscher Perl-Workshop From mailinglisten at renee-baecker.de Tue Aug 14 08:23:00 2007 From: mailinglisten at renee-baecker.de (ReneeB) Date: Tue, 14 Aug 2007 17:23:00 +0200 Subject: [Dresden-pm] Problem mit Moduleinbindung In-Reply-To: <86zm0u2ltb.fsf@tkr_suse.webit.de> References: <20070814150421.3445360F86@web009.hongkon.kon> <86zm0u2ltb.fsf@tkr_suse.webit.de> Message-ID: <46C1C8D4.5030402@renee-baecker.de> Steffen Schwigon wrote: > Damit kannst Du prinzipiell auch bei "use" bleiben. > > Warum das require bei Dir nicht geht, weiß ich jetzt auch noch nicht. > Das hätte(tm) eigentlich auch gehen können. > Dazu wäre die Fehlermeldung ganz interessant gewesen... > Steffen > Renée -- $foo - Perl-Magazin (http://foo-magazin.de) Perl-Community.de (http://board.perl-community.de) Perl-Blog (http://reneeb-perlblog.blogspot.com) From thomas.rittsche at gmail.com Tue Aug 14 23:50:31 2007 From: thomas.rittsche at gmail.com (Thomas Rittsche) Date: Wed, 15 Aug 2007 08:50:31 +0200 Subject: [Dresden-pm] Problem mit Moduleinbindung In-Reply-To: <46C1C8D4.5030402@renee-baecker.de> References: <20070814150421.3445360F86@web009.hongkon.kon> <86zm0u2ltb.fsf@tkr_suse.webit.de> <46C1C8D4.5030402@renee-baecker.de> Message-ID: <584da2df0708142350s4fa58874hb1384827dfbf45dc@mail.gmail.com> Guten Morgen die Herren Mongers, leider bin ich noch nicht so richtig weitergekommen. Und bin auch noch nicht so richtig sicher, ob ich euch des Pudels Kern ;) richtig rübergebracht habe. Also noch mal Code zum Frühstück: # so versuchen wir Module dyn. einzubinden, in dem wir den Modulnamen erzeugen und in Variable myModul schreiben eval "require $myModul"; #jetzt mit einem require Ein paar Zeilen später versuchen wir das: ($value{'a'}, $value{'b'}, $value{'c'}) = eval"$myModul::calculate(\%val)"; Kann das so funktionieren ???? So weit ich das überblicken kann ;), kommen aus diesem Aufruf "magische" Sachen zurück, nur nicht das, was ich erwarten würde... Vielen Dank schon mal für Eure Hilfe!!! Gruß Thomas From mailinglisten at renee-baecker.de Wed Aug 15 00:04:51 2007 From: mailinglisten at renee-baecker.de (ReneeB) Date: Wed, 15 Aug 2007 09:04:51 +0200 Subject: [Dresden-pm] Problem mit Moduleinbindung In-Reply-To: <584da2df0708142350s4fa58874hb1384827dfbf45dc@mail.gmail.com> References: <20070814150421.3445360F86@web009.hongkon.kon> <86zm0u2ltb.fsf@tkr_suse.webit.de> <46C1C8D4.5030402@renee-baecker.de> <584da2df0708142350s4fa58874hb1384827dfbf45dc@mail.gmail.com> Message-ID: <46C2A593.7060903@renee-baecker.de> ungetestet: eval "require $myModul"; die $@ if $@; if( $myModul->can('calculate') ){ ($value{'a'}, $value{'b'}, $value{'c'}) = $myModul->calculate(\%h); # oder @value{qw/a b c/} = $myModul->calculate(\%h); } Thomas Rittsche wrote: > Guten Morgen die Herren Mongers, > > leider bin ich noch nicht so richtig weitergekommen. Und bin auch noch > nicht so richtig sicher, ob ich euch des Pudels Kern ;) richtig > rübergebracht habe. > > Also noch mal Code zum Frühstück: > > # so versuchen wir Module dyn. einzubinden, in dem wir den Modulnamen > erzeugen und in Variable myModul schreiben > > eval "require $myModul"; #jetzt mit einem require > > Ein paar Zeilen später versuchen wir das: > > ($value{'a'}, $value{'b'}, $value{'c'}) = eval"$myModul::calculate(\%val)"; > > Kann das so funktionieren ???? So weit ich das überblicken kann ;), > kommen aus diesem Aufruf "magische" Sachen zurück, nur nicht das, was > ich erwarten würde... > > Vielen Dank schon mal für Eure Hilfe!!! > > Gruß Thomas > _______________________________________________ > Dresden-pm mailing list > Dresden-pm at pm.org > http://mail.pm.org/mailman/listinfo/dresden-pm > > > -- $foo - Perl-Magazin (http://foo-magazin.de) Perl-Community.de (http://board.perl-community.de) Perl-Blog (http://reneeb-perlblog.blogspot.com) From thomas.rittsche at gmail.com Wed Aug 15 00:32:50 2007 From: thomas.rittsche at gmail.com (Thomas Rittsche) Date: Wed, 15 Aug 2007 09:32:50 +0200 Subject: [Dresden-pm] Problem mit Moduleinbindung In-Reply-To: <46C2A593.7060903@renee-baecker.de> References: <20070814150421.3445360F86@web009.hongkon.kon> <86zm0u2ltb.fsf@tkr_suse.webit.de> <46C1C8D4.5030402@renee-baecker.de> <584da2df0708142350s4fa58874hb1384827dfbf45dc@mail.gmail.com> <46C2A593.7060903@renee-baecker.de> Message-ID: <584da2df0708150032w6a0c28b9l96b6ca57faafb67a@mail.gmail.com> Ja - so können wir schon mal die Methode calculate aufrufen. Prima. Allerdings zerschießt es uns da die übergebene Hash-Referenz. Da stehen dann nicht mehr die benötigten Variablen drin, sondern der Pfad zu $myModul, z.B.: Module::myModul. Hat jemand Vorschläge ??? Vielen Dank!!!!! On 8/15/07, ReneeB wrote: > ungetestet: > > eval "require $myModul"; > die $@ if $@; > > if( $myModul->can('calculate') ){ > ($value{'a'}, $value{'b'}, $value{'c'}) = $myModul->calculate(\%h); > # oder @value{qw/a b c/} = $myModul->calculate(\%h); > } > > > > Thomas Rittsche wrote: > > Guten Morgen die Herren Mongers, > > > > leider bin ich noch nicht so richtig weitergekommen. Und bin auch noch > > nicht so richtig sicher, ob ich euch des Pudels Kern ;) richtig > > rübergebracht habe. > > > > Also noch mal Code zum Frühstück: > > > > # so versuchen wir Module dyn. einzubinden, in dem wir den Modulnamen > > erzeugen und in Variable myModul schreiben > > > > eval "require $myModul"; #jetzt mit einem require > > > > Ein paar Zeilen später versuchen wir das: > > > > ($value{'a'}, $value{'b'}, $value{'c'}) = eval"$myModul::calculate(\%val)"; > > > > Kann das so funktionieren ???? So weit ich das überblicken kann ;), > > kommen aus diesem Aufruf "magische" Sachen zurück, nur nicht das, was > > ich erwarten würde... > > > > Vielen Dank schon mal für Eure Hilfe!!! > > > > Gruß Thomas > > _______________________________________________ > > Dresden-pm mailing list > > Dresden-pm at pm.org > > http://mail.pm.org/mailman/listinfo/dresden-pm > > > > > > > > > -- > $foo - Perl-Magazin (http://foo-magazin.de) > Perl-Community.de (http://board.perl-community.de) > Perl-Blog (http://reneeb-perlblog.blogspot.com) > > _______________________________________________ > Dresden-pm mailing list > Dresden-pm at pm.org > http://mail.pm.org/mailman/listinfo/dresden-pm > From steffen.winkler at gmx.net Wed Aug 15 00:33:28 2007 From: steffen.winkler at gmx.net (Steffen Winkler) Date: Wed, 15 Aug 2007 09:33:28 +0200 Subject: [Dresden-pm] Problem mit Moduleinbindung Message-ID: <20070815073328.5012060F85@web009.hongkon.kon> Warum macht ihr immer nur string eval und verlangt, daß der Interpreter zurück zum Compiler schaltet und dann wieder zurück zum Interpreter. Das ist Horror. Warum nehmt Ihr nicht nicht block eval. eval {was hier drin died bricht nur den eval ab}; Hatte ich das nicht eindeutig geschrieben, daß man das nicht braucht. Bei require kann man den Modulename auch als Variable require $var; angeben. Klassen- oder Modulenamen sind sowieso strings, und Methodennamen können auch variablen sein. $class->$method(); use Carp qw(croak); eval {require $myModul}; croak $@ if $@; # verwende immer croak anstatt von die if(my $coderef = UNIVERSAL->can($myModul, $mysub)){ ($value{'a'}, $value{'b'}, $value{'c'}) = $coderef(\%h); } War nicht $class->can($method), die Frage auf Existenz von Objektmethoden, bei Berücksichtigung des @ISA? From steffen.winkler at gmx.net Wed Aug 15 00:40:59 2007 From: steffen.winkler at gmx.net (Steffen Winkler) Date: Wed, 15 Aug 2007 09:40:59 +0200 Subject: [Dresden-pm] Problem mit Moduleinbindung Message-ID: <20070815074059.BD77460F85@web009.hongkon.kon> $coderef(\%h); soll heißen $coderef->(\%h); Aber irgendwie scheint mir als ist nicht alles an die Liste gepostet worden. Irgendwer weiß schon, daß es Methoden und keine subs sind. Geht es eigentlich um prozedureale oder um objektorientierte Module? Das wäre schon mal ein Unterschied wie Tag und Nacht. From schwigon at webit.de Wed Aug 15 01:01:56 2007 From: schwigon at webit.de (Steffen Schwigon) Date: Wed, 15 Aug 2007 10:01:56 +0200 Subject: [Dresden-pm] Problem mit Moduleinbindung In-Reply-To: <584da2df0708142350s4fa58874hb1384827dfbf45dc@mail.gmail.com> (Thomas Rittsche's message of "Wed, 15 Aug 2007 08:50:31 +0200") References: <20070814150421.3445360F86@web009.hongkon.kon> <86zm0u2ltb.fsf@tkr_suse.webit.de> <46C1C8D4.5030402@renee-baecker.de> <584da2df0708142350s4fa58874hb1384827dfbf45dc@mail.gmail.com> Message-ID: <86y7gdz0nf.fsf@tkr_suse.webit.de> Hi! Steffen Winkler's Kritik klingt vielleicht etwas roh am frühen Morgen, prinzipiell sind seine Tips aber Gold wert. Der wesentliche Unterschied ist, dass er vorschlägt, nicht Strings zu konstruieren, sondern direkt die dynamische Natur von Perl zu verwenden. Ich finde es weniger wegen der Geschwindigkeit kritisch, sondern wegen der Unklarheiten, was bei der String-Interpolatio aus Deinen Variablen wird. Hier eine Problemzone, die beim Zusammenbauen von Strings eine Ursache sein kann: "Thomas Rittsche" writes: > ($value{'a'}, $value{'b'}, $value{'c'}) = > eval"$myModul::calculate(\%val)"; ^ ^^ ^ Es ist nicht sicher, ob Du versuchst, das % zu escapen, oder ob Du eine Hashreferenz möchtest. Momentan escapest Du nur mit dem \ innerhalb der Doppelhochkommas. Möchtest Du eine Hashreferenz reingeben, dann musst Du den \ seinerseits escapen und dann das % auch noch, damit Dir nicht die Inhalte von %val schon in den String reinkonstruiert werden. Alles in allem ein kompliziertes Stück Unüberschaubarkeit in so einem kleinen String. Du könntest die Verwendung von Einzelhochkommas in Betracht ziehen: ($value{a}, $value{b}, $value{c}) = eval "$myModul::calculate".'(\%val)'; Weiterer Tip: Bau Dir den String vorher zusammen, printe ihn aus und eval erst dann: use Data::Dumper; my $str = "$myModul::calculate".'(\%val)'; print Dumper($str); eval $str; So siehst Du, was auch Dein eval sieht. Aber versuch besser, Steffen Winkler's Mail zu verstehen. > Kann das so funktionieren ???? So weit ich das überblicken kann ;), > kommen aus diesem Aufruf "magische" Sachen zurück, nur nicht das, was > ich erwarten würde... Am besten, Du konstruierst mal ein Mini-Modul und baust den Fall minimalistisch nach. Dann haben wir eine gemeinsame Basis, an der man sieht, was man erwarten würde und was es wirklich tut. 3Steffen -- Steffen Schwigon Dresden Perl Mongers Deutscher Perl-Workshop From schwigon at webit.de Wed Aug 15 01:28:37 2007 From: schwigon at webit.de (Steffen Schwigon) Date: Wed, 15 Aug 2007 10:28:37 +0200 Subject: [Dresden-pm] Problem mit Moduleinbindung In-Reply-To: <584da2df0708150032w6a0c28b9l96b6ca57faafb67a@mail.gmail.com> (Thomas Rittsche's message of "Wed, 15 Aug 2007 09:32:50 +0200") References: <20070814150421.3445360F86@web009.hongkon.kon> <86zm0u2ltb.fsf@tkr_suse.webit.de> <46C1C8D4.5030402@renee-baecker.de> <584da2df0708142350s4fa58874hb1384827dfbf45dc@mail.gmail.com> <46C2A593.7060903@renee-baecker.de> <584da2df0708150032w6a0c28b9l96b6ca57faafb67a@mail.gmail.com> Message-ID: <86mywtkxqi.fsf@tkr_suse.webit.de> "Thomas Rittsche" writes: > Ja - so können wir schon mal die Methode calculate aufrufen. Prima. > Allerdings zerschießt es uns da die übergebene Hash-Referenz. Da > stehen dann nicht mehr die benötigten Variablen drin, sondern der > Pfad zu $myModul, z.B.: Module::myModul. Hat jemand Vorschläge ??? Es gibt einen Unterschied zwischen Module->method( \%args ); # oder $instance->method( \%args ); und Module::sub( \%args ); Erste Variante mit -> ist ein Methodenaufruf, dort wird das Modul (als String) oder das Objekt $instance als erster Parameter vor den anderen Parametern eingeschoben. Die zweite Variante mit :: ist einfach der Aufruf einer Sub aus dem Namespace "Module". Hier kommt die Hashref \%args als erstes Argument an. Ich musss zugeben, dass ich die Doppelpunktvariante auch grade nicht ohne String-eval hinbekomme. Steffen -- Steffen Schwigon Dresden Perl Mongers Deutscher Perl-Workshop From thomas.rittsche at gmail.com Wed Aug 15 01:31:41 2007 From: thomas.rittsche at gmail.com (Thomas Rittsche) Date: Wed, 15 Aug 2007 10:31:41 +0200 Subject: [Dresden-pm] Problem mit Moduleinbindung In-Reply-To: <86y7gdz0nf.fsf@tkr_suse.webit.de> References: <20070814150421.3445360F86@web009.hongkon.kon> <86zm0u2ltb.fsf@tkr_suse.webit.de> <46C1C8D4.5030402@renee-baecker.de> <584da2df0708142350s4fa58874hb1384827dfbf45dc@mail.gmail.com> <86y7gdz0nf.fsf@tkr_suse.webit.de> Message-ID: <584da2df0708150131w58a4b83di304002f9a0f5b7a4@mail.gmail.com> > Steffen Winkler's Kritik klingt vielleicht etwas roh am frühen Morgen, Ach wo - Lehrjahre sind keine Herrenjahre ;) > prinzipiell sind seine Tips aber Gold wert. Das ist wohl war.... Vielen Dank dafür Steffen!!! > Hier eine Problemzone, die beim Zusammenbauen von Strings eine Ursache > sein kann: > > ($value{'a'}, $value{'b'}, $value{'c'}) = > > eval"$myModul::calculate(\%val)"; > ^ ^^ ^ > > Es ist nicht sicher, ob Du versuchst, das % zu escapen, oder ob Du > eine Hashreferenz möchtest. Momentan escapest Du nur mit dem \ > innerhalb der Doppelhochkommas. Da hast du (wie so oft) Recht. Verstehe.... Wir habens jetzt über die "Winklersche" Methode gelöst: use Carp qw(croak); eval "require $productCalculate"; croak $@ if $@; if(my $coderef = UNIVERSAL::can($productCalculate, $sub)){ ($value{'netto'}, $value{'mwstprice'}, $value{'brutto'}) = $coderef->(\%val); } Allerdings mit dem Unterschied, das wir beim eval Hochkommas verwenden. Die vorgeschlagenen geschweiften Klammern habe Probleme verursacht. Vielen Dank für Eure Hilfe!!!! Gruß Thomas From schwigon at webit.de Wed Aug 15 01:45:31 2007 From: schwigon at webit.de (Steffen Schwigon) Date: Wed, 15 Aug 2007 10:45:31 +0200 Subject: [Dresden-pm] Hash slice (war Re: Problem mit Moduleinbindung) In-Reply-To: <584da2df0708142350s4fa58874hb1384827dfbf45dc@mail.gmail.com> (Thomas Rittsche's message of "Wed, 15 Aug 2007 08:50:31 +0200") References: <20070814150421.3445360F86@web009.hongkon.kon> <86zm0u2ltb.fsf@tkr_suse.webit.de> <46C1C8D4.5030402@renee-baecker.de> <584da2df0708142350s4fa58874hb1384827dfbf45dc@mail.gmail.com> Message-ID: <86tzr1jidw.fsf_-_@tkr_suse.webit.de> Hi! Was wir bei der Gelegenheit noch ästhetischer machen können, ist der Ergebnis-Hash, dann wird die Zeile auch nicht zu lang: "Thomas Rittsche" writes: > ($value{'a'}, $value{'b'}, $value{'c'}) = eval"$myModul::calculate(\%val)"; Vorab: bei Hashkeys kannst und solltest Du grundsätzlich die Hochkommas weglassen, wenn es eindeutig Strings sind: ($value{a}, $value{b}, $value{c}) = eval "$myModul::calculate".'(\%val)'; Jetzt zum eigentlichen: es gibt's eine Syntax, um mehrere Hash-Entries am Stück anzugeben, ein sogenannter Hash-Slice: @value{qw(a b c)} = eval "$myModul::calculate".'(\%val)'; Beachte die Kombination aus Sigil @ (obwohl es Hash ist) und geschweiften Klammern. Aus den geschweiften Klammern geht hervor, dass es ein Hashzugriff ist und das @ steht da, weil das Ergebis ein Array ist, nämlich alle Hashelemente, deren Keys in der geschweiften Klammer stehen. Das qw() verwende ich, um kein Komma/Hochkomma-Plaque zu bekommen, sonst stünde da: @value{'a', 'b', 'c'} = eval "$myModul::calculate".'(\%val)'; Das nur zur Erläuterung. Du kannst Dir mit Hashslices Deine Keys auch noch dynamisch zusammensetzen und dann das Array der Keys verwenden, logisch: my @keys = qw(a b c); @value{@keys} = eval "$myModul::calculate".'(\%val)'; Steffen -- Steffen Schwigon Dresden Perl Mongers Deutscher Perl-Workshop From schwigon at webit.de Wed Aug 15 01:50:53 2007 From: schwigon at webit.de (Steffen Schwigon) Date: Wed, 15 Aug 2007 10:50:53 +0200 Subject: [Dresden-pm] Problem mit Moduleinbindung In-Reply-To: <584da2df0708150131w58a4b83di304002f9a0f5b7a4@mail.gmail.com> (Thomas Rittsche's message of "Wed, 15 Aug 2007 10:31:41 +0200") References: <20070814150421.3445360F86@web009.hongkon.kon> <86zm0u2ltb.fsf@tkr_suse.webit.de> <46C1C8D4.5030402@renee-baecker.de> <584da2df0708142350s4fa58874hb1384827dfbf45dc@mail.gmail.com> <86y7gdz0nf.fsf@tkr_suse.webit.de> <584da2df0708150131w58a4b83di304002f9a0f5b7a4@mail.gmail.com> Message-ID: <86ps1pji4y.fsf@tkr_suse.webit.de> "Thomas Rittsche" writes: > if(my $coderef = UNIVERSAL::can($productCalculate, $sub)){ > ($value{'netto'}, $value{'mwstprice'}, $value{'brutto'}) = $coderef->(\%val); > } Probier bitte noch meine Hash-Slices, Erläuterung in Mail nebenan. @value{qw(netto mwstprice brutto)} = $coderef->(\%val); > Allerdings mit dem Unterschied, das wir beim eval Hochkommas > verwenden. Die vorgeschlagenen geschweiften Klammern habe Probleme > verursacht. Genau. Weil die Syntax $modul->$method mutmaßlich nur für den -> funktioniert, nicht mit :: . 3Steffen -- Steffen Schwigon Dresden Perl Mongers Deutscher Perl-Workshop From steffen.winkler at gmx.net Wed Aug 15 02:08:14 2007 From: steffen.winkler at gmx.net (Steffen Winkler) Date: Wed, 15 Aug 2007 11:08:14 +0200 Subject: [Dresden-pm] Problem mit Moduleinbindung Message-ID: <20070815090814.A19AF60F98@web009.hongkon.kon> Module::sub( \%args ); my $coderef = UNIVERSAL::can('Module', 'sub'); $coderef->(\%args) if $coderef; ----------------------------------------------------------- require EXPR; # steht in perldoc -f require was ist hier eine expression? "require $productCalculate" # das schon mal nicht $module # sieht gut aus {"require $productCalculate"} # das geht hier nicht, nur bei print und solch "schlimmen" Dingen Also mußt Du den String komplett in eine Variable schieben: my $module = "require $productCalculate"; require $module; ------------------------ Denn auch das geht nicht $object->"zusammenbasteln_von_$method"(); From steffen.winkler at gmx.net Wed Aug 15 02:12:44 2007 From: steffen.winkler at gmx.net (Steffen Winkler) Date: Wed, 15 Aug 2007 11:12:44 +0200 Subject: [Dresden-pm] Problem mit Moduleinbindung Message-ID: <20070815091244.0D29860F98@web009.hongkon.kon> aber das ist eine gültige expression: my $postfix = 'bla'; require ${\"zusammenbastel_$postfix"}; From steffen.winkler at gmx.net Wed Aug 15 02:21:56 2007 From: steffen.winkler at gmx.net (Steffen Winkler) Date: Wed, 15 Aug 2007 11:21:56 +0200 Subject: [Dresden-pm] Problem mit Moduleinbindung Message-ID: <20070815092156.D0F8860F9B@web009.hongkon.kon> Das ist vielleicht auch eine böse Falle gewesen: "$myModul::calculate" Das ist der SCALAR calculate aus dem Package $myModul und nicht die Stringverkettung von $myModul . '::calculate'. die "" da oben sind überflüssig. Richtig ist es mit der vollständigen Schreibweise eines Scalares: "${myModul}::calculate}" Bei uneindeutigkeiten muß man dem Perl sagen wo der name aufhört, so auch bei Strings allgemein. "$fooBar" ist nicht $foo . $Bar sondern einfach $fooBar Man schreibt vollständig: "${foo}Bar" und schon ist die Welt in Ordnung. From schwigon at webit.de Wed Aug 15 02:45:46 2007 From: schwigon at webit.de (Steffen Schwigon) Date: Wed, 15 Aug 2007 11:45:46 +0200 Subject: [Dresden-pm] Problem mit Moduleinbindung In-Reply-To: <20070815092156.D0F8860F9B@web009.hongkon.kon> (Steffen Winkler's message of "Wed, 15 Aug 2007 11:21:56 +0200") References: <20070815092156.D0F8860F9B@web009.hongkon.kon> Message-ID: <86d4xpjflh.fsf@tkr_suse.webit.de> "Steffen Winkler" writes: > "${myModul}::calculate}" Noch nicht. Irgendwo musst Du noch eine öffnende Klammer reinmalen. 3Steffen From steffen.winkler at gmx.net Wed Aug 15 02:58:39 2007 From: steffen.winkler at gmx.net (Steffen Winkler) Date: Wed, 15 Aug 2007 11:58:39 +0200 Subject: [Dresden-pm] Problem mit Moduleinbindung Message-ID: <20070815095839.78B0360FA2@web009.hongkon.kon> ni so "${myModul}::calculate}" sondern so "${myModul}::calculate" Alle Rechtschreib- und Syntaxfehler kommen nur daher, daß wir Computer haben. From schwigon at webit.de Wed Aug 15 05:50:36 2007 From: schwigon at webit.de (OTTO) Date: Wed, 15 Aug 2007 14:50:36 +0200 Subject: [Dresden-pm] Problem mit Moduleinbindung In-Reply-To: <20070815095839.78B0360FA2@web009.hongkon.kon> (Steffen Winkler's message of "Wed, 15 Aug 2007 11:58:39 +0200") References: <20070815095839.78B0360FA2@web009.hongkon.kon> Message-ID: <86643harmr.fsf@tkr_suse.webit.de> "Steffen Winkler" writes: > Alle Rechtschreib- und Syntaxfehler kommen nur daher, daß wir > Computer haben. Ich bin mir ganz sicher, dass Herr Gutenberg, Gott hab ihn selig, sich mit dem spiegelverkehrten Rumgefummel am Anfang auch ganz schön verheddert hat. Und als Gegenmaßnahme das Palindrom erfunden hat. :) OTTO From pagaltzis at gmx.de Thu Aug 16 03:01:42 2007 From: pagaltzis at gmx.de (A. Pagaltzis) Date: Thu, 16 Aug 2007 12:01:42 +0200 Subject: [Dresden-pm] Problem mit Moduleinbindung In-Reply-To: <20070815073328.5012060F85@web009.hongkon.kon> References: <20070815073328.5012060F85@web009.hongkon.kon> Message-ID: <20070816100142.GF5014@klangraum> * Steffen Winkler [2007-08-15 09:35]: > Bei require kann man den Modulename auch als Variable > require $var; > angeben. Nein, kann man nicht, diese Syntaxvariante versteht nur Dateinamen, keine Pakete. require Foo::Bar; sucht die Datei `Foo/Bar.pm` in allen Verzeichnissen, die in `@INC` stehen. require 'Foo::Bar'; sucht dagegen nach der Datei mit dem Namen `Foo::Bar`. Daher ist String-Eval nötig, um nachträglich mit Paketnamen zu arbeiten. Gruss, -- Aristoteles Pagaltzis // From pagaltzis at gmx.de Thu Aug 16 03:07:39 2007 From: pagaltzis at gmx.de (A. Pagaltzis) Date: Thu, 16 Aug 2007 12:07:39 +0200 Subject: [Dresden-pm] Problem mit Moduleinbindung In-Reply-To: <20070815090814.A19AF60F98@web009.hongkon.kon> References: <20070815090814.A19AF60F98@web009.hongkon.kon> Message-ID: <20070816100739.GG5014@klangraum> * Steffen Winkler [2007-08-15 11:10]: > Also mußt Du den String komplett in eine Variable schieben: > > my $module = "require $productCalculate"; > > require $module; Du lädst eine Datei mit dem wortwörtlichen Namen `require Irgendwas` (wenn der Wert von `$productCalculate` der String »Irgendwas« war)? Was soll das bringen? Gruss, -- Aristoteles Pagaltzis // From pagaltzis at gmx.de Thu Aug 16 04:42:58 2007 From: pagaltzis at gmx.de (A. Pagaltzis) Date: Thu, 16 Aug 2007 13:42:58 +0200 Subject: [Dresden-pm] Problem mit Moduleinbindung In-Reply-To: <584da2df0708150131w58a4b83di304002f9a0f5b7a4@mail.gmail.com> References: <20070814150421.3445360F86@web009.hongkon.kon> <86zm0u2ltb.fsf@tkr_suse.webit.de> <46C1C8D4.5030402@renee-baecker.de> <584da2df0708142350s4fa58874hb1384827dfbf45dc@mail.gmail.com> <86y7gdz0nf.fsf@tkr_suse.webit.de> <584da2df0708150131w58a4b83di304002f9a0f5b7a4@mail.gmail.com> Message-ID: <20070816114258.GH5014@klangraum> * Thomas Rittsche [2007-08-15 10:35]: > Wir habens jetzt über die "Winklersche" Methode gelöst: > > use Carp qw(croak); > > eval "require $productCalculate"; > > croak $@ if $@; > > if(my $coderef = UNIVERSAL::can($productCalculate, $sub)){ > ($value{'netto'}, $value{'mwstprice'}, $value{'brutto'}) = > $coderef->(\%val); > } Igitt. `UNIVERSAL::can` ist eine Methode; vergess bitte sofort wieder, dass man das, weil Perl keinen wirklichen Unterschied zwischen Methoden und Prozeduren kennt, auch als Prozedur aufrufen kann. Das hebelt nur völlig grundlos Vererbung und sonstige Polymorphie aus. In deinem Fall ist das zwar wahrscheinlich kein Problem, aber du brauchst `UNIVERSAL::can` auch garnicht. Genauso sieht es sonst aus; da es keinen einzigen Fall gibt, in dem man darauf angewiesen wäre, `UNIVERSAL::can` als Prozedur aufzurufen, sollte man sich das garnicht angewöhnen. Der ordentliche Ansatz lautet in deinem Fall folgendermassen: my $calc = eval qq{ require $productCalculate; \\&${productCalculate}::calculate; }; croak $@ if $@; if( $calc ) { @value{ qw( netto mwstprice brutto ) } = $calc->( \%val ); } Man beachte die Doppelung des Backslashs im Eval-String. Ich will an der Stelle eine Referenz zur Funktion nehmen; da ich den Code in einem ein String mit doppelten Anführungszeichen stehen habe, muss der dafür verwendete Backslash entwertet werden. Ich weiss übrigens nicht, warum das `if` an der Stelle eigentlich nötig ist. Nach deiner ursprünglichen Beschreibung zu urteilen sollte jedes der in Frage kommende Module eine `calculate`- Funktion enthalten. Das bedeutet, dass das `if` allein dem Zweck dient, ein fatales Problem in stillschweigendes Fehlverhalten zu konvertieren. Entweder sollte das `if` durch einen `else`-Zweig ergänzt werden, der laut schreit, oder einfach komplett wegfallen (dann übernimmt Perl das laut schreien automatisch). Gruss, -- Aristoteles Pagaltzis // From steffen.winkler at gmx.net Thu Aug 16 04:54:30 2007 From: steffen.winkler at gmx.net (Steffen Winkler) Date: Thu, 16 Aug 2007 13:54:30 +0200 Subject: [Dresden-pm] Problem mit Moduleinbindung Message-ID: <20070816115430.E23D760FAA@web009.hongkon.kon> A. Pagaltzis hat Recht! Die Schleife müßte also folgendermaßen aufgebaut werden: use strict; use warnings; for (qw(Data::Dumper)) { (my $module_name = "$_.pm") =~ s{::}{/}xms; require $module_name; } und gleich mal getestet, ob das Modul auch wirkich da ist: print Data::Dumper::Dumper({procedural => 1}), Data::Dumper->new([{oo => 1}])->Dump(); ---------------------------------------------------------------------------- eval qq{ ist auch nur eval string und eval string ist nicht(!) best practice. Wenn er eval will, dann kann er mit eval string auch gleich use nehmen. From pagaltzis at gmx.de Sat Aug 18 04:52:17 2007 From: pagaltzis at gmx.de (A. Pagaltzis) Date: Sat, 18 Aug 2007 13:52:17 +0200 Subject: [Dresden-pm] Problem mit Moduleinbindung In-Reply-To: <20070816115430.E23D760FAA@web009.hongkon.kon> References: <20070816115430.E23D760FAA@web009.hongkon.kon> Message-ID: <20070818115217.GG30978@klangraum> * Steffen Winkler [2007-08-16 13:55]: > Die Schleife müßte also folgendermaßen aufgebaut werden: > > (my $module_name = "$_.pm") =~ s{::}{/}xms; > require $module_name; > > [?] > > eval qq{ > ist auch nur eval string und eval string ist nicht(!) best > practice. Schreibst du gern überflüssigen Code? :-) Erklär mir doch bitte, was für einen Vorteil man hier erreicht, indem man auf String-eval verzichtet. > Wenn er eval will, dann kann er mit eval string auch gleich use > nehmen. Gleiche Frage: was für einen Vorteil hat er davon? Gruss, -- Aristoteles Pagaltzis // From perl-list at tiscali.de Sun Aug 19 12:01:13 2007 From: perl-list at tiscali.de (perl-list at tiscali.de) Date: Sun, 19 Aug 2007 19:01:13 UT Subject: [Dresden-pm] Problem mit Moduleinbindung Message-ID: <46B409890023AEEE@mail-relay-6.tiscali.sys> (added by postmaster@smtp10.unit.tiscali.de) Ein eingebundener Text mit undefiniertem Zeichensatz wurde abgetrennt. Name: nicht verfügbar URL: http://mail.pm.org/pipermail/dresden-pm/attachments/20070819/ad8e02bd/attachment.pl From create-soft at tiscali.de Mon Aug 20 11:16:40 2007 From: create-soft at tiscali.de (Torsten Knorr) Date: Mon, 20 Aug 2007 18:16:40 UT Subject: [Dresden-pm] Test Message-ID: <46B4098900258580@mail-relay-6.tiscali.sys> (added by postmaster@smtp10.unit.tiscali.de) Ein Dateianhang mit HTML-Daten wurde abgetrennt... URL: http://mail.pm.org/pipermail/dresden-pm/attachments/20070820/a45ac70b/attachment.html From create-soft at tiscali.de Mon Aug 20 11:52:05 2007 From: create-soft at tiscali.de (Torsten Knorr) Date: Mon, 20 Aug 2007 18:52:05 UT Subject: [Dresden-pm] Test Message-ID: <46B40989002598A5@mail-relay-6.tiscali.sys> (added by postmaster@smtp10.unit.tiscali.de) Muß mal mein Mail-Programm testen. Welche Header braucht das Mailverarbeitende Programm der Liste? Torsten From 2005 at kuarepoti-dju.net Tue Aug 21 00:53:14 2007 From: 2005 at kuarepoti-dju.net (Josef Spillner) Date: Tue, 21 Aug 2007 09:53:14 +0200 Subject: [Dresden-pm] Test In-Reply-To: <46B40989002598A5@mail-relay-6.tiscali.sys> References: <46B40989002598A5@mail-relay-6.tiscali.sys> (added by postmaster@smtp10.unit.tiscali.de) Message-ID: <200708210953.14604.2005@kuarepoti-dju.net> On Monday 20 August 2007 20:52:05 Torsten Knorr wrote: > Muß mal mein Mail-Programm testen. > Welche Header braucht das Mailverarbeitende Programm der Liste? > Torsten Uh... keine? Es erzeugt Header, die zu zum Filtern verwenden kannst. Aber es benötigt keine besonderen Header. Es reichen From: (zur Absenderkennung) und To: (zur Listenkennung) zu, würde ich mal von der minimalistischen Seite her behaupten. Der Beweis mittels Mail::Sendmail oder ähnlichen Tools sei hierbei als Übung angedacht. Josef From schwigon at webit.de Tue Aug 21 01:16:45 2007 From: schwigon at webit.de (Steffen Schwigon) Date: Tue, 21 Aug 2007 10:16:45 +0200 Subject: [Dresden-pm] Test In-Reply-To: <46B40989002598A5@mail-relay-6.tiscali.sys> (added by postmaster@smtp10.unit.tiscali.de) (Torsten Knorr's message of "Mon, 20 Aug 2007 18:52:05 UT") References: <46B40989002598A5@mail-relay-6.tiscali.sys> Message-ID: <86hcmt2tg2.fsf@tkr_suse.webit.de> Torsten Knorr writes: > Muß mal mein Mail-Programm testen. Scheint zu gehen. > Welche Header braucht das Mailverarbeitende Programm der Liste? Von Deiner Seite aus nicht viel, Dein From/From: sollte halt stimmen und Dein Klartextname ist auch angenehm, den Rest setzt der mailman von pm.org. IMHO bist Du im Rennen. Willkommen. :-) GreetinX Steffen -- Steffen Schwigon Dresden Perl Mongers Deutscher Perl-Workshop From mailinglisten at renee-baecker.de Tue Aug 21 07:00:56 2007 From: mailinglisten at renee-baecker.de (mailinglisten at renee-baecker.de) Date: Tue, 21 Aug 2007 16:00:56 +0200 Subject: [Dresden-pm] 10. Deutscher Perl-Workshop // CfP Message-ID: <20070821_140056_033343.mailinglisten@renee-baecker.de> ** DE-Version 10. Deutscher Perl-Workshop -- Call for Papers / Participation Von Mittwoch, dem 13.02.2008 bis Freitag, den 15.02.2008 findet der 10. Deutsche Perl-Workshop in Erlangen am Regionalen Rechenzentrum statt. Zielgruppe des Workshops sind alle ernsthaften Perl-Anwender und die, die es werden wollen. Unser Workshop steht und fällt mit den Vorträgen. Üblicherweise sind Vorträge 5, 20 oder 40 Minuten lang. Alle Themen, die in irgendeiner Weise mit Perl oder dem Perl-Umfeld zu tun haben, können als Vorträge für den Workshop interessant sein. Unter www.perl-workshop.de/2008/cfp.html findest Du den ausführlichen "Call for Papers". Abgabefrist für die Einreichung von Vorschlägen ist Montag, der 29.10.2007. ** EN-Version The 10th German Perl-Workshop will take place from 13.02.2008 to 15.02.2008 in Erlangen, Germany. As always we welcome proposals for talks or tutorials from international participants. See www.perl-workshop.de/2008/cfp.html for the detailed Call for Papers. Deadline for proposals is Monday, 29.10.2007. From schwigon at webit.de Thu Aug 23 08:21:24 2007 From: schwigon at webit.de (Steffen Schwigon) Date: Thu, 23 Aug 2007 17:21:24 +0200 Subject: [Dresden-pm] YAPC::Europe 2007 Message-ID: <861wduz37v.fsf@tkr_suse.webit.de> Hi! Ihr wisst, dass ihr eigentlich zur YAPC::EU fahren wollt, oder? http://use.perl.org/article.pl?sid=07/08/23/0647225 http://vienna.yapceurope.org/ /me ist dort. Steffen -- Steffen Schwigon Dresden Perl Mongers Deutscher Perl-Workshop From joerg.westphal at gmx.de Sat Aug 25 12:48:49 2007 From: joerg.westphal at gmx.de (Joerg Westphal) Date: Sat, 25 Aug 2007 21:48:49 +0200 Subject: [Dresden-pm] [Fwd: [ger.ct] Re: CounterClock] Message-ID: <46D087A1.3000707@gmx.de> Heute bei de.alt.netdigest gelesen. ;-) Lebenszeichen Jörg -------- Original-Nachricht -------- Betreff: [ger.ct] Re: CounterClock Datum: Sat, 25 Aug 2007 15:15:00 +0200 Von: t.gf at freenet.de (Thomas Flaig) Organisation: Szafe im Netz Newsgruppen: de.alt.netdigest Followup-An: de.talk.jokes.d Message-ID: <46cef626$1 at news02.heise.de> From: Ralf Muschall Newsgroups: ger.ct Subject: Re: CounterClock Date: Fri, 24 Aug 2007 17:14:48 +0200 Herwig Huener AQSR schrieb: > Wie nuetzlich ist "wish"? Ist das Quartet Tcl, Tcl/Tk, > wish und expect der ScriptSprache perl ueberlegen? Nur an Saugkraft. Tk und Expect sind Bibliotheken und laufen mit fast allem. Wish geht für interaktive Einzeiler und wird darüber schnell unhandlich. > perl habe ich mir immer noch nicht einverleibt, Dann mach mal, mit dem Modul Lingua::Romana::Perligata ist das fast so verständlich wie Cobol. Wenn Du Dir vorher schnell Haskell beschaffst, kannst Du pugs ziehen und gleich perl6 spielen (das sollte eigentlich zeitgleich mit Hurd, emacs22 und dem kommerziell funktionierenden Fusionsreaktor fertigwerden, aber der Prophet hat die Absprache missachtet und emacs eher geoffenbart). Ralf -- Submissionen fuer de.alt.netdigest bitte an schicken. Der Einsender ist für den Inhalt der Einreichung verantwortlich, nicht der Moderator der Newsgruppe. From schwigon at webit.de Sat Aug 25 13:46:59 2007 From: schwigon at webit.de (Steffen Schwigon) Date: Sat, 25 Aug 2007 22:46:59 +0200 Subject: [Dresden-pm] :engine::Plan9 Message-ID: <86ps1bcpfg.fsf@tkr_suse.webit.de> Weil wir ja regelmäßig Plan9 auf unserer Tagesordnung haben, hier gibt's die Regex-Engine als Plugin in Perl: http://search.cpan.org/~avar/re-engine-Plan9/ Die Regex-Syntax-Beschreibung ist nett: It is the form used by egrep(1) before egrep got complicated. :-) Nur so. Steffen -- Steffen Schwigon From schwigon at webit.de Sat Aug 25 13:52:17 2007 From: schwigon at webit.de (Steffen Schwigon) Date: Sat, 25 Aug 2007 22:52:17 +0200 Subject: [Dresden-pm] [Fwd: [ger.ct] Re: CounterClock] In-Reply-To: <46D087A1.3000707@gmx.de> (Joerg Westphal's message of "Sat, 25 Aug 2007 21:48:49 +0200") References: <46D087A1.3000707@gmx.de> Message-ID: <86d4xbcp6m.fsf@tkr_suse.webit.de> Joerg Westphal writes: > Heute bei de.alt.netdigest gelesen. ;-) > [...] Nice. > Lebenszeichen Das ist aber noch wichtiger. Du hast mitbekommen, dass wir das nächste Treffen um eine Woche verschieben und dass es unser 5-jähriges ist? Steffen -- Steffen Schwigon Dresden Perl Mongers Deutscher Perl-Workshop