AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Perl-Programmierer gesucht

Ein Thema von alcaeus · begonnen am 18. Feb 2005 · letzter Beitrag vom 19. Feb 2005
Antwort Antwort
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#1

Perl-Programmierer gesucht

  Alt 18. Feb 2005, 19:00
Hallo Leute,

ich habe hier ein (mehr oder weniger schoenes) Perl-Script vor mir liegen, und moechte gerne wissen, was einzelne Zeilen bedeuten:

Code:
$cmd  = $ARGV[3];

$cmd=~ s/(.*);$/$1/eg;
$cmd=~ s/(.)/"%".uc(sprintf("%2.2x",ord($1)))/eg;
Die erste Zeile habe ich noch verstanden: der Variable "cmd" wird der Wert des vierten Parameters zugewiesen. Aber was bedeuten die anderen Befehle? Ich hab nur rausgefunden, dass es sich um Replace-Functions handelt, aber dann hat die Kombination aus Internet und meiner bescheidenen Logik versagt
Kann mir bitte jemand sagen, was hier gesucht bzw. ersetzt wird?

Und noch was: falls jemand erkennen sollte, woher die Zeilen kommen, erwaehnt es nicht, und an die anderen: fragt mich nicht woher sie kommen.

Greetz
alcaeus

[edit] 3000? [/edit]
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#2

Re: Perl-Programmierer gesucht

  Alt 19. Feb 2005, 18:36
Kommt schon Jungs, es muss doch jemanden geben, der ein bisschen Perl kann
Ich habe mittlerweile noch folgendes rausgefunden:
s/p/r/o ersetzt jedes Vorkommnis eines Patterns p mit r, unter beruecksichtigung der Optionen o
Doch was heisst das Pattern "(.*);$" bzw. der Replacement-String "$1"? Die Optionen habe ich bereits gefunden: g sorgt dafuer, dass jedes Vorkommen von p ersetzt wird, und e sagt der Funktion, den String als Perl-Expression zu bearbeiten. Das kompliziert das ganze dann doch einigermassen...

Kann mir jemand weiterhelfen?

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von memphis
memphis

Registriert seit: 4. Apr 2003
Ort: Innsbruck
89 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Perl-Programmierer gesucht

  Alt 19. Feb 2005, 18:53
hallo

ich vermute mal, dass das "(.*)" für irgendetwas steht und das "$1" ist dann das irgendetwas
so ist es bei den meisten regulären ausdrücken. der schalter /s steht, wenn ich mich nicht ganz irre, dafür, dass der ganze String als eine Zeile angesehen wird.

habe nur ganz wenig mit perl gearbeitet, aber bei php bzw. c ist es auch so ungefähr..

ansonsten hat selfhtml auch einiges über perl, vieleicht bzw. hoffentlich wird dort auch auf reguläre Ausdrücke eingegangen.

Servus

Edit: Glück gehabt, vieleicht hilfts: http://de.selfhtml.org/cgiperl/sprache/regexpr.htm
Lukas
Wenn du nicht mehr weiter weißt, zeichne dir 'nen Einheitskreis.
  Mit Zitat antworten Zitat
Benutzerbild von fiasko
fiasko

Registriert seit: 10. Dez 2002
Ort: Dresden
506 Beiträge
 
#4

Re: Perl-Programmierer gesucht

  Alt 19. Feb 2005, 19:31
Zitat von alcaeus:
Kommt schon Jungs, es muss doch jemanden geben, der ein bisschen Perl kann
Hat jemand gerufen?

Code:
$cmd  = $ARGV[3];
speichert den 3. Kommandozeilenparameter in $cmd

Code:
$cmd=~ s/(.*);$/$1/eg;
Der =~ Operator mapped für das Statement $cmd auf $_ (die Standardskalarvariable), denn s/// arbeitet immer mit der Standardskalarvariable. s/// ist einfach eine Ersetzung des regulären Ausdruckes (.*);$ durch den ersten Match $1. Die Buchstaben eg sind Parameter, g steht für global und bedeutet das die Ersetzung überall gemacht wird und nicht schon nach der ersten Ersetzung endet. Wofür e steht müßte man jetzt mal im Handbuch nachschauen... ich vermute etwas mit dem escapen. Die Zeile entfernt einfach ein endstehendes Semikola.

Code:
$cmd=~ s/(.)/"%".uc(sprintf("%2.2x",ord($1)))/eg;
Das s/// ersetzt hier alle Matches durch was ganz lustiges. Die uc() Funtkion gibt den Parameter in Großbuchstaben zurück, und sprintf macht das was man von sprintf erwartet. ord ist auch wie in Pascal zu verstehen, $1 ist wieder der Match. Es konvertiert als den ASCII-Wert aller Zeichen in 2stellige Hex-Zahlen mit nem % davor.

der Code ist aber ziemlich dumm, das geht auch kürzer und effektiver in Perl.
Thomas Liske
Posts comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#5

Re: Perl-Programmierer gesucht

  Alt 19. Feb 2005, 19:36
Hallo Luki,

das hilft mir schon viel weiter. Mit dem ersten Replace wird jedes Vorkommen von "12345;" am Ende von $cmd durch "12345" ersetzt.

Die zweite Zeile ersetzt dann jedes Zeichen in $cmd durch den entsprechenden Hex-Wert, jedenfalls wenn ich den String "%2.2x" richtig interpretiert habe. Ueber das 2.2 bin ich mir nicht ganz sicher, ich hab zwar gesehen dass eine Zahl nach dem %-Zeichen sicherstellt, dass die Zahl sicher so lang wird, aber was bedeutet das mit dem Punkt?
Kann das noch jemand erklaeren was das mit dem e-Parameter bedeutet? Wenn ich nun z.B. als Kommando "ls" uebergebe, was wuerde dann dieses "Interpretieren" machen?

@Fiasko: danke, das bestaetigt das was ich bisher rausgefunden habe

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von fiasko
fiasko

Registriert seit: 10. Dez 2002
Ort: Dresden
506 Beiträge
 
#6

Re: Perl-Programmierer gesucht

  Alt 19. Feb 2005, 19:51
Hallo,

Zitat von alcaeus:
@Fiasko: danke, das bestaetigt das was ich bisher rausgefunden habe
ups, wer lesen kann ist klar im Vorteil


wenn du man mal ins Perl-Manual schaut:

Zitat:
sprintf FORMAT, LIST
Returns a string formatted by the usual "printf"

...
Perl permits the following universally-known flags
between the "%" and the conversion letter:
...
number minimum field width
.number "precision": digits after decimal point for
floating-point, max length for string, minimum length
for integer
Die Parameter eg sind in der 2. Zeile uninteressant, in der dritten Zeile sorgt das dafür:

Zitat:
If single quotes are used,
no interpretation is done on the replacement
string (the "/e" modifier overrides this, how*
ever). Unlike Perl 4, Perl 5 treats backticks as
normal delimiters; the replacement text is not
evaluated as a command. If the PATTERN is delim*
ited by bracketing quotes, the REPLACEMENT has its
own pair of quotes, which may or may not be brack*
eting 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.
spricht der sorgt dafür das die Funktionsaufrufe uc(..) ausgeführt werden.
Thomas Liske
Posts comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#7

Re: Perl-Programmierer gesucht

  Alt 19. Feb 2005, 19:56
Zitat von fiasko:
ups, wer lesen kann ist klar im Vorteil
Ganz im Gegenteil, ich war mir nicht 100%ig sicher, und du hast diese Vermutungen bestaetigt.

Zitat:
spricht der sorgt dafür das die Funktionsaufrufe uc(..) ausgeführt werden.
Ok, dann waere das so ziemlich die Loesung des Problems. Vielen Dank euch beiden

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:11 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz