$xNeTworKx: regulärer Ausdruck will nicht so recht

Hi,
Ich habe folgendes regulären Ausdruck :
$input =~ s/$1/$1\n$neuer_reply/ if $input =~ /(<posting=$postingid>.+?</posting>)/s;

Ich will also an diesen Teil <posting=$postingid>.+?</posting> noch einen Teil dranhängen, was ich dadurch versucht habe s/$1/$1\n$neuer_reply/. Das Problem ist, dass er mir den gefundenen Teil  durch den neuen Teil ersetzt, und nicht dranhängt, aber warum ist das so?
Zur Info: Ein $alterteil .= $neuerteil käme nicht in Frage, da manchmal der neue Teil meistens mitten in der Skalarvariable irgendwo eingefügt werden soll, also ein splice in einem Skalar sozusagen.

$xNeTworKx.

  1. use Mosche;

    Ich habe folgendes regulären Ausdruck :
    $input =~ s/$1/$1\n$neuer_reply/ if $input =~ /(<posting=$postingid>.+?</posting>)/s;

    Ich will also an diesen Teil <posting=$postingid>.+?</posting> noch einen Teil dranhängen, was ich dadurch versucht habe s/$1/$1\n$neuer_reply/. Das Problem ist, dass er mir den gefundenen Teil  durch den neuen Teil ersetzt, und nicht dranhängt, aber warum ist das so?

    Ich bin mir nicht sicher, ob das $1 auch so von rechts nach links übertragen wird. Diese Fehlerquelle wird durch folgenden Code ausgemerzt.

    if ($input =~ /(<posting=$postingid>.+?</posting>)/s) {
       $input =~ s/$1/$1\n$neuer_reply/;
    }

    Wenn das immer noch nicht geht, probier nicht mit $1 zu arbeiten, weil du nicht weisst, wann das vom zweiten Regex überschrieben wird, sondern arbeite mit eigenen Variablen

    if (($blah) = $input =~ /(...)/) {
       $input =~ /$blah/$blah ../;
    }

    use Tschoe qw(Matti);

    --
    $a=n(1001010);print chr($a+=$_)for(0,43,-2,1,-84,65,13,1,5,
    -12,-3,13,-82,48,21,13,-6,-76,72,-7,2,8,-6,13,-104);sub n{
    $b=0;$_=0;for($c=length$_[0];$c;--$c){$_+=_($b)if substr$_
    [0],$c-1,1;$b++;}$_}sub _{($d)=@_;for($e=1;$d--;$e*=2){}$e}
    1. Hallo,
      Du hast Recht, es funktioniert wirklich erst wenn ich es so mache :

      if ($input =~ /(<posting=$postingid>.+?</posting>)/s) {
         $altes_tag = $1;
         $input =~ s/$altes_tag/$altes_tag\n$neues_tag/;
      }

      danke,
      $xNeTworKx.

  2. Hi,

    $input =~ s/$1/$1\n$neuer_reply/ if $input =~ /(<posting=$postingid>.+?</posting>)/s;

    $1 im Ersetzungsausdruck steht für die erste Klammer im Suchausdruck.
    Dort ist keine Klammer, also ist $1 im Ersetzungsausdruck leer.

    cu,
    Andreas