Hallo, Am Wed, 11 Feb 2004, Dirk schrieb:
Kann aber nicht auf Anhieb einschätzen, was das macht. Vielleicht jemand von euch?
while(<>){ s/\$cfg(\w+)/\$cfg\[\'$1\'\]/g; print; }
DAS "Skript" macht garnichts. Es gibt nur einen CR aus, sobald die Return-Taste gedrückt wird.
Falsch.
In der while-Bedingung müßte zwischen den spitzen Klammern ein Datei-Handle stehen.
Falsch. while(<>) ist aequivalent zu while(<STDIN>) (genauer s.u.).
Die Schleife würde dann Zeile für Zeile die geöffneten Datei abarbeiten.
Oh!
Der reguläre Ausdruck ist eine Suche mit Ersetzung. Normal würde Zeile für Zeile geprüft, ob sie
1. den Wert der Variablen $cfg enthält, und
Nein. Beachte den \ vor dem $. Das sucht nach dem String "$cfg".
2. ob unmittelbar danach ein Buchstabenteil angehängt ist
ok.
Und genau dieser Buchstabenteil wird ausgeschnitten, um erneut eingefügt zu werden, nun allerdings umschlossen von einer Klammer und Apostrophs.
Ja.
Aus "...CONFIGblablabla..." würde "...CONFIG['blablabla']..." (wenn $cfg den Inhalt "CONFIG" hätte)
Nein. Das macht aus dem String(!) "$cfgfoo" den String(!) "$cfg['foo']". Das ganze dient wohl dazu die $cfg-Variablen eines PHP-Scripts zu konvertieren.
Der ganze Variablenzuweisungskram fehlt aber eh. Dieses Fragment ist eine Nullnummer. Benutzen tut dieses "Ding" - so wie es da steht - mit Sicherheit keiner. Frag mal rund, wer das so hingebastelt hat. ;-)
Du faselst. RTFM: ==== man perlop ==== Binary "=~" binds a scalar expression to a pattern match. Certain operations search or modify the string $_ by default. This operator makes that kind of operation work on some other string. The right argument is a search pat tern, substitution, or transliteration. The left argument is what is supposed to be searched, substituted, or transliterated instead of the default $_ [..] s/PATTERN/REPLACEMENT/egimosx Searches a string for a pattern, and if found, replaces that pattern with the replacement text and returns the number of substitutions made. [..] If no string is specified via the "=~" or "!~" operator, the $_ variable is searched and modi fied. ==== while(<>) { s/foo/fu/; print; } ist also aequivalent zu: while( $_ = <STDIN> ) { $_ =~ s/foo/fu/; print $_; } Ist aequivalent zu: while( my $tmp = <STDIN> ) { $tmp =~ s/foo/fu/; print $tmp; } Bitte halte also doch einfach den Rand, wenn du keine Ahnung von den *Grundlagen* dessen hast, zu dem du deinen Senf abgeben willst. -dnh -- Lies halt mal dclp.*, da faellt dir nix mehr ein. Wenn man ein Guerteltier ueber die Tastatur abrollt, kommt besserer PHP Code raus als da gepostet wird. -- R. Huebenthal