Thread Suchen und ersetzen - möglichst schnell u. korrekt (12 answers)
Opened by stb2050 at 2005-04-12 14:41

Strat
 2005-04-12 16:05
#53727 #53727
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
1
2
use strict;
use warnings;

fehlt am anfang des scriptes... das solltest du dir angewoehnen, weil es dich 1. zum saubereren programmieren zwingt und 2. bei der fehlersuche extrem hilfreich ist

@content =~ s.... funktioniert nicht, weil =~ die linke seite in einen skalaren kontext
bringt und somit das pattern nur auf die anzahl der elemente der liste angewendet wird (z.B. 25 =~ s...)
Code: (dl )
s/.../.../ for @content;

wuerde aber funktionieren

der ersetzungscode klappt meistens, aber nicht immer:
x) \u ist ein Sonderzeichen... du meinst wahrscheinlich /u ?
x) wenn du anstelle von s/.../.../ s|...|...| verwendest, sparst du dir ein paar backslashes
x) wenn z.B. in $username ein sonderzeichen vorkommt, wird das verwandelt (z.B. der punkt steht fuer ein (fast) beliebiges zeichen, und eine oeffnende klammer kann sogar einen fehler verursachen... also besser die $username mit \Q$username\E quoten, z.B.
Code: (dl )
$content =~ s|/userdaten/\Q$username\E/bilder|/userdaten/$userid/bilder|g;


zur optimierung:
1. warum liest du die userdaten sortiert ein? brauchst du die sortierung, oder kannst du darauf verzichten?

2. du list alle dateinamen ein, scheinst aber immer nur einen zu brauchen...
Code: (dl )
1
2
3
while (my $a = readdir(DIR)) {
 ...
}

liest immer nur eine datei ein (while hat einen skalaren kontext)

$a und $b als variablennamen besser nicht verwenden, weil die eigentlich fuer den sort-befehl reserviert sind, und von daher von "use strict;" nicht abgedeckt werden... und je sprechender ein variablenname ist, desto leichter versteht jemand (auch man selbst) das script... lediglich fuer Integer-Laufvariablen hat sich irgendwie $i, $j usw eingebuergert...

../userdaten/main ist IMHO ein Kandidat fuer eine eigene Variable... z.B.
Code: (dl )
1
2
use FindBin;
my $dir = "$FindBin::Bin/../userdaten/main";

(mit Findbin machst du aus einem pfad, der relativ zum ausgefuehrten perlscript angegeben ist, einen absoluten, sodass du das script auch von ausserhalb des verzeichnisses ausfuehren kannst\n\n

<!--EDIT|Strat|1113308290-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/

View full thread Suchen und ersetzen - möglichst schnell u. korrekt