Siechfred: variable in regulären ausdruck...

Beitrag lesen

Tag andy.

Habe eine Datei1 die enthält folgendes:
<Ziffer><leerzeichen><URL><tabulator><String>
und ich habe noch eine andere Datei2 die nur eine Liste von Strings enthält.
[...]
aus der ersten Datei möchte ich NUR (nicht die ganze Zeile) die URL-s extrahieren, dessen <String> (das Teil nach dem Tabulator) auch in der Datei2 vorkommt. Die anderen URL möchte ich nicht extrahieren.

Ich würde so vorgehen, dass ich zunächst die Strings aus Datei1 als Schlüssel eines Hashs verwende, entweder gleich beim Einlesen oder über einen Hash-Slice:

my %liste;  
open(DATEI, $datei1) or die $!;  
flock(DATEI, LOCK_SH);  
while(<DATEI>) {  
  $liste{chomp($_)} = "";  
}  
close(DATEI);

Im nächsten Schritt würde ich die Zeilen von Datei2 einlesen, splitten und mit den Hash-Schlüsseln vergleichen:

open(DATEI, $datei2) or die $!;  
flock(DATEI, LOCK_SH);  
while(<DATEI>) {  
  chomp($_);  
  my @dummy = split(/\s/, $_);  
  if(exists $liste{$dummy[2]}) {  
    $liste{$dummy[2]} = $dummy[1];  
  }  
}  
close(DATEI);

Das ergibt einen Hash folgender Struktur: $liste{'Bezeichnung'} = 'url', mit dem du dann weiterarbeiten kannst.

Übrigens:

open INPUT, "$ARGV[0]" or die ("datei $ARGV[0] nicht gefunden");

ist böse, siehe perlsec.

Siechfred