linux-l: perl und regexpr

Jens Dreger jens.dreger at physik.fu-berlin.de
Mi Jan 17 17:40:24 CET 2001


On Wed, Jan 17, 2001 at 04:55:28PM +0100, Ulrich Wiederhold wrote:
> Hallo,
> nach einem Neustart hat alles wieder funktioniert!
> Ich hasse sowas!
> :(

Jaja. Und Du hast _nichts_ angefasst... ;)
 
> Wenn ich Euch vielleicht noch ein kleines Problem anbieten könnte....
> Es soll die erste Zeile einer Datei gelöscht werden. Ich mache das
> bisher so:
> ...
> open(FILE, "<$location");
> @getfile = <FILE>;
> close(FILE);
> splice(@getfile,0,1);
> `rm $location`;
> open(DEL, ">$location");
> print DEL "@getfile";
> close(DEL);
> ...

Uhm. Well...

Also, man koennte natuerlich auch einfach schreiben:

open(FILE, "<$location");
open( DEL, ">$location.new");
while(<FILE>) {
  next unless($.-1);
  print DEL;
}
close(FILE);
close( DEL);
rename "$location.new", "$location";

Zeilenweise ist im allgemeinen besser... Statt 'rm' kannst Du auch mal
unlink versuchen, das ist dann build-in und startet keine neue shell.

> Das führt nur dummerweise dazu, daß immer zu Begin jeder Zeil
> "whitespace"-Character eingefügt werden, sodaß ein Teil der vorherigen
> regexpr. erst nötig wird.
> 
> Woran liegt das?

Das ist doch mal eine nette Frage ;)

Ich gebe Dir mal eine Perl-Zeile als Tipp:

    dreger at smart:..hdb3/dreger> perl -le 'print @F=(1,2,3); print "@F";'
    123
    1 2 3

Na? Idee?

> Ob immer genau 1 whitespace eingefügt wird, weiß ich nicht.

Abgesehen davon, dass man sowas testen kann lautet die Antwort: ja.

Gruss,

Jens.



Mehr Informationen über die Mailingliste linux-l