Thread Anfängerprobleme: $file =~ s#$LOCAL_TREE/#$HTTP_REP#g; (7 answers)
Opened by ronny at 2006-06-22 23:23

Linuxer
 2006-06-23 12:00
#67567 #67567
User since
2006-01-27
3890 Artikel
HausmeisterIn

user image
[quote=ronny,22.06.2006, 21:23]Beim Versuch, das Ganze nachzuvollziehen bleib ich an einer Stelle hängen:
$file =~ s#$LOCAL_TREE/#$HTTP_REP#g;
Das soll in einem Dateinamen den Pfad ändern. Machts auch. Nur ich verstehs nicht:-) Sollten da statt der# nicht / stehehn? Was bewirken die #?[/quote]
Hi,

s/// ist die übliche Schreibweise.
Wenn Du allerdings in Deinem Such- oder Ersetzungsstring selber den / verwendest, musst Du ihn maskieren, damit er nicht als Begrenzer des s/// gewertet wird:

Code: (dl )
s/\/my\/path/\/my\/new\/path/;


Das ist unübersichtlicher als:
Code: (dl )
s#/my/path#/my/new/path#;


# ist also einfach nur ein anderer Begrenzer als das /.

Du kannst auch Klammerungen als Begrenzer nutzen:
Code: (dl )
1
2
s(/my/path)(/my/new/path);
s</my/path>{/my/path};


siehe perlop
Abschnitt für: s/PATTERN/REPLACEMENT/egimosx
Quote
Any non-alphanumeric, non-whitespace delimiter may replace the slashes. If single quotes are used, no interpretation is done on the replacement string (the /e modifier overrides this, however). Unlike Perl 4, Perl 5 treats backticks as normal delimiters; the replacement text is not evaluated as a command. If the PATTERN is delimited by bracketing quotes, the REPLACEMENT has its own pair of quotes, which may or may not be bracketing quotes, e.g., s(foo)(bar) or s<foo>/bar/. A /e will cause the replacement portion to be treated as a full-fledged Perl expression and evaluated right then and there. It is, however, syntax checked at compile-time. A second e modifier will cause the replacement portion to be evaled before being run as a Perl expression.


perlretut beinhaltet auch Hinweise auf das Ersetzen des normalen Begrenzers. Suche dort nach "default delimiter".

perlrequick bringt auch Hinweise. Such dort auch mal nach "delimiter".
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!

View full thread Anfängerprobleme: $file =~ s#$LOCAL_TREE/#$HTTP_REP#g;