[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: [OT] Perl Frage



Hallo, Norbert...

On Fri, Jul 22, 2005 at 11:11:59PM +0200, Norbert Preining wrote:
> Beim basteln an den TeX live Debian packages bin ich auf folgendes Problem 
> gestoßen: Ich muss Dateien umbennenen und die Angaben dazu würde ich
> gerne in einer config Datei haben. Bis jetzt noch ganz einfach, jetzt
> wird es kompliziert: Die config Datei sollte auch patterns zulassen
> (auch noch einfach), aber auch auf die eingefangenen Variablen im Target
> zurückgreifen können.

Ohne meinen Perl-Interpreter vorgeglüht zu haben... kennst du das Tool
"rename"? Vielleicht reicht das für deine Zwecke schon.

> Was man direkt schreiben würde
>         if ($f =~ m|texmf-doc/man/man(.*)/(.*)$|) {
>                 copy ($f, "$newdest/man/man$1/$2");
>         }
> möchte ich mit einem Eintrag im config file:
>         texmf-doc/man/man(.*)/(.*):$newdest/man/man$1/$2
> erreichen. Also im neuen Dateinamen sollten
> - Variablen expandiert werden
> - Referenzen auf regexp auch erweitert werden

Das "matchen" mittels (.*) sollte eigentlich genauso klappen, wie du es
dir vorstellst:

$suchausdruck = 'texmf-doc/man/man(.*)/(.*)';
$f =~ m|$suchausdruck_aus_config_datei|;

Was die Ersetzung angeht, kannst du dir vielleicht auch diesen Teil aus
der perlop(1) Manpage zunutze machen:

] If the "/g" option is not used, "m//" in list context returns a
] list consisting of the subexpressions matched by the parentheses
] in the pattern, i.e., ($1, $2, $3...).  (Note that here $1
] etc. are also set, and that this differs from Perl 4’s behavior.)

Du könntest also so zumindest die Variablen in ein Array holen:

@variablen = ( $f =~ m|$suchausdruck_aus_config_datei| );

Dann müsstest du sehen, wie es am einfachsten ist, die Variablen
auf der "rechten Seite" zu ersetzen. Falls du das "Perl Cookbook" dein
eigen nennt, findest du ein gutes Rezept im Kapitel 1.8.

Bei dir wäre es sinngemäß sowas wie:

$rechteseite =~ s/\$(\d+)/$variablen[$1-1]/gee;

Wenn links "$9" steht, würde es durch $variablen[8] ersetzt werden.
Getestet habe ich das momentan nicht. Aber vielleicht ist der eine oder
andere Denkanstoß dabei.

Da soll noch mal jemand sagen, Perl wäre hässlich. ;)

Gruß,
 Christoph
-- 
~
~
~
".signature" [Modified] 3 lines --100%--                3,41         All



Reply to: