[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:
s/\/my\/path/\/my\/new\/path/;
Das ist unübersichtlicher als:
s#/my/path#/my/new/path#;
# ist also einfach nur ein anderer Begrenzer als das /.
Du kannst auch Klammerungen als Begrenzer nutzen:
s(/my/path)(/my/new/path);
s</my/path>{/my/path};
siehe
perlop
Abschnitt für: s/PATTERN/REPLACEMENT/egimosx
QuoteAny 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!