mrks: Verschachtelte for-each Schleifen mit s///

Beitrag lesen

»» ~~~perl

»» foreach (@input_datei)
»» {
»» $var1 =$;
»»
»»          foreach (@input_datei_2){
»» $
=~s#$var1#<a href="$1">$1</a>#;

mit $var suchst du nach nach dem Literal $var.
du suchst \Q$var
$1 referenziert den Inhalt der ersten Klammer.
Ich finde bei dir keine Klammer.
Im übrigen ist in $var am Ende ein Linefeed \n enthalten.

mfg Beat

Danke für die schnelle Antwort!

Dass ich mit $1 eine klammer referenziere ist mir klar. Der Code hätte heißen sollen:

$_=~s#($var1)#<a href="$1">$1</a>#;

Da war ich etwas schlampig - sorry.

Ist \Q also die Lösung? Leider erziele ich damit auch nicht die gewünschten Ergebnisse.
Hier der ganze Code:

[code lang=perl]
#!usr/bin/perl
use utf8;
use warnings;

open INPUTDATEI, "<", "e:\-----.txt" || die "Datei nicht geoeffnet, weil: $!";
open ZWEITEINPUTDATEI, "<", "e:\-------.txt" || die "Datei nicht geoeffnet, weil: $!";
open OUTPUTDATEI, "+>", "e:\--------.txt" || die "Datei nicht geoeffnet, weil: $!";

@inputdatei = <INPUTDATEI>;
@zweiteinputdatei = <ZWEITEINPUTDATEI>;

foreach (@zweiteinputdatei){
$var1 =$;
foreach (@inputdatei)
{
$
=~s#\Q$var1#TEST#;
print OUTPUTDATEI $_;
}
}

  
Ziel wäre die Ersetzung der Zeilen aus der Inputdatei durch dieses TEST wenn $var1 die jeweilige Zeile matcht. Der modifizierte Text soll also gleich in die Outputdatei geschrieben werden.  
  
Mit dem Line-Feed hast Du Recht. Das könnte man aber mit chomp ($var1) wohl wegbekommen. Bin mir aber sicher, dass nicht dieses Line-Feed das Problem ist.  
  
mfg mrks