- Automatisches Verlinken von Internetadressen
- chmod bei vielen Dateien via FTP
- Erstellung von Vorschaubildern
- Weiterleitung von HTTP-Requests an einen anderen Server
- weitere in Bearbeitung
Codebeispiele zu Perl
Automatisches Verlinken von Urls
Sehr einfach geht es mit dem Modul URI::Find::Schemeless. Es ist vom Modul URI::Find abgeleitet, welches hingegen nur URIs der Form http://www.fabiani.net/ oder mailto:martin@fabiani.net erkennt. URI::Find::Schemeless ist da sehr viel freier, und erkennt auch Uris der Form www.fabiani.net oder ftp.suse.com.
Hier ein kleines Codebeispiel:
01: #! /usr/bin/perl 02: use strict; 03: use warnings; 04: use URI::Find::Schemeless; 05: use HTML::Entities qw(encode_entities); 06: 07: my $text = q~ 08: hallo dies ist keine.url 09: dies ist aber eine: www.fabiani.net 10: ftp.irgendwas.de/test/thisfile mailto:martin@fabiani.net oder so 11: yeah martin@fabiani.net http://www.fabiani.net/ 12: ~; 13: 14: 15: # neues URI::Find::Schemeless-Objekt erstellen und ihm als Callback 16: # die Aktion mitgeben, die fuer jede gefundene URI ausgefuehrt werden 17: # soll: 18: 19: my $finder = URI::Find::Schemeless->new 20: ( 21: sub { 22: my ($uri, $originalUri) = @_; 23: # return qq~<a href="$uri" target="_newpage">$originalUri</a>~; 24: 25: return 26: q/<a href="/ . encode_entities("$uri") . q/">/ . 27: encode_entities($originalUri) . q~</a>~; 28: } 29: ); 30: 31: # hier beginnt die eigentliche Suche und (in unserem Fall) Ersetzung: 32: my $howManyFound = $finder->find(\$text); 33: 34: # schauen wir uns doch das Ergebnis an: 35: print "$howManyFound URIs found\n"; 36: print "$text\n";
Leider gehört die Modulgruppe URI::Find noch nicht zu den Standardmodulen.Falls der Provider sie nicht installieren will (z.B. mit: perl -MCPAN -e "install 'URI::Find'") , kann man sich die benötigten Dateien irgendwo in sein Verzeichnis kopieren (z.B. nach cgi-bin/lib) und es dann im Perlscript, welches in cgi-bin liegt, mit den folgenden Codezeilen laden:
1: BEGIN { 2: use FindBin qw($Bin); 3: use lib "$Bin/lib"; 4: } 5: use URI::Find;
Siehe dazu auch die Tips&Tricks zu Modulen
Man sollte URI::Find keine HTML-Dokumente geben, weil es sonst bei Links eventuellen Blödsinn macht, wenn man nicht sehr aufpasst
Dokumentation zu URI::Find:
NAME SYNOPSIS my $finder = URI::Find->new(\&callback); $how_many_found = $finder->find(\$text); DESCRIPTION Public Methods new Creates a new URI::Find object. &callback is a function which is called on each URI found. It is find $text is a string to search and possibly modify with your callback. Protected Methods I got a bunch of mail from people asking if I'd add certain features
to The following are methods internal to URI::Find which a subclass can uri_re Returns the regex for finding absolute, schemed URIs Usually this method does not have to be overridden. schemeless_uri_re Returns the regex for finding schemeless URIs (www.foo.com and such) Many people will want to override this method. See the uric_set Returns a set matching the 'uric' set defined in RFC 2396 suitable You almost never have to override this. cruft_set Returns a set of characters which are considered garbage. Used by decruft Sometimes garbage characters like periods and parenthesis get This method takes a candidate URI and strips off any cruft it finds. recruft This method puts back the cruft taken off with decruft(). This is schemeless_to_schemed This takes a schemeless URI and returns an absolute, schemed URI. is_schemed Returns whether or not the given URI is schemed or schemeless. True Old Functions
EXAMPLES my $finder = URI::Find->new( Check each URI in document to see if it exists. use LWP::Simple; my $finder = URI::Find->new(sub { Turn plain text into HTML, with each URI found wrapped in an HTML use CGI qw(escapeHTML); $text = "<pre>\n" . escapeHTML($text) . "</pre>\n";
# siehe Anmerkung* CAVEATS, BUGS, ETC... NOTE: The prototype on find_uris() is already getting annoying to me.
I SEE ALSO AUTHOR Currently maintained by Roderick Schertler <roderick@argon.org>. |
*) Die Verwendung von escapeHTML im obigen Beispiel ist leider nicht korrekt, weil da eventuell URLs kaputt gemacht werden. Als besseres Beispiel siehe meinen Code...
Dokumentation URI::Find::Schemeless
| NAME URI::Find::Schemeless - Find schemeless URIs in arbitrary text. SYNOPSIS my $finder = URI::Find::Schemeless->new(\&callback); The rest is the same as URI::Find. DESCRIPTION The heuristics are such that it hopefully finds a minimum of false AUTHOR Currently maintained by Roderick Schertler <roderick@argon.org>. SEE ALSO |
Letztes Update dieser Seite: Sunday, 16-Jan-2005 22:47:28 CET