Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]5831[/thread]

Verarscht mich Perl?



<< >> 9 Einträge, 1 Seite
[E|B]
 2003-10-17 20:24
#64567 #64567
User since
2003-08-08
2561 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Das frag ich mich so langsam.
Ich habe eine ganz normale Subroutine. In dieser Sub werden Platzhalter aus der Variable $test ersetzt. Es sollen insgesamt ca. 20 RegExps sein, wobei jeder einen Platzhalter ersetzt.
Wenn ich jetzt alle RegExps auf die Variable loslasse, lädt sich der Browser tot. Picke ich aber, egal welche, 15 RegExp's heraus und lasse die anderen stehen, funktioniert alles. Es ist egal welche RegExp's ich stehen lasse, die Endlosschleife tritt nur auf, wenn mehr als 5 RegExp's in der Sub sind.
Spinn ich oder was ich falsch?!\n\n

<!--EDIT|[E|B]|1066407963-->
Gruß, Erik!

s))91\&\/\^z->sub{}\(\@new\)=>69\&\/\^z->sub{}\(\@new\)=>124\&\/\^z->sub{}\(\@new\)=>);
$_.=qq~66\&\/\^z->sub{}\(\@new\)=>93~;for(@_=split(/\&\/\^z->sub{}\(\@new\)=>/)){print chr;}

It's not a bug, it's a feature! - [CGI-World.de]
havi
 2003-10-17 20:28
#64568 #64568
User since
2003-08-04
2036 Artikel
BenutzerIn
[Homepage]
user image
Poste doch mal den Code!
[E|B]
 2003-10-17 20:33
#64569 #64569
User since
2003-08-08
2561 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$header =~ s/<_CGI>/$cgi/gi;
$header =~ s/<_GRAFIK>/$graphics/gi;
$header =~ s/<_FONT>/$font/gi;
$header =~ s/<_BFC>/$bodyfontcolor/gi;
$header =~ s/<_BGC>/$bgcolor/gi;
$header =~ s/<_AL>/$alink/gi;
$header =~ s/<_AV>/$avisited/gi;
$header =~ s/<_AA>/$aactive/gi;
$header =~ s/<_AH>/$ahover/gi;
$header =~ s/<_SBGC>/$selectbgc/gi;
$header =~ s/<_SFONT>/$selectfont/gi;
$header =~ s/<_SS>/$selectsize/gi;
$header =~ s/<_TABGC>/$textareabgc/gi;
$header =~ s/<_TAFONT>/$textareafont/gi;
$header =~ s/<_TAS>/$textareasize/gi;
$header =~ s/<_BBGC>/$buttonbgc/gi;
$header =~ s/<_BFONT>/$buttonfont/gi;
$header =~ s/<_BS>/$buttonsize/gi;
$header =~ s/<_TFONT>/$textfont/gi;
$header =~ s/<_TBGC>/$textbgc/gi;
$header =~ s/<_TS>/$textsize/gi;


Die Variablen werden aus einer Datei eingebunden.
Der Inhalt der Datei:

Code: (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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
$font = "Arial, Verdana, Lucida, Helvetica, Sans-Serif";
$bodyfontcolor = "000000";
$bgcolor = "DCDCDC";

$selectbgc = "D7D7D7";
$selectfont = "Arial, Verdana, Lucida, Helvetica, Sans-Serif";
$selectsize = "10";

$textareabgc = "F0F0F0";
$textareafont = "Arial, Verdana, Lucida, Helvetica, Sans-Serif";
$textareasize = "12";

$buttonbgc = "DEDFDF";
$buttonfont = "Verdana, Arial";
$buttonsize = "10";

$textfont = "Arial, Verdana, Lucida, Helvetica, Sans-Serif";
$textbgc = "F5F5F5";
$textsize = "11";

$alink = "F8783A";
$avisited = "BB3C04";
$aactive = "F8784A";
$ahover = "F8784A";

$navitablealign = "center";
$navitablewidth = "60\%";
$navitablepadding = "2";
$navitablespacing = "0";
$navitablebordercolor = "B4B4B4";
$navitablebordersize = "1";
$navitablebgcolor = "EBEBEB";

$maintablealign = "center";
$maintablewidth = "60\%";
$maintablepadding = "2";
$maintablespacing = "0";
$maintablebordercolor = "B4B4B4";
$maintablebordersize = "1";

$contenttabledark = "B4B4B4";
$contenttableborder = "B4B4B4";
$contenttablebordersize = "1";
$contenttablebgc = "EBEBEB";

1;
Gruß, Erik!

s))91\&\/\^z->sub{}\(\@new\)=>69\&\/\^z->sub{}\(\@new\)=>124\&\/\^z->sub{}\(\@new\)=>);
$_.=qq~66\&\/\^z->sub{}\(\@new\)=>93~;for(@_=split(/\&\/\^z->sub{}\(\@new\)=>/)){print chr;}

It's not a bug, it's a feature! - [CGI-World.de]
Strat
 2003-10-17 20:55
#64570 #64570
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
was passiert denn, wenn du es in der shell ausfuehrst?
bei CGI kannst du die cgi-parameter einfach als parameter uebergeben, z.B.

perl script.pl action=xyz param2=value2 param3=value3 ....

ich vermute mal, dass da warnungen (uninitialized value?) kommen, und der browser dadurch so ewig braucht...\n\n

<!--EDIT|Strat|1066409745-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
Strat
 2003-10-17 20:58
#64571 #64571
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
nebenbei: ich als fauler mensch wuerde sowas ueber einen hash machen:
Code: (dl )
$header =~ s/<_(.+?)>/ exists $config{lc($1)} ? $config{lc($1)} : $1/gies;

und die Optionen in einem Hash namens %config abspeichern...
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
[E|B]
 2003-10-18 17:37
#64572 #64572
User since
2003-08-08
2561 Artikel
HausmeisterIn
[Homepage] [default_avatar]
[quote=Strat,17.10.2003, 18:58]nebenbei: ich als fauler mensch wuerde sowas ueber einen hash machen[/quote]
Habe auch schon mit dem Gedanken gespielt. Für mich ist letztendlich die andere Lösung effizienter, weil ich später noch andere Funktionen einbauen will.
Es hat wirklich an den uninitialized values gelegen! "use warnings;" hat in meinem CGI Scripts alles aufgehängt. Was kann ich nun machen? Kann ich warnings nun gar nicht mehr einbinden?
Gruß, Erik!

s))91\&\/\^z->sub{}\(\@new\)=>69\&\/\^z->sub{}\(\@new\)=>124\&\/\^z->sub{}\(\@new\)=>);
$_.=qq~66\&\/\^z->sub{}\(\@new\)=>93~;for(@_=split(/\&\/\^z->sub{}\(\@new\)=>/)){print chr;}

It's not a bug, it's a feature! - [CGI-World.de]
betterworld
 2003-10-18 18:40
#64573 #64573
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
Man muss einige Zusatztests einbauen, damit ein Script mit warnings funktioniert. Aus
Code: (dl )
$x *= 5;
wird zum Beispiel
Code: (dl )
$x *= 5 if defined $x;
. Das hat denselben Effekt, gibt aber kein warning. Das ist etwas nervig, aber man findet Fehler wirklich leichter.
Strat
 2003-10-19 03:20
#64574 #64574
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
Entweder man verwendet undef als Wert, dann muss man ueberall darauf achten, oder man vermeidet undef, dann muss man es nur bei der Initialisierung behandeln...

wenn z.B. eine Variable eine Zahl ist, verwende ich gerne "automatische" Initialisierungen wie:
Code: (dl )
my $x = $irgendwas || 0;

oder bei Hashes:
Code: (dl )
my %hash = ( x => 1, y => 2, z => 3, @_ );

wenn da z.B. ueber @_ kein y reinkommt, wird der Standardwert von 2 verwendet; wenn doch, wird die 2 ueberschrieben...

es gibt noch die Moeglichkeit, im aktuellen Block mit no warnings; die Warnungen zu deaktivieren; sowas sollte man jedoch nur dann machen, wenn es keinen vernuenftigen anderen Weg gibt (also im Grunde nie)\n\n

<!--EDIT|Strat|1066519399-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
Crian
 2003-10-20 18:37
#64575 #64575
User since
2003-08-04
5871 Artikel
ModeratorIn
[Homepage]
user image
Sowas:

[E|B
,17.10.2003, 18:33]
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$header =~ s/<_CGI>/$cgi/gi;
$header =~ s/<_GRAFIK>/$graphics/gi;
$header =~ s/<_FONT>/$font/gi;
$header =~ s/<_BFC>/$bodyfontcolor/gi;
$header =~ s/<_BGC>/$bgcolor/gi;
$header =~ s/<_AL>/$alink/gi;
$header =~ s/<_AV>/$avisited/gi;
$header =~ s/<_AA>/$aactive/gi;
$header =~ s/<_AH>/$ahover/gi;
$header =~ s/<_SBGC>/$selectbgc/gi;
$header =~ s/<_SFONT>/$selectfont/gi;
$header =~ s/<_SS>/$selectsize/gi;
$header =~ s/<_TABGC>/$textareabgc/gi;
$header =~ s/<_TAFONT>/$textareafont/gi;
$header =~ s/<_TAS>/$textareasize/gi;
$header =~ s/<_BBGC>/$buttonbgc/gi;
$header =~ s/<_BFONT>/$buttonfont/gi;
$header =~ s/<_BS>/$buttonsize/gi;
$header =~ s/<_TFONT>/$textfont/gi;
$header =~ s/<_TBGC>/$textbgc/gi;
$header =~ s/<_TS>/$textsize/gi;

würd ich immer lieber so schreiben:

Code: (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
$_ = $header;

s/<_CGI>/$cgi/gi;
s/<_GRAFIK>/$graphics/gi;
s/<_FONT>/$font/gi;
s/<_BFC>/$bodyfontcolor/gi;
s/<_BGC>/$bgcolor/gi;
s/<_AL>/$alink/gi;
s/<_AV>/$avisited/gi;
s/<_AA>/$aactive/gi;
s/<_AH>/$ahover/gi;
s/<_SBGC>/$selectbgc/gi;
s/<_SFONT>/$selectfont/gi;
s/<_SS>/$selectsize/gi;
s/<_TABGC>/$textareabgc/gi;
s/<_TAFONT>/$textareafont/gi;
s/<_TAS>/$textareasize/gi;
s/<_BBGC>/$buttonbgc/gi;
s/<_BFONT>/$buttonfont/gi;
s/<_BS>/$buttonsize/gi;
s/<_TFONT>/$textfont/gi;
s/<_TBGC>/$textbgc/gi;
s/<_TS>/$textsize/gi;

$header = $_;


Edit: Übrigends macht die Verwendung externer Variablen die RE's sehr sehr langsam. Wenns also eine zeitkritische Stelle ist, kopier den Inhalt dort lieber direkt rein.

Edit2: Könnte sein, dass das aber nur für die Verwendung im vorderen Teil galt, es für Deinen Code also gar nicht zutrifft.\n\n

<!--EDIT|Crian|1066660878-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
<< >> 9 Einträge, 1 Seite



View all threads created 2003-10-17 20:24.