Schrift
[thread]9931[/thread]

durch eigene error_log läuft script



<< |< 1 2 >| >> 19 Einträge, 2 Seiten
bieber
 2007-08-02 10:43
#97207 #97207
User since
2007-06-18
148 Artikel
BenutzerIn
[default_avatar]
Hallo Community,

der kleine Bieber versteht die Welt nicht mehr, mein script lief nicht, weshalb ich mir manuell ein error_log angelegt habe im Kopf des Sctipt, um den Fehler zu finden

Code (perl): (dl )
open STDERR, ">>error_log" or die $!;


als ich dann mein Script erneut gestartet habe lief es auf einmal!

im log standen mehrere Zeilen der Art:
Code: (dl )
1
2
3
4
[Thu Aug  2 09:53:45 2007] import.pl: Use of uninitialized value in substitution (s///) at /srv/www/cgi-bin/import/import.pl line 60.
[Thu Aug 2 09:53:45 2007] import.pl: Use of uninitialized value in substr at /srv/www/cgi-bin/import/import.pl line 61.
[Thu Aug 2 09:53:45 2007] import.pl: Use of uninitialized value in substr at /srv/www/cgi-bin/import/import.pl line 62.
[Thu Aug 2 09:53:45 2007] import.pl: Use of uninitialized value in substr at /srv/www/cgi-bin/import/import.pl line 63.


der zugehörige code sieht so aus:

Code (perl): (dl )
1
2
3
4
5
6
7
8
foreach(@datei){
  my $check="false";                               #rücksetzen der checkVariabel
  chomp;  my @work = split /\s+/;                  #jede Zeile der Datei ins array "work" laden, ohne Trennzeichen
  $work[0]=~ s/^\s+//g;                            #leerzeichen zu beginn einer Zeile löschen
  next if substr ($work[0],0,1) eq '#';            #nächste Zeile der datei wenn das erste Zeichen "#" ist
  next if substr ($work[0],0,1) eq ';';
  next if substr ($work[0],0,1) eq '';
}

in der Schleife steht noch mehr, sollte aber nicht von Bedeutung sein

in @datei lese ich vorher ne Datei ein, ich habe hier mal eine zweite Datei getestet, mit der kamen die gleichen errors im log, aber das script selbst lief mit und ohne der Nutzung der eigenen log

ist mir ehrlich gesagt ein völliges Rätsel wieso das passiert, wieso läuft ein script auf einmal wenn ich ne eigene error_log verwende, wäre schön wenn mir das mal jm. erklären könnte, vielleicht bekomm ich dann auch die Meldungen aus dem error_log noch weg
Es gibt immer Leute die meinen, sie seien schlauer als ich. Das Schlimmste ist, sie sind es auch.
renee
 2007-08-02 11:25
#97210 #97210
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ich nehme an, es ist ein CGI-Skript. Die Warnungen werden vor einem HTTP-Header gesendet und das gibt einen Wiki:"Internal Server Error". Wenn Du ein eigenes Error_log machst, dann passiert das natürlich nicht.

Die Warnungen bekommst Du weg, wenn Du
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
local @aktiv;

foreach(@datei){
    # leerzeilen interessieren nicht...
    next if /^$/;
    my $check="false"; #rücksetzen der checkVariabel
    chomp; my @work = split /\s+/; #jede Zeile der Datei ins array "work" laden, je Trennzeichen
    $work[0]=~ s/^\s+//g; #leerzeichen zu beginn einer Zeile löschen
    next if substr ($work[0],0,1) eq '#'; #nächste Zeile der datei wenn das erste Zeichen "#" ist
    next if substr ($work[0],0,1) eq ';';
    next if substr ($work[0],0,1) eq '';
}
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
bloonix
 2007-08-02 11:26
#97211 #97211
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
Das Problem liegt daran, das bestimmte Zeilen leer sind
und dann durch substr() diese Warnungen ausgworfen
werden. Du musst am Anfang der Schleife auf Leerzeilen
prüfen, nicht am Ende.

Code (perl): (dl )
1
2
3
4
foreach (@datei) {
   next if /^\s*(?:[#;]|$)/;
   chomp; my @work = split /\s+/;
}
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
bloonix
 2007-08-02 11:36
#97218 #97218
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
Code (perl): (dl )
1
2
3
my @work = split /\s+/;
  $work[0]=~ s/^\s+//g;
  next if substr ($work[0],0,1) eq '';


Diese 3 Zeilen ergeben für mich keinen Sinn. Wenn eine Zeile nun
zum Beispiel mit Leerzeichen beginnt, dann wird $work[0] leer sein,
$work[1] etc. aber nicht, dass heißt diese Zeilen würden nicht
bearbeitet werden. Beispiel:

Code: (dl )
1
2
Dies ist die erste Zeile.
Dies ist die zweite Zeile.


Die zweite Zeile würde nicht bearbeitet werden.
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
bieber
 2007-08-02 11:39
#97219 #97219
User since
2007-06-18
148 Artikel
BenutzerIn
[default_avatar]
funktioniert ;)

jup geht um cgi, sorry hab ich vergessen zu erwähnen,
aber ich bekam vorher keine error-Meldung! das script hörte nicht auf zu laden,
hab es bestimmt 5Minuten laufen lassen

das ich aber auch alles immer so kompliziert machen muss, wenn die regulars
es in einer Zeile schaffen.... ich muss mir unbedingt das regex-Buch kaufen wenn die neue Ausgabe raus ist^^

danke für die schnelle Hilfe
Es gibt immer Leute die meinen, sie seien schlauer als ich. Das Schlimmste ist, sie sind es auch.
bloonix
 2007-08-02 11:40
#97220 #97220
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
Code (perl): (dl )
1
2
3
foreach(@datei){
    # leerzeilen interessieren nicht...
    next if /^$/;


Betrachtet man ' ' nun auch als Leerzeile oder eher nicht?
In diesem Fall denke ich schon, also würde ich /^\s*$/
bevorzugen, denn anstonsten werden trotzdem die Warnungen
ausgestoßen.
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
bloonix
 2007-08-02 11:46
#97221 #97221
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
bieber+2007-08-02 09:39:00--
funktioniert ;)

Wie hast du es denn nun gemacht? Denn wenn du einfach
nur /^$/ eingefügt hast, wirst du trotzdem bei Zeilen, die
nur Leerzeichen enthalten die Warnungen erhalten.
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
bieber
 2007-08-02 11:49
#97224 #97224
User since
2007-06-18
148 Artikel
BenutzerIn
[default_avatar]
opi+2007-08-02 09:36:37--

Code: (dl )
1
2
Dies ist die erste Zeile.
Dies ist die zweite Zeile.


Die zweite Zeile würde nicht bearbeitet werden.



verdammt du hast recht, in meiner Datei kam sowas nicht vor, deswegen hab ich´s auch gar nicht gemerkt, ich hatte haufen Probleme mit leerzeilen, weil auch Windoof umbrüche drinne waren wie \r, da habe ich ewig rumgespielt, und als es irgendwann ging war ich froh das es ging, egal wie^^
naja irgendwann wird das schon, ist zwar schade das meine Versuche meist ne Macke haben, aber immer hier gleich die Lösung zu erfahren bringt mich ja nicht weiter

und ja ' ' muss ich auch berücksichtigen

edit: ich habe deine Version genommen

Code (perl): (dl )
next if /^\s*(?:[#;]|$)/;
Es gibt immer Leute die meinen, sie seien schlauer als ich. Das Schlimmste ist, sie sind es auch.
bloonix
 2007-08-02 12:01
#97230 #97230
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
Geschwindigkeit ist ein weiterer Grund ;)

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
use strict;
use warnings;
use Benchmark;

my @datei = (1,'',2,';',3,'#');

sub long {
  foreach(@datei){
    next if /^$/;
    my $check="false";
    chomp; my @work = split /\s+/;
    $work[0]=~ s/^\s+//g;
    next if substr ($work[0],0,1) eq '#';
    next if substr ($work[0],0,1) eq ';';
    next if substr ($work[0],0,1) eq ''; 
  }
}

sub short {
  foreach (@datei) {
    my $check = "false";
    next if /^\s*(?:[#;]|$)/;
    chomp; my @work = split /\s+/;
  }
}

Benchmark::cmpthese(-1, {
   long  => \&long,
   short => \&short,
})

Code: (dl )
1
2
3
4
#> ./test.pl
Rate long short
long 55855/s -- -45%
short 101195/s 81% --
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
bieber
 2007-08-02 12:15
#97231 #97231
User since
2007-06-18
148 Artikel
BenutzerIn
[default_avatar]
hehe, nett
aber ehrlich gesagt wäre ich nie auf dieses regex gekommen^^

mein Hirn streubt sich irgendwie immernoch dagegen, naja ich glaube das braucht einfach nur Zeit und Übung, irgendwann werde ich der größte Regex-Experte dieser Welt sein :D muhahaha
Es gibt immer Leute die meinen, sie seien schlauer als ich. Das Schlimmste ist, sie sind es auch.
<< |< 1 2 >| >> 19 Einträge, 2 Seiten



View all threads created 2007-08-02 10:43.