Schrift
[thread]8105[/thread]

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



<< >> 8 Einträge, 1 Seite
ronny
 2006-06-22 23:23
#67565 #67565
User since
2006-06-22
1 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hallo Perl-Freunde

Bis auf vereinzelte (meist irgendwo kopierte:-) dreizeiler hab ich noch nix mit Perl gemacht. Für ein etwas größeres Projekt hab ich mir ein Script im Netz gesucht, das einigermassen das macht, was ich brauche.
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 #?
Ich hab versucht, im Forum zu suchen, nur weiss ich ja nichtmal, wonach8-(
Ein Hinweis auf einen Suchbegriff würde mir also eigentlich schon reichen...

Das ganze Script steht bei http://www.linux-magazin.de/Artikel....se.html
Listing 3



Danke schonmal,


Ronny
Relais
 2006-06-22 23:33
#67566 #67566
User since
2003-08-06
2246 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ja und nein, nach dem s-Operator folgt oft /// -also s/.../.../ - doch was ist, wenn Du innerhalb der /// selbst nach einem / suchst, wie in Deinem Fall?

Die Antwort gibt Dir perlre oder auch perlrequick oder auch perlretut ...
Erst denken, dann posten --
27. Deutscher Perl- u. Raku -Workshop (Termin wird noch gesucht) 2025 in München.

Winter is Coming
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!
esskar
 2006-06-23 14:10
#67568 #67568
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
mit \Q und \E wäre es wohl auch gegangen!
pq
 2006-06-23 14:22
#67569 #67569
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
@relais, esskar: andere begrenzer muss man nur nehmen, wenn im such- oder ersetzungsteil
der slash vorkommt. kommt er allerdings in variablen vor, macht das doch
gar keine probleme:
Code: (dl )
1
2
3
4
5
6
$ perl -wle'
$_="/foo/bar";
$foo="/foo/bar";
s/$foo/baz/;
print'
baz
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
renee
 2006-06-23 14:56
#67570 #67570
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Im ersten Post ist ja ein / deswegen ist es vollkommen ok was Relais und esskar schreiben...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
pq
 2006-06-23 16:10
#67571 #67571
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
ach jetzt seh ich's. aber da hilft dann ein \Q auch nicht...
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
renee
 2006-06-23 17:00
#67572 #67572
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
stimmt...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
<< >> 8 Einträge, 1 Seite



View all threads created 2006-06-22 23:23.