From usenet at gmx.eu Fri Aug 1 13:15:24 2008 From: usenet at gmx.eu (Steffen Liebergeld) Date: Fri, 1 Aug 2008 20:15:24 +0000 (UTC) Subject: [Dresden-pm] Dresden Perl Mongers Treffen August 2008 References: Message-ID: Hallo Steffen, On 2008-08-01, Steffen Schwigon wrote: > > > "Stell Dir vor, es geht, > und keiner kriegts hin." > -- Wolfgang Neuss Der Spruch ist geil. > Hi! > > Am kommenden Donnerstag treffen sich wieder die Dresden Perl Mongers. > > Donnerstag, den 07. August 2008 > 20.30 Uhr > Straßencafé (Straße E) > Werner-Hartmann-Straße 4, 01099 Dresden > http://www.strassencafe.de/ Ich bin am Freitag bei der Hochzeit meines Vaters. Schade. Gruß, Steffen From ss5 at renormalist.net Fri Aug 1 14:25:00 2008 From: ss5 at renormalist.net (Steffen Schwigon) Date: Fri, 01 Aug 2008 23:25:00 +0200 Subject: [Dresden-pm] Dresden Perl Mongers Treffen August 2008 In-Reply-To: (Steffen Liebergeld's message of "Fri, 1 Aug 2008 20:15:24 +0000 (UTC)") References: Message-ID: <87k5f0xwb7.fsf@shirts.quite-simply.de> Steffen Liebergeld writes: >> Donnerstag, den 07. August 2008 > Ich bin am Freitag bei der Hochzeit meines Vaters. Ich seh den Zusammenhang nicht. Ich bin Freitag auf Arbeit. Steffen From usenet at gmx.eu Tue Aug 5 06:32:46 2008 From: usenet at gmx.eu (Steffen Liebergeld) Date: Tue, 5 Aug 2008 13:32:46 +0000 (UTC) Subject: [Dresden-pm] Dresden Perl Mongers Treffen August 2008 References: <87k5f0xwb7.fsf@shirts.quite-simply.de> Message-ID: On 2008-08-01, Steffen Schwigon wrote: > Steffen Liebergeld writes: >>> Donnerstag, den 07. August 2008 >> Ich bin am Freitag bei der Hochzeit meines Vaters. > > Ich seh den Zusammenhang nicht. Ich bin Freitag auf Arbeit. Es gibt einen Zusammenhang zwischen wenig schlafen und der Größe der Tränensäcke. Hier ein schöner Spruch aus dem Manual von Sleep (sleep.dashnine.org): "If you put a million monkeys at a million keyboards, one of them will eventually write a Java program. The rest of them will write Perl programs." Gruß, Steffen PS: Vielleicht schaue ich trotzdem mal vorbei. From ss5 at renormalist.net Tue Aug 5 08:00:29 2008 From: ss5 at renormalist.net (Steffen Schwigon) Date: Tue, 05 Aug 2008 17:00:29 +0200 Subject: [Dresden-pm] Dresden Perl Mongers Treffen August 2008 In-Reply-To: (Steffen Liebergeld's message of "Tue, 5 Aug 2008 13:32:46 +0000 (UTC)") References: <87k5f0xwb7.fsf@shirts.quite-simply.de> Message-ID: <871w131p82.fsf@shirts.quite-simply.de> Steffen Liebergeld writes: > PS: Vielleicht schaue ich trotzdem mal vorbei. Was ich schön fände ... :-) 3Steffen -- Steffen Schwigon From hd.kirmse at gmx.de Tue Aug 5 08:59:24 2008 From: hd.kirmse at gmx.de (Hans-Dietrich Kirmse) Date: Tue, 05 Aug 2008 17:59:24 +0200 Subject: [Dresden-pm] Perl und Java Message-ID: <489878DC.3010504@gmx.de> Hallo, ich habe wiedermal eine "dusslige" Frage: In PHP gibt es die Möglichkeit, auf Java-Klassen zuzugreifen. Es gibt desweiteren auch Möglichkeit, aus Java auf PHP zuzugreifen, indem man PHP als Servlet betreibt. Ich habe zwar einige Perl-Bücher, aber da habe ich nichts davon gelesen, dass man Perl und Java "verschmelzen" kann. Auch eine Suche im Netz hat mich bis jetzt nicht weiter gebracht. Meine Frage: geht es den überhaupt und wenn ja, wo könnte man dazu Literatur bzw. ein Tutorial finden? Würde mich über eine Antwort sehr freuen. Mit freundlichen Grüßen Hans-Dietrich From steffen.winkler at gmx.net Wed Aug 6 00:21:37 2008 From: steffen.winkler at gmx.net (Steffen Winkler) Date: Wed, 6 Aug 2008 09:21:37 +0200 Subject: [Dresden-pm] Perl und Java Message-ID: <20080806072137.2CED161003@web009.kontent.com> Inline::Java From hd.kirmse at gmx.de Wed Aug 6 01:26:50 2008 From: hd.kirmse at gmx.de (Hans-Dietrich Kirmse) Date: Wed, 06 Aug 2008 10:26:50 +0200 Subject: [Dresden-pm] Perl und Java In-Reply-To: <20080806072137.2CED161003@web009.kontent.com> References: <20080806072137.2CED161003@web009.kontent.com> Message-ID: <4899604A.3090202@gmx.de> Hallo Steffen, Steffen Winkler schrieb: > Inline::Java Das ist was ich gesucht habe. Die Doku erscheint mir trotz meiner (sau-)mäßigen Englischkenntnisse verständlich - Danke. Mit freundlichen Grüßen Hans-Dietrich From jiabaoyu at gmail.com Fri Aug 8 01:54:03 2008 From: jiabaoyu at gmail.com (Baoyu Jia) Date: Fri, 8 Aug 2008 10:54:03 +0200 Subject: [Dresden-pm] off top [Vermittlungsgutschein ARGE/ Arbeitsvermittler] Message-ID: Hallo, vielleicht könnte mir jemand einen Arbeitsvermittler in Raum Dresden empfehlen, ich habe hier Vermittlungsgutschein vom Arbeitsamt, damit möchte ich einen guten privaten Arbeitsvermittler beglücklichen. Pardon für offtop :-( Cu, Konstantin -------------- nächster Teil -------------- Ein Dateianhang mit HTML-Daten wurde abgetrennt... URL: From steffen.winkler at gmx.net Fri Aug 8 02:01:48 2008 From: steffen.winkler at gmx.net (Steffen Winkler) Date: Fri, 8 Aug 2008 11:01:48 +0200 Subject: [Dresden-pm] off top [Vermittlungsgutschein ARGE/ Arbeitsvermittler] Message-ID: <20080808090148.D7D3760FAA@web009.kontent.com> So geht's aber auch: https://www.xing.com/app/forum?op=showarticles;id=12194631;articleid=12194631 Wir suchen hier in Erlangen gute Perl-Programmierer. Wenn Du einer bist, dann antworte auf den Beitrag und Du erfährst mehr von mir. Sachsen sind hier übrigens jede Menge. --Steffen From jiabaoyu at gmail.com Sat Aug 9 12:56:24 2008 From: jiabaoyu at gmail.com (Baoyu Jia) Date: Sat, 9 Aug 2008 21:56:24 +0200 Subject: [Dresden-pm] off top [Vermittlungsgutschein ARGE/ Arbeitsvermittler] In-Reply-To: <20080808090148.D7D3760FAA@web009.kontent.com> References: <20080808090148.D7D3760FAA@web009.kontent.com> Message-ID: 2008/8/8 Steffen Winkler > So geht's aber auch: > https://www.xing.com/app/forum?op=showarticles;id=12194631;articleid=12194631 > > Wir suchen hier in Erlangen gute Perl-Programmierer. Wenn Du einer bist, > dann antworte auf den Beitrag und Du erfährst mehr von mir. Sachsen sind > hier übrigens jede Menge. > Hi, danke für xing, obwohl ich schon seit etwa 5 Jahren immer wieder etwas Perl schreibe, würde ich mich nicht als " erfahrenen Perl-Programmierer" zu bezeichnen. Es tut mir sehr leid.:-( -------------- nächster Teil -------------- Ein Dateianhang mit HTML-Daten wurde abgetrennt... URL: From steffen.winkler at gmx.net Sun Aug 10 02:24:00 2008 From: steffen.winkler at gmx.net (Steffen Winkler) Date: Sun, 10 Aug 2008 11:24:00 +0200 Subject: [Dresden-pm] off top [Vermittlungsgutschein ARGE/ Arbeitsvermittler] In-Reply-To: References: <20080808090148.D7D3760FAA@web009.kontent.com> Message-ID: <20080810092400.114230@gmx.net> Wenn Du 5 Jahre lang auch immer mal was mit HTML, CSS und JavaScript gemacht hast bist Du genau richtig. Sei nicht so bescheiden. --Steffen -------- Original-Nachricht -------- > Datum: Sat, 9 Aug 2008 21:56:24 +0200 > Von: "Baoyu Jia" > An: dresden-pm at pm.org > Betreff: Re: [Dresden-pm] off top [Vermittlungsgutschein ARGE/ Arbeitsvermittler] > 2008/8/8 Steffen Winkler > > > So geht's aber auch: > > > https://www.xing.com/app/forum?op=showarticles;id=12194631;articleid=12194631 > > > > Wir suchen hier in Erlangen gute Perl-Programmierer. Wenn Du einer bist, > > dann antworte auf den Beitrag und Du erfährst mehr von mir. Sachsen > sind > > hier übrigens jede Menge. > > > > > Hi, danke für xing, obwohl ich schon seit etwa 5 Jahren immer wieder > etwas Perl schreibe, würde ich mich > nicht als " erfahrenen Perl-Programmierer" zu bezeichnen. Es tut mir sehr > leid.:-( -- steffen.winkler at gmx.net http://steffen-winkler.de/ http://www.xing.com/go/invuid/Steffen_Winkler GMX startet ShortView.de. Hier findest Du Leute mit Deinen Interessen! Jetzt dabei sein: http://www.shortview.de/wasistshortview.php?mc=sv_ext_mf at gmx From akunert at main-rheiner.de Mon Aug 11 02:51:54 2008 From: akunert at main-rheiner.de (Andreas Kunert-Werneburg) Date: Mon, 11 Aug 2008 11:51:54 +0200 Subject: [Dresden-pm] Return-Wert von parse_file() XML::LibXML Message-ID: <48A00BBA.7050305@main-rheiner.de> Hallo, ich habe ein kleines Problem mit einem Skript, welches XML-Dateien parsen soll. Solange valides XML geliefert wird, klappt auch alles super. Nur wenn es nicht valide ist, habe ich das Problem. Das Skript arbeitet zweistufig. Zuerst werden die XML-Dateien aus dem Eingangsverzeichnis in das Warte-Verzeichnis verschoben und dann der Parser aufgerufen, der dann die Dateien im Warte-Verzeichnis abarbeiten soll. Jetzt würde ich gern VOR dem Verschieben testen, ob das XML-File valide ist. Ist das nicht der Fall, so soll es in einen anderen Ordner verschoben werden und der Parser NICHT gestartet werden. ich arbeite mit XML::LibXML und frage mich, ob ich bei my $document = $parser->parse_file($xmlfilename); einen Returnwert erhalten würde, mithilfe dessen ich die entsprechende Verschiebe-Operation einleiten kann. Mal laienhaft: ------------------------------------------ $parser = new XML::LibXML; if($parser->parse_file($xmlfile) == TRUE){ verschiebe nach A und rufe Parser auf; } else { verschiebe nach B und melde Fehler per Mail; } ------------------------------------------- Mir gehts eigentlich nur darum, zu prüfen, ob die Datei valides XML enthält. Den Rest bekomme ich dann schon hin. Danke! Gruß Andreas From falk.herrmann at bike24.net Mon Aug 11 03:12:33 2008 From: falk.herrmann at bike24.net (Falk Herrmann) Date: Mon, 11 Aug 2008 12:12:33 +0200 Subject: [Dresden-pm] Return-Wert von parse_file() XML::LibXML In-Reply-To: <48A00BBA.7050305@main-rheiner.de> References: <48A00BBA.7050305@main-rheiner.de> Message-ID: <48A01091.80204@bike24.net> Ich nehme meist immer XML::Twig. Dort gibt es z.B. safe_parse ( SOURCE [, OPT => OPT_VALUE [...]]) Laut Doku: This method is similar to parse except that it wraps the parsing in an eval block. It returns the twig on success and 0 on failure (the twig object also contains the parsed twig). $@ contains the error message on failure. Note that the parsing still stops as soon as an error is detected, there is no way to keep going after an error. Scheint genau das zu sein, was Du suchst. Hängt aber vielleicht auch etwas von der Größe der zu parsenden Dateien ab. Wenn eine Datei sehr groß ist, wird entsprechend viel Speicher verbraucht und twig ist vielleicht nicht so geeignet. Grüße, Falk. Andreas Kunert-Werneburg wrote: > Hallo, > > ich habe ein kleines Problem mit einem Skript, welches XML-Dateien > parsen soll. > Solange valides XML geliefert wird, klappt auch alles super. > Nur wenn es nicht valide ist, habe ich das Problem. > > Das Skript arbeitet zweistufig. Zuerst werden die XML-Dateien aus dem > Eingangsverzeichnis in das Warte-Verzeichnis verschoben und dann der > Parser aufgerufen, der dann die Dateien im Warte-Verzeichnis abarbeiten > soll. > > Jetzt würde ich gern VOR dem Verschieben testen, ob das XML-File valide > ist. Ist das nicht der Fall, so soll es in einen anderen Ordner > verschoben werden und der Parser NICHT gestartet werden. > > ich arbeite mit XML::LibXML und frage mich, ob ich bei > my $document = $parser->parse_file($xmlfilename); > einen Returnwert erhalten würde, mithilfe dessen ich die entsprechende > Verschiebe-Operation einleiten kann. > > Mal laienhaft: > ------------------------------------------ > $parser = new XML::LibXML; > if($parser->parse_file($xmlfile) == TRUE){ > verschiebe nach A und rufe Parser auf; > } else { > verschiebe nach B und melde Fehler per Mail; > } > ------------------------------------------- > > Mir gehts eigentlich nur darum, zu prüfen, ob die Datei valides XML > enthält. Den Rest bekomme ich dann schon hin. > > Danke! > > Gruß Andreas > > _______________________________________________ > Dresden-pm mailing list > Dresden-pm at pm.org > http://mail.pm.org/mailman/listinfo/dresden-pm > > From pagaltzis at gmx.de Mon Aug 11 10:34:18 2008 From: pagaltzis at gmx.de (Aristoteles Pagaltzis) Date: Mon, 11 Aug 2008 19:34:18 +0200 Subject: [Dresden-pm] Return-Wert von parse_file() XML::LibXML In-Reply-To: <48A00BBA.7050305@main-rheiner.de> References: <48A00BBA.7050305@main-rheiner.de> Message-ID: <20080811173418.GA24952@klangraum.plasmasturm.org> * Andreas Kunert-Werneburg [2008-08-11 11:55]: > Jetzt würde ich gern VOR dem Verschieben testen, ob das > XML-File valide ist. Das geht nur, indem du das XML zu parsen versuchst. Von außen ansehen kann man es der Datei schlecht. ;-) > Jetzt würde ich gern VOR dem Verschieben testen, ob das > XML-File valide ist. Ist das nicht der Fall, so soll es in > einen anderen Ordner verschoben werden und der Parser NICHT > gestartet werden. Warum ist das so wichtig? > ich arbeite mit XML::LibXML und frage mich, ob ich bei my > $document = $parser->parse_file($xmlfilename); einen Returnwert > erhalten würde, mithilfe dessen ich die entsprechende > Verschiebe-Operation einleiten kann. Du kannst mit `eval { ... }` die Exception abfangen, die von LibXML generiert wird, wenn der Parse-Versuch fehlschlägt. > Mal laienhaft: > ------------------------------------------ > $parser = new XML::LibXML; > if($parser->parse_file($xmlfile) == TRUE){ > verschiebe nach A und rufe Parser auf; > } else { > verschiebe nach B und melde Fehler per Mail; > } > ------------------------------------------- > > Mir gehts eigentlich nur darum, zu prüfen, ob die Datei valides > XML enthält. Den Rest bekomme ich dann schon hin. my $doc; eval { $doc = XML::LibXML->new->parse_file( $xmlfile ) }; if ( $doc ) { # verschiebe nach A # Parser-Aufruf nicht mehr nötig, einfach $doc nehmen } else { # verschiebe nach B und melde Fehler per Mail } Gruß, -- Aristoteles Pagaltzis // From thomas.rittsche at gmail.com Tue Aug 12 01:04:11 2008 From: thomas.rittsche at gmail.com (Thomas Rittsche) Date: Tue, 12 Aug 2008 10:04:11 +0200 Subject: [Dresden-pm] =?iso-8859-1?q?Regul=E4re_Ausdr=FCcke_-_Suchen_und_E?= =?iso-8859-1?q?rsetzen_von_Worten?= Message-ID: <584da2df0808120104i6e16b019v947c7fc94bd987fb@mail.gmail.com> Hallo an alle, ich habe mal wieder ein Problem, bei dem ich überhaupt keine Idee habe, wie man da rangehen könnte. Das Ziel ist es bestimmte Wörter bzw. Wortgruppen in einem Text durch einen Link zu ersetzen (bzw. den Link darum zu bauen). Mit einzelnen Wörtern ist das alles kein Problem. Die Schwierigkeit liegt in Wortgruppen, die selbst als Schlüsselworte definiert sind und dabei einzelne Schlüsselworte enthalten. Hier mal ein Beispiel zum besseren Verständnis: my @keywords = ("affe", "hund", "affe klettert", "hund rennt"); my $text = "Ein Affe klettert, weil er ein Affe ist. Ein Hund rennt, weil er ein Hund ist."; my $link = ""; foreach my $keyword(@keywords) { $text =~ s/($keyword)/$link$1$\<\/a>/gi; } print $text; Ziel wäre es, Links um "affe", "hund", "affe klettert", "hund rennt" zu bauen. Leider baut er mir die so nur um "affe" und "hund". Wer kann mich auf den Pfad der Erleuchtung führen? Grüße aus Radebeul und vielen Dank! Thomas From falk.herrmann at bike24.net Tue Aug 12 01:31:40 2008 From: falk.herrmann at bike24.net (Falk Herrmann) Date: Tue, 12 Aug 2008 10:31:40 +0200 Subject: [Dresden-pm] =?iso-8859-1?q?Regul=E4re_Ausdr=FCcke_-_Suchen_und_E?= =?iso-8859-1?q?rsetzen_von_Worten?= In-Reply-To: <584da2df0808120104i6e16b019v947c7fc94bd987fb@mail.gmail.com> References: <584da2df0808120104i6e16b019v947c7fc94bd987fb@mail.gmail.com> Message-ID: <48A14A6C.3040909@bike24.net> Da du den Text für jedes Keyword einzeln durchgehst und auch veränderst, sind die 'letzten' Keywords ("affe klettert", "hund rennt") ja gar nicht mehr im Text enthalten. Die Schwierigkeit ist wohl nicht das Problem zu lösen, sondern eine Lösung zu finden mit akzeptabler Performance. $text in alle Möglichen Zeichenketten zu zerlegen und dann wieder korrekt zusammenzubauen wird sehr Performance schwach. Eine andere Variante währe die Keywords vorab zu sortieren. Zusätzlich beachte man das Leerzeichen im s///. my @keywords = ("affe klettert", "hund rennt", "affe", "hund"); my $text = "Ein Affe klettert, weil er ein Affe ist. Ein Hund rennt, weil er ein Hund ist."; my $link = ''; my $linkend = ''; foreach my $keyword(@keywords) { $text =~ s/ ($keyword)/$link$1$linkend/gi; } print $text; Sicherlich finden sich noch bessere Lösungen. Mal schauen, was noch kommt. Falk. Thomas Rittsche wrote: > Hallo an alle, > ich habe mal wieder ein Problem, bei dem ich überhaupt keine Idee > habe, wie man da rangehen könnte. > > Das Ziel ist es bestimmte Wörter bzw. Wortgruppen in einem Text durch > einen Link zu ersetzen (bzw. den Link darum zu bauen). Mit einzelnen > Wörtern ist das alles kein Problem. Die Schwierigkeit liegt in > Wortgruppen, die selbst als Schlüsselworte definiert sind und dabei > einzelne Schlüsselworte enthalten. > > Hier mal ein Beispiel zum besseren Verständnis: > > my @keywords = ("affe", "hund", "affe klettert", "hund rennt"); > my $text = "Ein Affe klettert, weil er ein Affe ist. Ein Hund rennt, > weil er ein Hund ist."; > my $link = ""; > foreach my $keyword(@keywords) { > $text =~ s/($keyword)/$link$1$\<\/a>/gi; > } > print $text; > > Ziel wäre es, Links um "affe", "hund", "affe klettert", "hund rennt" > zu bauen. Leider baut er mir die so nur um "affe" und "hund". > > Wer kann mich auf den Pfad der Erleuchtung führen? > > Grüße aus Radebeul und vielen Dank! > > Thomas > _______________________________________________ > Dresden-pm mailing list > Dresden-pm at pm.org > http://mail.pm.org/mailman/listinfo/dresden-pm > > From pagaltzis at gmx.de Tue Aug 12 07:16:46 2008 From: pagaltzis at gmx.de (Aristotle Pagaltzis) Date: Tue, 12 Aug 2008 16:16:46 +0200 Subject: [Dresden-pm] =?utf-8?q?Regul=C3=A4re_Ausdr=C3=BCcke_-_Suchen_und_?= =?utf-8?q?Ersetzen_von_Worten?= In-Reply-To: <48A14A6C.3040909@bike24.net> References: <584da2df0808120104i6e16b019v947c7fc94bd987fb@mail.gmail.com> <48A14A6C.3040909@bike24.net> Message-ID: <20080812141646.GA4109@klangraum.plasmasturm.org> * Falk Herrmann [2008-08-12 10:35]: > Mal schauen, was noch kommt. my @keywords = ( 'affe', 'hund', 'affe klettert', 'hund rennt' ); my $text = 'Ein Affe klettert, weil er ein Affe ist. Ein Hund rennt, weil er ein Hund ist.'; my %insertion; for my $kw ( @keywords ) { my ( $rx ) = map qr/$_/i, quotemeta $kw; while ( $text =~ /$rx/g ) { push @{ $insertion{ $-[0] } }, ''; unshift @{ $insertion{ $+[0] } }, ''; } } my $result = ''; my $last_offs = 0; for my $offset ( sort { $a <=> $b } keys %insertion ) { $result .= substr( $text, $last_offs, $offset - $last_offs ) . join( '', @{ $insertion{ $offset } } ); $last_offs = $offset; } $result .= substr( $text, $last_offs ); Ich habe leider keine Zeit, das zu erklären, weil mein Flug zur YAPC::EU gleich geht. -- *AUTOLOAD=*_;sub _{s/(.*)::(.*)/print$2,(",$\/"," ")[defined wantarray]/e;$1} &Just->another->Perl->hack; #Aristoteles Pagaltzis // From thomas.rittsche at gmail.com Tue Aug 12 07:51:16 2008 From: thomas.rittsche at gmail.com (Thomas Rittsche) Date: Tue, 12 Aug 2008 16:51:16 +0200 Subject: [Dresden-pm] =?iso-8859-1?q?Regul=E4re_Ausdr=FCcke_-_Suchen_und_E?= =?iso-8859-1?q?rsetzen_von_Worten?= In-Reply-To: <20080812141646.GA4109@klangraum.plasmasturm.org> References: <584da2df0808120104i6e16b019v947c7fc94bd987fb@mail.gmail.com> <48A14A6C.3040909@bike24.net> <20080812141646.GA4109@klangraum.plasmasturm.org> Message-ID: <584da2df0808120751s1201211fhf6fd0dc54adbe68b@mail.gmail.com> Hallo Aristoteles, hallo Falk, vielen Dank erst mal für Eure Hilfe. Ich muss wirklich erst mal schauen, ob ich das nutzen kann, ohne dass die Performance leidet. @Aristoteles: Wenn Langeweile in Kopenhagen aufkommt, würde ich mich noch über ein paar Erläuterungen freuen. Vielen Dank noch mal! Thomas 2008/8/12 Aristotle Pagaltzis : > * Falk Herrmann [2008-08-12 10:35]: >> Mal schauen, was noch kommt. > > my @keywords = ( 'affe', 'hund', 'affe klettert', 'hund rennt' ); > my $text = 'Ein Affe klettert, weil er ein Affe ist. Ein Hund rennt, weil er ein Hund ist.'; > > my %insertion; > for my $kw ( @keywords ) { > my ( $rx ) = map qr/$_/i, quotemeta $kw; > while ( $text =~ /$rx/g ) { > push @{ $insertion{ $-[0] } }, ''; > unshift @{ $insertion{ $+[0] } }, ''; > } > } > > my $result = ''; > my $last_offs = 0; > for my $offset ( sort { $a <=> $b } keys %insertion ) { > $result > .= substr( $text, $last_offs, $offset - $last_offs ) > . join( '', @{ $insertion{ $offset } } ); > > $last_offs = $offset; > } > > $result .= substr( $text, $last_offs ); > > Ich habe leider keine Zeit, das zu erklären, weil mein Flug zur > YAPC::EU gleich geht. > > -- > *AUTOLOAD=*_;sub _{s/(.*)::(.*)/print$2,(",$\/"," ")[defined wantarray]/e;$1} > &Just->another->Perl->hack; > #Aristoteles Pagaltzis // > _______________________________________________ > Dresden-pm mailing list > Dresden-pm at pm.org > http://mail.pm.org/mailman/listinfo/dresden-pm > From ss5 at renormalist.net Thu Aug 14 06:31:45 2008 From: ss5 at renormalist.net (Steffen Schwigon) Date: Thu, 14 Aug 2008 15:31:45 +0200 Subject: [Dresden-pm] =?iso-8859-1?q?Regul=E4re_Ausdr=FCcke_-_Suchen_und_E?= =?iso-8859-1?q?rsetzen_von_Worten?= In-Reply-To: <584da2df0808120104i6e16b019v947c7fc94bd987fb@mail.gmail.com> (Thomas Rittsche's message of "Tue, 12 Aug 2008 10:04:11 +0200") References: <584da2df0808120104i6e16b019v947c7fc94bd987fb@mail.gmail.com> Message-ID: <87myjfwwn2.fsf@shirts.quite-simply.de> "Thomas Rittsche" writes: > Hallo an alle, > ich habe mal wieder ein Problem, bei dem ich überhaupt keine Idee > habe, wie man da rangehen könnte. > > Das Ziel ist es bestimmte Wörter bzw. Wortgruppen in einem Text durch > einen Link zu ersetzen (bzw. den Link darum zu bauen). Mit einzelnen > Wörtern ist das alles kein Problem. Die Schwierigkeit liegt in > Wortgruppen, die selbst als Schlüsselworte definiert sind und dabei > einzelne Schlüsselworte enthalten. > > Hier mal ein Beispiel zum besseren Verständnis: > > my @keywords = ("affe", "hund", "affe klettert", "hund rennt"); > my $text = "Ein Affe klettert, weil er ein Affe ist. Ein Hund rennt, > weil er ein Hund ist."; > my $link = ""; > foreach my $keyword(@keywords) { > $text =~ s/($keyword)/$link$1$\<\/a>/gi; > } > print $text; > > Ziel wäre es, Links um "affe", "hund", "affe klettert", "hund rennt" > zu bauen. Leider baut er mir die so nur um "affe" und "hund". Langeweile hat Aristotle auf der YAPC sicher nicht. Warum bist Du eigentlich nicht hier, Ri^H^HThomas? :-) Ich hab auch grade keine Lust, seine Lösung durchzulesen, aber müsstest Du Deine Keys nicht einfach umsortieren, nach Länge? Und noch dafür sorgen, dass Links nicht zweimal ersetzt werden? Dein Code, leicht modifiziert, wäre dann: my @keywords = ("affe", "hund", "affe klettert", "hund rennt"); my $text = "Ein Affe klettert, weil er ein Affe ist. Ein Hund rennt, weil er ein Hund ist."; my $link = ""; foreach my $keyword(reverse sort {length $a <=> length $b } @keywords) { $text =~ s/(?)($keyword)/$link$1$\<\/a>/gi; } print $text,"\n"; Das Sort der Keywords ist vermutlich klar. Das (?) ist die Billigvariante eines Tests, dass vor dem Key kein ">" von einem Link steht. Allerdings nicht sehr death-proof. Wenn Du Dich elaborierter ausdrücken willst, musst Du wohl ein Gesamtstatement zusammenbauen, dass alles in einem Abwasch erledigt, z.B. zwei Seiten eines s/// konstruieren, links die Keywords, auch nach Länge sortiert in einem (...|...|...) und rechts vielleicht eine mit "/e" getriebene Ersetzung abhängig vom gematchten Keyword. Macht Aristotle vielleicht genau das? Jetzt guck ich doch mal ... Kind regards, Steffen -- Steffen Schwigon From ss5 at renormalist.net Thu Aug 14 06:54:33 2008 From: ss5 at renormalist.net (Steffen Schwigon) Date: Thu, 14 Aug 2008 15:54:33 +0200 Subject: [Dresden-pm] =?iso-8859-1?q?Regul=E4re_Ausdr=FCcke_-_Suchen_und_E?= =?iso-8859-1?q?rsetzen_von_Worten?= In-Reply-To: <87myjfwwn2.fsf@shirts.quite-simply.de> (Steffen Schwigon's message of "Thu, 14 Aug 2008 15:31:45 +0200") References: <584da2df0808120104i6e16b019v947c7fc94bd987fb@mail.gmail.com> <87myjfwwn2.fsf@shirts.quite-simply.de> Message-ID: <874p5nwvl2.fsf@shirts.quite-simply.de> Steffen Schwigon writes: > Macht Aristotle vielleicht genau das? Jetzt guck ich doch mal ... Ah, ich glaub nicht. Hier daher noch zwei Varianten von mir. Die erste macht erstmal alles in einem Rutsch, Keys nach Größe sortiert: my @keywords = ("affe", "hund", "affe klettert", "hund rennt"); my $text = "Ein Affe klettert, weil er ein Affe ist. Ein Hund rennt, weil er ein Hund ist."; my $link = ""; my $search = join '|', reverse sort {length $a <=> length $b } @keywords; $text =~ s!($search)!$1!gi; print $text,"\n"; Hierbei brauchst Du z.B. den "negative zero-width look-behind" nicht, you know, dieses komische "(?)". Und da ich annehme, dass Du für die hrefs noch ein Mapping abhängig vom Keyword haben wirst, hier noch eine Variante mit /e für die rechte Seite: my %keywords = ("Affe" => '/affe.html', "Hund" => '/hund.html', "Affe klettert" => '/kletteraffe.html', "Hund rennt" => '/rennhund.html' ); my $text = "Ein Affe klettert, weil er ein Affe ist. Ein Hund rennt, weil er ein Hund ist."; my $link = ""; my $search = join '|', reverse sort {length $a <=> length $b } keys %keywords; $text =~ s!($search)!''.$1.''!ge; print $text,"\n"; Mit /e kannst/musst Du rechts einfach den String selbst zusammenbauen, /e wie "eval bei substitute". Hier krieg ich das non-casesesitive aber nicht einfach hin, weil das gematchte Keyword sonst nicht im Hash passen muss. Da brauchst Du vermutlich noch ein CPAN-Modul für case-insensitive Hashes, z.B. http://search.cpan.org/~cjm/Tie-CPHash/lib/Tie/CPHash.pm Hab ich was vergessen, bei diesem "sort by length"-Ansatz? Kind regards, Steffen -- Steffen Schwigon Dresden Perl Mongers Deutscher Perl-Workshop From pagaltzis at gmx.de Thu Aug 14 16:32:40 2008 From: pagaltzis at gmx.de (Aristoteles Pagaltzis) Date: Fri, 15 Aug 2008 01:32:40 +0200 Subject: [Dresden-pm] =?utf-8?q?Regul=C3=A4re_Ausdr=C3=BCcke_-_Suchen_und_?= =?utf-8?q?Ersetzen_von_Worten?= In-Reply-To: <874p5nwvl2.fsf@shirts.quite-simply.de> References: <584da2df0808120104i6e16b019v947c7fc94bd987fb@mail.gmail.com> <87myjfwwn2.fsf@shirts.quite-simply.de> <874p5nwvl2.fsf@shirts.quite-simply.de> Message-ID: <20080814233240.GA8541@klangraum.plasmasturm.org> * Steffen Schwigon [2008-08-14 16:00]: > Hab ich was vergessen, bei diesem "sort by length"-Ansatz? Bei meiner Lösung darf jedes Keyword selbst ein Pattern sein. Gruß, -- Aristoteles Pagaltzis // From akunert at main-rheiner.de Fri Aug 15 01:18:51 2008 From: akunert at main-rheiner.de (Andreas Kunert-Werneburg) Date: Fri, 15 Aug 2008 10:18:51 +0200 Subject: [Dresden-pm] Return-Wert von parse_file() XML::LibXML In-Reply-To: <20080811173418.GA24952@klangraum.plasmasturm.org> References: <48A00BBA.7050305@main-rheiner.de> <20080811173418.GA24952@klangraum.plasmasturm.org> Message-ID: <48A53BEB.1000306@main-rheiner.de> Danke Aristoteles, genau das eval{...} fehlte mir. Gruß Andreas Aristoteles Pagaltzis wrote: > * Andreas Kunert-Werneburg [2008-08-11 11:55]: >> Jetzt würde ich gern VOR dem Verschieben testen, ob das >> XML-File valide ist. > > Das geht nur, indem du das XML zu parsen versuchst. Von außen > ansehen kann man es der Datei schlecht. ;-) > >> Jetzt würde ich gern VOR dem Verschieben testen, ob das >> XML-File valide ist. Ist das nicht der Fall, so soll es in >> einen anderen Ordner verschoben werden und der Parser NICHT >> gestartet werden. > > Warum ist das so wichtig? > >> ich arbeite mit XML::LibXML und frage mich, ob ich bei my >> $document = $parser->parse_file($xmlfilename); einen Returnwert >> erhalten würde, mithilfe dessen ich die entsprechende >> Verschiebe-Operation einleiten kann. > > Du kannst mit `eval { ... }` die Exception abfangen, die von > LibXML generiert wird, wenn der Parse-Versuch fehlschlägt. > >> Mal laienhaft: >> ------------------------------------------ >> $parser = new XML::LibXML; >> if($parser->parse_file($xmlfile) == TRUE){ >> verschiebe nach A und rufe Parser auf; >> } else { >> verschiebe nach B und melde Fehler per Mail; >> } >> ------------------------------------------- >> >> Mir gehts eigentlich nur darum, zu prüfen, ob die Datei valides >> XML enthält. Den Rest bekomme ich dann schon hin. > > my $doc; > eval { $doc = XML::LibXML->new->parse_file( $xmlfile ) }; > > if ( $doc ) { > # verschiebe nach A > # Parser-Aufruf nicht mehr nötig, einfach $doc nehmen > } > else { > # verschiebe nach B und melde Fehler per Mail > } > > Gruß, From create-soft at tiscali.de Fri Aug 15 22:10:21 2008 From: create-soft at tiscali.de (Torsten Knorr) Date: Sat, 16 Aug 2008 05:10:21 UT Subject: [Dresden-pm] Return-Wert von parse_file() XML::LibXML Message-ID: <484E81F20121843C@mail-relay-6.tiscali.sys> (added by postmaster@smtp10.unit.tiscali.de) Andreas Kunert-Werneburg Mon, 11 Aug 2008 11:51:54 +0200 >ich habe ein kleines Problem mit einem Skript, welches XML-Dateien parsen soll. SEE ALSO XML::Checker Aristoteles Pagaltzis Mon, 11 Aug 2008 19:34:18 +0200 >if ( $doc ) { if($doc && $doc->is_valid()) T. From pagaltzis at gmx.de Fri Aug 15 23:43:04 2008 From: pagaltzis at gmx.de (Aristoteles Pagaltzis) Date: Sat, 16 Aug 2008 08:43:04 +0200 Subject: [Dresden-pm] =?utf-8?q?Regul=C3=A4re_Ausdr=C3=BCcke_-_Suchen_und_?= =?utf-8?q?Ersetzen_von_Worten?= In-Reply-To: <584da2df0808120751s1201211fhf6fd0dc54adbe68b@mail.gmail.com> References: <584da2df0808120104i6e16b019v947c7fc94bd987fb@mail.gmail.com> <48A14A6C.3040909@bike24.net> <20080812141646.GA4109@klangraum.plasmasturm.org> <584da2df0808120751s1201211fhf6fd0dc54adbe68b@mail.gmail.com> Message-ID: <20080816064304.GD9326@klangraum.plasmasturm.org> * Thomas Rittsche [2008-08-12 16:55]: > Ich muss wirklich erst mal schauen, ob ich das nutzen kann, > ohne dass die Performance leidet. Das ist generell die falsche Frage. Wenn dein grundsätzlicher Ansatz schnell genug ist, wird keine der Lösungen redenswert langsam sein. > Wenn Langeweile in Kopenhagen aufkommt, würde ich mich noch > über ein paar Erläuterungen freuen. Da ist es mir kein bisschen langweilig geworden. Aber ich bin jetzt wieder zurück? also: > my %insertion; > for my $kw ( @keywords ) { > my ( $rx ) = map qr/$_/i, quotemeta $kw; > while ( $text =~ /$rx/g ) { Bis hierhin sollte das alles ziemlich klar sein; das ist alles 08/15-Perl. Eine Schleife geht über die Schlüsselwörter, die jeweils mit `qr//` kompiliert werden, und dann geht eine innere Schleife über die einzelnen Treffer des Schlüsselwortes im Text. > push @{ $insertion{ $-[0] } }, ''; > unshift @{ $insertion{ $+[0] } }, ''; > } > } Hier kommt der interessante Teil. Der Kern sind das `$-[0]` und das `$+[0]`. Das sind Zugriffe auf zwei komisch benannte Arrays mit spezieller Funktion. Auszugweise aus `perldoc perlvar`: @LAST_MATCH_END @+ This array holds the offsets of the ends of the last successful submatches in the currently active dynamic scope. $+[0] is the offset into the string of the end of the entire match. This is the same value as what the "pos" function returns when called on the variable that was matched against. @LAST_MATCH_START @- $-[0] is the offset of the start of the last successful match. Dh. wenn der Regex einen Treffer findet, steht im nullten Element von `@-` der Index in den String für den Anfang des Gesamttreffers und in `@+` der Index des ersten Zeichens nach dem Gesamttreffer. Und vor genau diesen Stellen willst du öffnende und schliessende ``-Tags einfügen! Also notiert der Code in einem Hash diese Positionen. Die Position dient als Schlüssel, der Inhalt ist ein Array von Strings, wo die Tags draufgeschoben werden. Da das öffnende Tag am Schluss möglichst weit nach rechts kommen soll, kommt es mit `push` aufs Array. Das schliessende Tag soll möglichst weit nach links, also kommt es mit `unshift` rein. Nach dem Ende der äußeren Schleife steht also in `%insertion`, an welcher Position im String jeweils welche Liste von Tags eingefügt werden muß. Und das tut der Code dann auch: > my $result = ''; > my $last_offs = 0; > for my $offset ( sort { $a <=> $b } keys %insertion ) { Die Schlüssel von `%insertion` sind ja wie gesagt Indizes von Einfügepunkten. Diese Indizes werden hier numerisch sortiert, damit sie nacheinander abgearbeitet werden können. > $result > .= substr( $text, $last_offs, $offset - $last_offs ) An jedem Einfügepunkt entnimmt der Code dann den Textabschnitt zwischen dem vorigen und dem aktuellen Punkt, und hängt ihn ans Ergebnis, ? > . join( '', @{ $insertion{ $offset } } ); ? gefolgt von all den Tags, die zu diesem Einfügepunkt gehören. > $last_offs = $offset; > } Nach jedem Durchgang muß natürlich noch festgehalten werden, wo der jeweils vorige Einfügepunkt war. > $result .= substr( $text, $last_offs ); Und zum Schluß wird der Abschnitt hinter dem letzten Einfügepunkt auch noch mitgenommen. Ganz einfach. Gruß, -- Aristoteles Pagaltzis // From create-soft at tiscali.de Sun Aug 17 00:05:03 2008 From: create-soft at tiscali.de (Torsten Knorr) Date: Sun, 17 Aug 2008 07:05:03 UT Subject: [Dresden-pm] Reguläre Ausdrücke - Suchen und Ersetzen von Worten Message-ID: <488B3B750051C915@mail-relay-7.tiscali.sys> (added by postmaster@smtp11.unit.tiscali.de) #!/usr/bin/perl -w =head Thomas Rittsche Tue, 12 Aug 2008 10:04:11 +0200 >Hallo an alle, >ich habe mal wieder ein Problem, bei dem ich =FCberhaupt keine Idee >habe, wie man da rangehen k=F6nnte. > >Das Ziel ist es bestimmte W=F6rter bzw. Wortgruppen in einem Text durch >einen Link zu ersetzen (bzw. den Link darum zu bauen). Mit einzelnen >W=F6rtern ist das alles kein Problem. Die Schwierigkeit liegt in >Wortgruppen, die selbst als Schl=FCsselworte definiert sind und dabei >einzelne Schl=FCsselworte enthalten. =cut #------------------------------------------------- use strict; #------------------------------------------------- my $text = ' Ein Affe klettert, weil er ein Affe ist. Ein Hund rennt, weil er ein Hund ist. Der Menschenaffe stirbt aus. Der Menschenaffe klettert nicht so gut. Auf die Bäume Ihr Affen. Heute ist eine Affenhitze. '; my @keywords = ('menschenaffe', 'affe', 'hund', 'affe klettert', 'hund rennt', 'affe ist schlau'); my $str_kw = join('|', map { quotemeta($_) } sort { length($b) <=> length($a) } @keywords ); $text =~ s{\b($str_kw)\b}{$1}ig; print($text); #------------------------------------------------- # T. From create-soft at tiscali.de Sun Aug 17 01:48:41 2008 From: create-soft at tiscali.de (Torsten Knorr) Date: Sun, 17 Aug 2008 08:48:41 UT Subject: [Dresden-pm] Reguläre Ausdrücke - Suchen und Ersetzen von Worten Message-ID: <484E81F201255CC0@mail-relay-6.tiscali.sys> (added by postmaster@smtp10.unit.tiscali.de) Aristotle Pagaltzis Tue, 12 Aug 2008 16:16:46 +0200 > my %insertion; > for my $kw ( @keywords ) { > my ( $rx ) =3D map qr/$_/i, quotemeta $kw; my $rx = qr/\Q$kw\E/i; > while ( $text =3D~ /$rx/g ) { Wenn wir den Text mit jedem Schlüsselwort einzeln durchsuchen haben wir zwei Treffer ("Affe" und "Affe klettert") an einer Stelle. Also 3 Positionen gespeichert. Das bringt die Sache durcheinander. Wir brauchen also den längsten Treffer und das liefert uns Perls-NFA nicht. Mann kann zwar Perl zwingen weiterzusuchen (?!) aber das wird fummlig. Falls wir auf eine andere Sprache, die DFA unterstütz, ausweichen wird es einfacher. Steffens Ansatz mit dem längsten Schlüsselwort die Suche zu beginnen ist für mich der bessere. Mann könnter die Suche selbst noch etwas optimieren also nicht /\baffe|affe klettert\b/ sondern /\baffe( klettert)?\b/. Ob sich das lohnt hängt von der länge des Textes und der Anzahl von Schlüsselwörtern ab. > push @{ $insertion{ $-[0] } }, ''; $insertion{$-[0]} = ''; > unshift @{ $insertion{ $+[0] } }, ''; $insertion{$+[0]} = ''; > } > } T. From pagaltzis at gmx.de Sun Aug 17 08:11:08 2008 From: pagaltzis at gmx.de (Aristoteles Pagaltzis) Date: Sun, 17 Aug 2008 17:11:08 +0200 Subject: [Dresden-pm] =?utf-8?q?Regul=C3=A4re_Ausdr=C3=BCcke_-_Suchen_und_?= =?utf-8?q?Ersetzen_von_Worten?= In-Reply-To: <488B3B750051C915@mail-relay-7.tiscali.sys> References: <488B3B750051C915@mail-relay-7.tiscali.sys> Message-ID: <20080817151108.GI9326@klangraum.plasmasturm.org> * Torsten Knorr [2008-08-17 09:10]: > use strict; > my $text = ' > Ein Affe klettert, weil er ein Affe ist. Ein Hund rennt, weil er ein Hund > ist. Der Menschenaffe stirbt aus. > Der Menschenaffe klettert nicht so gut. > Auf die Bäume Ihr Affen. > Heute ist eine Affenhitze. > '; > my @keywords = ('menschenaffe', 'affe', 'hund', 'affe klettert', 'hund rennt', 'affe ist schlau'); > my $str_kw = > join('|', map { quotemeta($_) } > sort { length($b) <=> length($a) } @keywords > ); > $text =~ s{\b($str_kw)\b}{$1}ig; > print($text); Das erfüllt die Anforderungen nicht. In »Affe klettert« sollen sowohl »Affe klettert« als auch das darin enthaltene »Affe« überlappend als Schlüsselwortvorkommen markiert werden, dein Versuch findet aber nur das »Affe klettert«. Das kann man mit einem einzigen `s///`-Aufruf nicht lösen. Gruß, -- Aristoteles Pagaltzis // From pagaltzis at gmx.de Sun Aug 17 08:24:08 2008 From: pagaltzis at gmx.de (Aristotle Pagaltzis) Date: Sun, 17 Aug 2008 17:24:08 +0200 Subject: [Dresden-pm] Regul?re Ausdr?cke - Suchen und Ersetzen von Worten In-Reply-To: <484E81F201255CC0@mail-relay-6.tiscali.sys> References: <20080812141646.GA4109@klangraum.plasmasturm.org> <484E81F201255CC0@mail-relay-6.tiscali.sys> Message-ID: <20080817152408.GJ9326@klangraum.plasmasturm.org> * Torsten Knorr [2008-08-17 10:50]: > Wenn wir den Text mit jedem Schlüsselwort einzeln durchsuchen > haben wir zwei Treffer ("Affe" und "Affe klettert") an einer > Stelle. Also 3 Positionen gespeichert. Das bringt die Sache > durcheinander. Nein, es ist genau das, was gewünscht ist. Hast du Thomas Mail aufmerksam genug gelesen? Hier nochmal der entscheidende Teil: * Thomas Rittsche [2008-08-12 10:05]: > Ziel wäre es, Links um "affe", "hund", "affe klettert", "hund > rennt" zu bauen. Leider baut er mir die so nur um "affe" und > "hund". Er will Links um alle möglichen Schlüsselwörter, auch solche, die Teil eines anderen Schlüsselworts sind. > Mann könnter Frau auch? :-) > die Suche selbst noch etwas optimieren also nicht /\baffe|affe > klettert\b/ sondern /\baffe( klettert)?\b/. Fasst du auch »Affe« und »klaffen« derart zusammen? Was machst du aus »behend«, »gehen« und »Ehe«? Gruß, -- Aristoteles Pagaltzis // From pagaltzis at gmx.de Sun Aug 17 08:43:14 2008 From: pagaltzis at gmx.de (Aristoteles Pagaltzis) Date: Sun, 17 Aug 2008 17:43:14 +0200 Subject: [Dresden-pm] =?utf-8?q?Regul=C3=A4re_Ausdr=C3=BCcke_-_Suchen_und_?= =?utf-8?q?Ersetzen_von_Worten?= In-Reply-To: <484E81F201255CC0@mail-relay-6.tiscali.sys> References: <20080812141646.GA4109@klangraum.plasmasturm.org> <484E81F201255CC0@mail-relay-6.tiscali.sys> Message-ID: <20080817154314.GK9326@klangraum.plasmasturm.org> * Torsten Knorr [2008-08-17 10:50]: > Aristotle Pagaltzis Tue, 12 Aug 2008 16:16:46 +0200 >> my %insertion; >> for my $kw ( @keywords ) { >> my ( $rx ) = map qr/$_/i, quotemeta $kw; > > my $rx = qr/\Q$kw\E/i; Ach ja, ich vergaß (sorry wegen der vielen Mails auf einmal): Danke für den Hinweis, aber das war mir bewußt. Ich mag `\Q` und `\E` aus stilistischen Gründen nicht. Sie müssen direkt an den Variablennamen geklatscht werden und bilden auch optisch keine Klammer. Mir fällt aber grad eine viel bessere Lösung ein: my $rx = qr/${\quotemeta $kw}/i; -- *AUTOLOAD=*_;sub _{s/(.*)::(.*)/print$2,(",$\/"," ")[defined wantarray]/e;$1} &Just->another->Perl->hack; #Aristoteles Pagaltzis // From create-soft at tiscali.de Tue Aug 19 13:10:59 2008 From: create-soft at tiscali.de (Torsten Knorr) Date: Tue, 19 Aug 2008 20:10:59 UT Subject: [Dresden-pm] Reguläre Ausdrücke - Suchen und Ersetzen von Worten Message-ID: <488B3B75005C92EA@mail-relay-7.tiscali.sys> (added by postmaster@smtp11.unit.tiscali.de) #!/usr/bin/perl -w =head Aristotle Pagaltzis, 17 Aug 2008 17:11:08 +0200 >Das kann man mit >einem einzigen `s///`-Aufruf nicht l=F6sen. =cut #------------------------------------------------- use strict; use re 'eval'; my $text = "Ein Affe klettert, weil er ein Affe ist."; my @m; $text =~ m{(Affe( klettert)?)(?{push(@m, $1)})(?!)}; print("$_\n") for(@m); #------------------------------------------------- __END__ #------------------------------------------------- > Nein, es ist genau das, was gew=FCnscht ist. Hast du Thomas Mail > aufmerksam genug gelesen? Hier nochmal der entscheidende Teil: > Thomas Rittsche [2008-08-12 10:05]: > Ziel w=E4re es, Links um "affe", "hund", "affe klettert", "hund > rennt" zu bauen. Leider baut er mir die so nur um "affe" und > "hund". Sollen aus "Affe klettert" 2 Links werden? T. From pagaltzis at gmx.de Tue Aug 19 14:37:43 2008 From: pagaltzis at gmx.de (Aristoteles Pagaltzis) Date: Tue, 19 Aug 2008 23:37:43 +0200 Subject: [Dresden-pm] =?utf-8?q?Regul=C3=A4re_Ausdr=C3=BCcke_-_Suchen_und_?= =?utf-8?q?Ersetzen_von_Worten?= In-Reply-To: <488B3B75005C92EA@mail-relay-7.tiscali.sys> References: <488B3B75005C92EA@mail-relay-7.tiscali.sys> Message-ID: <20080819213743.GV9326@klangraum.plasmasturm.org> * Torsten Knorr [2008-08-19 22:15]: > #!/usr/bin/perl -w > =head > Aristotle Pagaltzis, 17 Aug 2008 17:11:08 +0200 >> Das kann man mit einem einzigen `s///`-Aufruf nicht l=F6sen. > =cut > #------------------------------------------------- > use strict; > use re 'eval'; > my $text = "Ein Affe klettert, weil er ein Affe ist."; > my @m; > $text =~ m{(Affe( klettert)?)(?{push(@m, $1)})(?!)}; > print("$_\n") for(@m); > #------------------------------------------------- > __END__ > #------------------------------------------------- Ich sehe da nirgendwo ein `s///`. Das ist außerdem keine Lösung, denn die Ausgabe enthält keinerlei Kontext. Du kannst jetzt gerne noch ein paar kommentarlose Code- Schnippsel posten, bis du das ganze mit `(?!)` zum Funktionieren gebracht hast, gerne auch mit `m///` alleine, statt mit `s///`. Danach beurteilen wir die Verständlichkeit deines resultierenden Codes verglichen mit meinem. OK? >> Ziel w=E4re es, Links um "affe", "hund", "affe klettert", "hund >> rennt" zu bauen. Leider baut er mir die so nur um "affe" und >> "hund". > > Sollen aus "Affe klettert" 2 Links werden? Da steht, dass er Links um »Affe« und »Affe klettert« haben will. Also will er wohl um »Affe klettert« herum einen Link haben und um »Affe« auch. Jedenfalls nach dem, was da steht. Vielleicht ist ja was anderes gemeint. Gruß, -- Aristoteles Pagaltzis // From create-soft at tiscali.de Fri Aug 22 22:30:31 2008 From: create-soft at tiscali.de (Torsten Knorr) Date: Sat, 23 Aug 2008 05:30:31 UT Subject: [Dresden-pm] Reguläre Ausdrücke - Suchen und Ersetzen von Worten Message-ID: <48AE7D0D00032B2F@mail-relay-6.tiscali.sys> (added by postmaster@smtp10.unit.tiscali.de) Aristoteles Pagaltzis Sun, 17 Aug 2008 17:24:08 +0200 > Torsten Knorr: die Suche selbst noch etwas optimieren also nicht /\baffe|affe > klettert\b/ sondern /\baffe( klettert)?\b/. >Fasst du auch Affe und klaffen derart zusammen? Was machst du >aus behend, gehen und Ehe? Das "\b" steht für Wortgrenzen. Wir finden also nur Affe und Ehe. "Ehe" hat mit "gehen" oder "behend" nichts zu tun. Warum sollte ein Wort wie "gehen" dann auf ein Dokument wie "Ehe.html" verweisen? Aristoteles Pagaltzis Tue, 19 Aug 2008 23:37:43 +0200 >Das ist außerdem keine Lösung, denn die Ausgabe enthält keinerlei >Kontext. Das sollte auch gar keine Lösung sein. Zum einen ist das Ziel nicht eindeutig formuliert. Zum anderen habe ich bereits geschrieben das der Ansatz fummlig wird. Es soll lediglich deine Aussage: Aristotle Pagaltzis, 17 Aug 2008 17:11:08 +0200 > Das kann man mit einem einzigen `s///`-Aufruf nicht l=3DF6sen. wiederlegen und zeigen wie mit Perls NFA alle nur möglichen Treffer eingesammelt werden ohne den Suchstring mit jeder Alternative von vorne bis hintern zu Durchackern. Aristoteles Pagaltzis Tue, 19 Aug 2008 23:37:43 +0200 >Danach beurteilen wir die Verst=E4ndlichkeit deines resultierenden >Codes verglichen mit meinem. OK? Für mich ist Perl keine Sportart sondern ein Werkzeug. Zum korrigieren, diskutieren, weiterentwickeln, Ideen austauschen, oder einfach nur zum draus lernen sende ich gerne mal etwas Code. Zum vergleichen welcher besser ist, nein Danke! Entschuldige Bitte, daß ich dir helfen wollte deinen Code zu verbessern. >Jedenfalls nach dem, was da steht. Vielleicht ist >ja was anderes gemeint. Gemeint war sicher nicht ungültiges HTML, wie ihn dein Code produziert. T. From create-soft at tiscali.de Sat Aug 23 05:15:06 2008 From: create-soft at tiscali.de (Torsten Knorr) Date: Sat, 23 Aug 2008 12:15:06 UT Subject: [Dresden-pm] Reguläre Ausdrücke - Suchen und Ersetzen von Worten Message-ID: <488B3B75006B8220@mail-relay-7.tiscali.sys> (added by postmaster@smtp11.unit.tiscali.de) =head Thomas Rittsche Tue, 12 Aug 2008 10:04:11 +0200 >Hallo an alle, >ich habe mal wieder ein Problem, bei dem ich Überhaupt keine Idee >habe, wie man da rangehen könnte. =cut use strict; use re 'eval'; # Ein Regexobjekt erstellen mache das gerne vorweg und nicht erst in einer Schleife my @kw = ('affe', 'hund', 'affe klettert', 'hund rennt'); my $str = join('|', map { quotemeta($_) } @kw); # wenn klaffen oder Menschenaffe nicht gefunden werden soll dann "\b" einfügen # my $rx = qr/\b($str)\b/i; # wenn wirklich alles gefunden werden soll was die Schlüsselwörter enthält my $rx = qr/($str)/i; my $text = ' Ein Affe klettert, weil er ein Affe ist. Ein Hund rennt, weil er ein Hund ist. Der Menschenaffe stirbt aus. Der Menschenaffe klettert nicht so gut. Auf die Bäume Ihr Affen. Heute ist eine Affenhitze. Die Meinungen klaffen auseinander. '; my (@m, $new); my $pos = 0; #------------------------------------------------- =head Version: Aristoteles leicht optimiert produziert aber ungültiges HTML $text =~ m{$rx(?{ push(@m, [$-[0], ""]); push(@m, [$+[0], '']); })(?!)}xi; for(sort { $a->[0] <=> $b->[0] } @m) { $new .= substr($text, $pos, $_->[0] - $pos) . $_->[1]; $pos = $_->[0]; } $new .= substr($text, $pos); =cut #------------------------------------------------- # Version: Torsten wohlgeformtes HTML # Alle Treffer einsammeln und in anonyme Arrays speichern # 1. Element Treffer Anfang # 2. Element Treffer Ende # 3. Element Trefferinhalt # anonyme Arrays in @m speichern # (?{Code}) Code wird ausgeführt $text =~ m{$rx(?{push(@m, [$-[0], $+[0], $1]);})(?!)}; # indirekte Sortierung der anonymen Arrays nach Treffer Anfang # mit der niedrigsten Position beginnen for(sort { $a->[0] <=> $b->[0] } @m) { #ist neue Position im String größer gleich letzter Position if($_->[0] >= $pos) { # Erst den String bis zum Trefferanfang hinzufügen dann # einen Ankertag mit Start- und Endtag hinzufügen. $new .= substr($text, $pos, $_->[0] - $pos) . "[2].html\">$_->[2]"; } else { # Erst Starttag hinzufügen dann # bei sich Überschneidenten Teffern nur den Rest des Textes hinzufügen. # Abschließend den Endtag nicht vergessen. $new .= "[2].html\">" . substr($text, $pos, $_->[1] - $pos) . ''; } # Position auf Ende des letzten Treffers setzten. $pos = $_->[1]; } # Den Rest hinter den letzten Treffer hinzufügen. $new .= substr($text, $pos); # Testen open(H, ">test.html") or die("error: $!\n"); print(H $new); close(H); print($new); # Zum Schluß: # Bugs suchen und bei Autor beschweren :-) #------------------------------------------------- # T. From pagaltzis at gmx.de Sun Aug 24 21:47:31 2008 From: pagaltzis at gmx.de (Aristoteles Pagaltzis) Date: Mon, 25 Aug 2008 06:47:31 +0200 Subject: [Dresden-pm] =?utf-8?b?UmVndWzvv71yZSBBdXNkcu+/vWNrZSAtIFN1Y2hl?= =?utf-8?q?n_und_Ersetzen_von_Worten?= In-Reply-To: <48AE7D0D00032B2F@mail-relay-6.tiscali.sys> References: <48AE7D0D00032B2F@mail-relay-6.tiscali.sys> Message-ID: <20080825044731.GI32015@klangraum.plasmasturm.org> Hi Torsten, darf ich dich vorab bitten, mal einen Mailclient zu verwenden der *nicht* a) von Threading-Headern noch nie was gehört hat b) alle Angaben zu Charsets komplett ignoriert und c) durch Ignoranz von Quoted-Printable glänzt? Ausserdem täten ein paar Leerzeilen not, und gerade angesichts ihrer Abwesenheit ist deine Verwendung von POD in Mails ist zwar niedlich, aber nicht gerade leserlich. Deine Mails zu lesen ist, mit Verlaub, eine Qual. Ich wollte eigentlich gar nichts dazu sagen, weil das nie etwas bringt und die Leute nur sauer und störrisch macht, wenn man ihre Mailsoftware und -gewohnheiten kritisiert, aber da hier niemand anders auf deine Mails antwortet, ist es denkbar, daß die einfach abgewunken haben. (Eine Antwort auf diesen Hinweis ist überflüssig; ich werde über diese Tatsachenfeststellung nicht diskutieren. Du darfst den Hinweis gern gepflegt ignorieren.) * Torsten Knorr [2008-08-23 07:35]: > Aristoteles Pagaltzis Sun, 17 Aug 2008 17:24:08 +0200 > >> Torsten Knorr: die Suche selbst noch etwas optimieren also >> nicht /\baffe|affe klettert\b/ sondern /\baffe( klettert)?\b/. > >> Fasst du auch Affe und klaffen derart zusammen? Was machst du >> aus behend, gehen und Ehe? > > Das "\b" steht für Wortgrenzen. Wir finden also nur Affe und > Ehe. "Ehe" hat mit "gehen" oder "behend" nichts zu tun. Warum > sollte ein Wort wie "gehen" dann auf ein Dokument wie > "Ehe.html" verweisen? Aha. Naja, bis auf die Tatsache, dass das genau gar nichts an meiner eigentlichen Frage ändert, nur an der Form. Denn es stellt sich immer noch die Frage, was du tust, wenn du sowohl »Affe« als auch »der Affe hat« als Schlagwörter gegeben hast. Und was du tust, wenn zusätzlich dazu auch noch »ein Affe ist« gegeben hast. Wie funktioniert da das Zusammenfassen? > Aristoteles Pagaltzis Tue, 19 Aug 2008 23:37:43 +0200 > >> Das ist außerdem keine Lösung, denn die Ausgabe enthält >> keinerlei Kontext. > > Das sollte auch gar keine Lösung sein. Zum einen ist das Ziel > nicht eindeutig formuliert. Zum anderen habe ich bereits > geschrieben das der Ansatz fummlig wird. Es soll lediglich > deine Aussage: > > Aristotle Pagaltzis, 17 Aug 2008 17:11:08 +0200 >> Das kann man mit einem einzigen `s///`-Aufruf nicht l=3DF6sen. > > wiederlegen und zeigen wie mit Perls NFA alle nur möglichen > Treffer eingesammelt werden ohne den Suchstring mit jeder > Alternative von vorne bis hintern zu Durchackern. Du hast gar nichts widerlegt. Daß man `(?!)` verwenden kann ist mir schon lange bekannt, aber die Ersetzung in einem `s///` greift nur bei einem erfolgreichen Treffer, was bedeutet, daß die gefundenen aber mit `(?!)` verworfenen Altenativen in einem `s///` nicht ohne hohe Umstände verwendet werden können. > Aristoteles Pagaltzis Tue, 19 Aug 2008 23:37:43 +0200 > >> Danach beurteilen wir die Verst=E4ndlichkeit deines >> resultierenden Codes verglichen mit meinem. OK? > > Für mich ist Perl keine Sportart sondern ein Werkzeug. Zum > korrigieren, diskutieren, weiterentwickeln, Ideen austauschen, > oder einfach nur zum draus lernen sende ich gerne mal etwas > Code. Zum vergleichen welcher besser ist, nein Danke! > Entschuldige Bitte, daß ich dir helfen wollte deinen Code zu > verbessern. Du vergleichst nie die Lesbarkeit zweier verschiedener Code- strecken, die dasselbe Problem lösen? Lesbarkeit ist das zweitoberste Gut beim Programmieren. (Das oberste ist Korrektheit.) Performance in nicht Performance- kritischen Abschnitte des Codes ist *überhaupt kein* Gut. Und wie Brian Kernighan mal sagte: Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it. Entschuldige daher bitte, daß ich nicht unbedingt deiner Meinung darüber bin, ob deine Vorschläge Verbesserungen darstellen. >> Jedenfalls nach dem, was da steht. Vielleicht ist ja was >> anderes gemeint. > > Gemeint war sicher nicht ungültiges HTML, wie ihn dein Code > produziert. Das ist in der Tat richtig, aber du hast zuerst die Aufgabe umdefiniert, dann hast du davon geschrieben, wie man das Matching durch Verwendung von `(?!)` angeblich besser lösen kann, und erst danach hast du vom ungültigen HTML geredet. Gruß, -- Aristoteles Pagaltzis // From pagaltzis at gmx.de Sun Aug 24 22:18:23 2008 From: pagaltzis at gmx.de (Aristoteles Pagaltzis) Date: Mon, 25 Aug 2008 07:18:23 +0200 Subject: [Dresden-pm] =?utf-8?b?UmVndWzvv71yZSBBdXNkcu+/vWNrZSAtIFN1Y2hl?= =?utf-8?q?n_und_Ersetzen_von_Worten?= In-Reply-To: <488B3B75006B8220@mail-relay-7.tiscali.sys> References: <488B3B75006B8220@mail-relay-7.tiscali.sys> Message-ID: <20080825051823.GJ32015@klangraum.plasmasturm.org> * Torsten Knorr [2008-08-23 14:20]: > Version: Aristoteles leicht optimiert produziert aber ungültiges HTML > $text =~ m{$rx(?{ > push(@m, [$-[0], ""]); > push(@m, [$+[0], '']); > })(?!)}xi; > for(sort { $a->[0] <=> $b->[0] } @m) > { > $new .= substr($text, $pos, $_->[0] - $pos) . $_->[1]; > $pos = $_->[0]; > } > $new .= substr($text, $pos); Und das findest du ehrlich verständlicher und eingängiger als den Code, den ich geschrieben habe? Außerdem wage ich die Optimierung stark anzuzweifeln: $ ( echo; perl -Mre=debug -le'/\bfoo\b/'; echo; \ > perl -Mre=debug -le'/\b(?:foo|bar)\b/' )2>&1|grep -v ^Freeing Compiling REx `\bfoo\b' size 5 Got 44 bytes for offset annotations. first at 1 1: BOUND(2) 2: EXACT (4) 4: BOUND(5) 5: END(0) anchored "foo" at 0 (checking anchored) stclass "BOUND" minlen 3 Offsets: [5] 1[2] 3[3] 0[0] 6[2] 8[0] Compiling REx `\b(?:foo|bar)\b' size 10 Got 84 bytes for offset annotations. first at 1 1: BOUND(2) 2: BRANCH(5) 3: EXACT (9) 5: BRANCH(8) 6: EXACT (9) 8: TAIL(9) 9: BOUND(10) 10: END(0) stclass "BOUND" minlen 3 Offsets: [10] 1[2] 5[1] 6[3] 0[0] 9[1] 10[3] 0[0] 12[0] 14[2] 16[0] Siehst du dieses »anchored "foo"«? Das bedeutet, daß die Regex-Engine mit dem einfachen Regex erst gar nicht anspringt, wenn eine Boyer-Moore-Suche diesen String darin nicht finden kann. Beim Suchstring »foo« können dabei dann meistens pro Schleifendurchgang zwei Zweichen überschlagen werden. Die Variante, die versucht, beide Strings auf einmal zu finden, ist nicht optimierbar und erzwingt die Verwendung der Regex- Engine, die den String Zeichen für Zeichen abgrast. Als ob das nicht genug wäre, erzwingt das Pattern auch noch ein Backtracking wegen des `|`. Unterm Strich wird also beim Versuch, das zweite Pattern zu machten, jedes einzelne Zeichen (mindestens!) zweimal angefasst. (Mindestens, weil ein teilweiser aber fehlgeschlagener Match mehrere folgende Zeichen auch noch anfasst.) MaW, wenn du `/\b(?:foo|bar)\b/` schreibst müssen dreimal so viele Zeichen angefasst werden wie wenn du `/\bfoo\b/ or /\bbar\b/` schreibst. Bei Schlagwörtern, die länger sind als nur drei Zeichen, wird das ganze nur noch unverhältnismässiger. Mal davon ganz abgesehen leidet die Lesbarkeit des Codes massiv unter dem Versuch, `(?!)` einzusetzen. Du hast den Code also unleserlich und langsam gemacht. Es sieht aber sehr viel cleverer aus! Die Vorurteile gegen Perl verwundern mich nicht, wenn ich so etwas sehe. Gruß, -- Aristoteles Pagaltzis // From ss5 at renormalist.net Sun Aug 31 02:06:43 2008 From: ss5 at renormalist.net (Steffen Schwigon) Date: Sun, 31 Aug 2008 11:06:43 +0200 Subject: [Dresden-pm] =?big5?b?UmVndWyhWnJlIEF1c2RyoVpja2UgLSBTdWNoZW4g?= =?big5?b?dW5kIEVyc2V0emVuIHZvbiBXb3J0ZW4=?= In-Reply-To: <20080825051823.GJ32015@klangraum.plasmasturm.org> (Aristoteles Pagaltzis's message of "Mon, 25 Aug 2008 07:18:23 +0200") References: <488B3B75006B8220@mail-relay-7.tiscali.sys> <20080825051823.GJ32015@klangraum.plasmasturm.org> Message-ID: <878wud1rks.fsf@shirts.quite-simply.de> > Du hast den Code also unleserlich und langsam gemacht. Es sieht aber > sehr viel cleverer aus! Die Vorurteile gegen Perl verwundern mich > nicht, wenn ich so etwas sehe. Ein Vorteil von Perl ist aber auch TMTOWTDI und die Kultur der Leute, die sich gegenseitig gehoben und nett unterhalten und gegenseitig ihre verschiedenen Wege respektieren, weil alle von allen immer was lernen. Korrekter Code, effizienter Code, unverstandene Aufgabenstellungen, überall Lektionen für alle drin, isn't it? Ich find das also alles nicht so schlimm und die verschiedenen Wege alle interessant und amüsant. Steffen -- Steffen Schwigon From ss5 at renormalist.net Sun Aug 31 02:26:46 2008 From: ss5 at renormalist.net (Steffen Schwigon) Date: Sun, 31 Aug 2008 11:26:46 +0200 Subject: [Dresden-pm] Dresden Perl Mongers Treffen September 2008 Message-ID: "Jugend raus aus Deutschland!" -- Lastwagenkrieg Hi! Am kommenden Donnerstag trifft sich wieder der Chaos Perl Stammtisch. Donnerstag, den 04. September 2008 20.30 Uhr Straßencafé (Straße E) Werner-Hartmann-Straße 4, 01099 Dresden http://www.strassencafe.de/ Themen: * Devel::NYTProf - new school profiler * bissel YAPC::Europe-Nachlese * Traditionelle Folklore, misc & etc. Anfahrt, Termine, Themen immer hier: * http://dresden-pm.org/cgi-bin/twiki/view/PM/TermineTreffen Wir würden uns freuen, wenn der eine oder andere neue Gastronomie- und Perlkonsument mit Faible für Gemütlichkeit zu uns stößt. GreetinX Steffen -- Steffen Schwigon Dresden Perl Mongers From mailinglisten at renee-baecker.de Sun Aug 31 02:40:28 2008 From: mailinglisten at renee-baecker.de (ReneeB) Date: Sun, 31 Aug 2008 11:40:28 +0200 Subject: [Dresden-pm] Dresden Perl Mongers Treffen September 2008 In-Reply-To: References: Message-ID: <48BA670C.30604@renee-baecker.de> Steffen Schwigon wrote: > Themen: > > * Devel::NYTProf - new school profiler Hältst Du den Vortrag? Hättest Du dann nicht Lust einen "kleinen" Artikel für $foo daraus zu machen? > > GreetinX > Steffen > Gruß, Renée From ss5 at renormalist.net Sun Aug 31 03:31:56 2008 From: ss5 at renormalist.net (Steffen Schwigon) Date: Sun, 31 Aug 2008 12:31:56 +0200 Subject: [Dresden-pm] Dresden Perl Mongers Treffen September 2008 In-Reply-To: <48BA670C.30604@renee-baecker.de> (ReneeB's message of "Sun, 31 Aug 2008 11:40:28 +0200") References: <48BA670C.30604@renee-baecker.de> Message-ID: <873aklfpb7.fsf@shirts.quite-simply.de> ReneeB writes: > Steffen Schwigon wrote: >> Themen: >> >> * Devel::NYTProf - new school profiler > > Hältst Du den Vortrag? Hättest Du dann nicht Lust einen "kleinen" > Artikel für $foo daraus zu machen? Wir machen momentan nicht wirklich Vorträge. Wir gucken uns einfach die Dinge direkt an und probieren bissel damit rum. Auch, weil ich momentan die Mühe der Vorbereitung vermeide. Insofern hab ich auch nichts für $foo parat, sorry. Steffen -- Steffen Schwigon From mailinglisten at renee-baecker.de Sun Aug 31 23:51:39 2008 From: mailinglisten at renee-baecker.de (ReneeB) Date: Mon, 01 Sep 2008 08:51:39 +0200 Subject: [Dresden-pm] 11. Deutscher Perl-Workshop : Call for Papers Message-ID: <48BB90FB.3070100@renee-baecker.de> Call for Papers / Participation Vom 25.02.2009 bis 27.02.2009 (Mittwoch bis Freitag) findet der 11. Deutsche Perl-Workshop im "Haus der Jugend" in Frankfurt 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. Du hast im Moment nur eine vage Idee für ein Thema? Kein Problem: uns interessieren im Prinzip alle Themen, die in irgendeiner Weise mit Perl zu tun haben. Frag' im Zweifelsfall einfach früh genug bei uns (wsorga at perl-workshop.de) nach. Wir helfen gerne dabei, ein vages Thema zu konkretisieren. Alle Vorträge werden im Plenum (120 - 150 Teilnehmer) angeboten. Zusätzlich zu den eigentlichen Vorträgen wird es zwei oder drei halbtägige Tutorials zu jeweils einem größeren Thema geben; auch hierzu sind uns Vorschläge von Referenten hochwillkommen. Konferenzsprache ist Deutsch, aber Du kannst Deinen Vortrag auch auf Englisch halten, wenn Deutsch nicht Deine Muttersprache ist. Deinen Vorschlag schickst Du uns bitte bis spätestens Montag, den 27.10.2008 als Abstract. Du kannst natürlich gerne auch mehrere Themen vorschlagen. Dein Abstract sollte in rund 2000 Zeichen (das sind ca. 30 Zeilen a 72 Spalten) das Thema beschreiben, was besonders an Deinem Ansatz ist und weshalb Perl als Sprache in diesem Fall besonders nützlich ist. Zum Einreichen eines Vorschlages, melde Dich bitte auf der Perlworkshop-Webseite an und verwende danach das Formular unter Mein Workshop / Meine Vorträge / Neuen Vortrag einreichen. Die Zuhörer sind, dem Workshop-Charakter gemäß, in erster Linie erfahrene Perl-Anwender. Auf Grund der Räumlichkeiten haben wir aber auch Platz für weniger erfahrene Anwender. Vorträge sollten, müssen aber nicht, technisch ausgerichtet sein. Optimal wäre es, wenn wir Deinem Beitrag praktisch nutzbare Anregungen für die eigene Arbeit entnehmen könnten. Ultrakurzvorträge (5 Minuten) Ein Nachmittag des Workshops wird wieder für "Lightning Talks" zur Verfügung stehen. Hier können insbesondere diejenigen, die sich (noch) keinen langen Vortrag zutrauen, einen aktiven Beitrag zum Workshop leisten und ihren ersten Auftritt als Vortragende versuchen. Ebenso ist hier Platz für Vorträge unter dem Motto "Mein liebstes Modul", in denen ein interessantes, nützliches und evtl. zu wenig bekanntes Perl-Modul kurz vorgestellt wird. Kurzvorträge (20 Minuten) Vortrag von 20 Minuten sowie anschliessend 5 Minuten Zeit für Fragen und Antworten. Kurzvorträge sind zum Beispiel zur Vorstellung von Projekten interessant. Langvorträge (40 Minuten) Vortrag von 40 Minuten sowie anschliessend 5 Minuten Zeit für Fragen und Antworten. Langvorträge sollten detailliert auf einen oder zwei besonders interessante technische Aspekte des Themas eingehen. Tagungsband Wir produzieren zum Workshop im Rahmen unserer Möglichkeiten einen gedruckten Tagungsband mit den Beiträgen des Workshops. Dazu benötigen wir eine schriftliche Ausarbeitung Deines Vortrags und Dein schriftliches Einverständnis für die Publikation in den Tagungsmaterialien [und im Web]. Termine Bis Montag, den 27.10.2008, nehmen wir Vorschläge für Vorträge an. Bis Sonntag den 16.11.2008 wirst Du von uns eine Rückmeldung erhalten. Die schriftliche Ausarbeitung des akzeptierten Vortrags muss uns bis spätestens Mittwoch den 14.01.2009 vorliegen, damit er in den Tagungsband aufgenommen werden kann. Für die Endfassung von Kurzvorträgen über "Work in Progress" gilt eine verlängerte Abgabefrist bis Anfang Februar 2009. Im Zweifelsfall hilft es uns und Dir, wenn Du frühzeitig mit uns per Email (wsorga at perl-workshop.de) Kontakt aufnimmst, um Fragen zu stellen bzw. Unklarheiten zu klären. Unverbindliche Themenvorschläge Als Anregung (nicht als Ausschlussliste!) bieten wir hier eine Reihe von stichwortartigen Anregungen zu Themenbereichen, zu denen wir uns interessante Vorträge oder Tutorials vorstellen können: * Debugging (Nutzung vorhandener Debugging-Tools) * Testen (speziell z.B. Unit Testing, Test-First-Ansatz) * Refactoring (im Sinne von Kent Beck/Martin Fowler) * Entwurf * Dokumentation (Automatisierung/Generierung) * Codegenerierung (Code aus Spezifikationen) * Mein liebstes CPAN-Modul * Grundlagen-Vorträge zu den obigen Themen Weitere Themen, zu denen wir uns interessante Vorträge vorstellen können (ohne Anspruch auf Vollständigkeit): * Aktuelle Web-Frameworks: Catalyst, Jifty, AxKit2, ... * Objektorientierung: Moose, Moose::Autobox, ... * Datenbankabstraktion: DBIx::Class * SPAM-Abwehr/Erkennung * Unicode * Perl-IO * Perl 6 * Perl6-in-Perl5-Integration und vice versa * "wirklich große" Perl-Systeme * Releasemanagement * Vergleich von "gleichen" Softwaresystemen (Template-Engines, Wikis, XML-Engines, ...) * Verträglichkeit mit anderen Systemen * (plattformübergreifende) GUI-Programmierung * Erfahrungsberichte zum Einsatz von Perl (z.B. Inbetriebnahme grösserer Perl-Systeme (WebGUI, ...)) * Grundlagen-Tutorials zu allen Perl-Themen (XML, Web, DBI, ...)