#--------# sub identifylinks { # # Erkennt und markiert Hyperlinks in einem Text # # Aufruf: # ======= # my $testtext = 'test: http://www.test.de'; # identifylinks (\$testtext,'%s','%s'); # print $testtext; # my $text = $_[0]; my $link = $_[1]; my $email_link = (defined $_[2] ? $_[2] : ''); my $modul = 1; eval "use URI::Find; 1;" or $modul = 0; my (%uris,%zuordnung); my $erkennung = 1; while ($$text =~ m/\|{$erkennung,$erkennung}/) { # eindeutigen temporären Ersetzungsstring finden $erkennung ++; } if ($modul) { my $lfd_uri = 0; my $finder = URI::Find -> new ( sub { # URI und geschriebenen Link speichern $lfd_uri ++; $uris{$lfd_uri} = $_[0]; $lfd_uri ++; $uris{$lfd_uri} = $_[1]; return sprintf ($link,@_); } ); $finder -> find ($text); } my $ersatz = 0; if (keys %uris) { # alle URI's verbergen vor E-Mail Erkennung $ersatz = 1; foreach my $lfd_uri (keys %uris) { my $ersatz = '|' x $erkennung . $lfd_uri . '|' x $erkennung; $$text =~ s/\Q$uris{$lfd_uri}/$ersatz/g; } } if ($email_link ne '') { # E-Mail auch erwünscht? eval "use Email::Find; 1;" or $modul = 0; if ($modul) { my $finder = Email::Find -> new ( sub { return sprintf ($email_link,$_[0] -> format,$_[1]); } ); $finder -> find ($text); } } if ($ersatz) { # alle verborgenen URI's wieder hervorholen foreach my $lfd_uri (keys %uris) { my $ersatz = '|' x $erkennung . $lfd_uri . '|' x $erkennung; $$text =~ s/\Q$ersatz/$uris{$lfd_uri}/g; } } } #--------#