alligator: s/../.. - Variableninterpolation

Hi zusammen,

ich will den Inhalt der Variable bei einer Substitions druch "nichts"
ersetzen.

Meine Variable:
my $quelle = "D:\Proggen\Perl\Projekte\me-spiegel\sp";

Meine Substitution:
($relativer_pfad=$pfad_dos)=~ s/$quelle//g;

Folgende Fehlermeldung:
Unrecognized escape \m passed through in regex; marked by <-- HERE in m/D:\Proggen\Perl\Projekte\m <-- HERE e-spiegel\sp/ at
me-spiegel\me-spiegel.pl line 31.

Wenn ich es so mache:
($relativer_pfad=$pfad_dos)=~ s/D:\Proggen\Perl\Projekte\me-spiegel\sp//g;

Dann funktioniert es einwandfrei. Kann mir jemand weiterhelfen, wie
ich dieses Problem lösen könnte und woran sagen woran es liegt ?

cya
alligator

  1. Sup!

    Vielleicht hilft

    my $quelle = 'D:\Proggen\Perl\Projekte\me-spiegel\sp';

    ja schon. Denn sonst wird "dank" Double-Quotes das \ sofort in \ übersetzt... und dann im RegExp wird \m zu irgendwas komischem... und dann ist doof.

    my $quelle = "D:\\" könnte auch gehen, ist aber irgendwie blöde.

    Gruesse,

    Bio

    --
    Im übrigen bin ich der Meinung, daß der Bereich ASP abgeschafft werden soll!
    1. Sup!

      Vielleicht hilft

      my $quelle = 'D:\Proggen\Perl\Projekte\me-spiegel\sp';

      ja schon. Denn sonst wird "dank" Double-Quotes das \ sofort in \ übersetzt... und dann im RegExp wird \m zu irgendwas komischem... und dann ist doof.

      stimmt :o)
      Danke.

      cya
      alligator

  2. Hi zusammen,

    ich will den Inhalt der Variable bei einer Substitions druch "nichts"
    ersetzen.

    Meine Variable:
    my $quelle = "D:\Proggen\Perl\Projekte\me-spiegel\sp";

    Meine Substitution:
    ($relativer_pfad=$pfad_dos)=~ s/$quelle//g;

    Folgende Fehlermeldung:
    Unrecognized escape \m passed through in regex; marked by <-- HERE in m/D:\Proggen\Perl\Projekte\m <-- HERE e-spiegel\sp/ at
    me-spiegel\me-spiegel.pl line 31.

    Ich bin mir jetzt nich ganz sicher, aber ich glaube du suchst:
        \Q          quote (disable) pattern metacharacters till \E

    If use locale is in effect, the case map used by \l, \L, \u and \U is taken from the current locale. See the perllocale manpage. For documentation of \N{name}, see the charnames manpage.

    You cannot include a literal $ or @ within a \Q sequence. An unescaped $ or @ interpolates the corresponding variable, while escaping will cause the literal string $ to be matched. You'll need to write something like m/\Quser\E@\Qhost/.

    Wobei ich das so verstehe, das du den String von Hand escapen musst, evtl. mit sowas:
    $quelle =~ s/\/\\/g;

    Struppi.

    P.S.: kann aber auch Quatsch sein, hab grad keine Lust das testen.

    1. HI,

      also so tut es jetzt anscheinend ...

      my $quelle = 'D:\Proggen\Perl\Projekte\me-spiegel\sp';
      ($relativer_pfad=$pfad_dos)=~ s/\Q$quelle\E//g;

      DAnke.
      cya
      alligator

  3. Hi nochmal,
    also bis jetzt hab ich die Lösung noch nicht gefunden, obwohl ich anfangs dachte, das Bio´s Lösung tun würde :o(
    Also hoffe auf weiter Lösungsvorschläge ..
    cya
    alligator

  4. Sup!

    Vielleicht geht ja

    my $quelle = quotemeta(D:\Proggen\Perl\Projekte\me-spiegel\sp);

    ($relativer_pfad=$pfad_dos)=~ s/$quelle//g;

    Gruesse,

    Bio

    --
    Im übrigen bin ich der Meinung, daß der Bereich ASP abgeschafft werden soll!