Schrift
[thread]6272[/thread]

strict falsch verstanden...



<< |< 1 2 >| >> 13 Einträge, 2 Seiten
Gast Gast
 2004-05-19 01:38
#82529 #82529
so macht man ein skript strict-fest:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
     46 use vars qw/
47 $DIR $PROG $Extension
48 $Debug $ShowSteps
49 $DebugResetDone $DNSLookupAlreadyDone
50 $RunAsCli $UpdateFor $HeaderHTTPComplete $HeaderHTMLComplete
51 $LastLine $LastLineNumber $LastLineOffset $LastLineChecksum $LastUpdate
52 $lowerval
53 $PluginMode
54 $TotalUnique $TotalVisits $TotalHostsKnown $TotalHostsUnknown
55 $TotalPages $TotalHits $TotalBytes
56 $TotalNotViewedPages $TotalNotViewedHits $TotalNotViewedBytes
57 $TotalEntries $TotalExits $TotalBytesPages $TotalDifferentPages
58 $TotalKeyphrases $TotalKeywords $TotalDifferentKeyphrases $TotalDifferentKeywords
59 $TotalSearchEnginesPages $TotalSearchEnginesHits $TotalRefererPages $TotalRefererHits $TotalDifferentSea
rchEngines $TotalDifferentReferer
60 $FrameName $Center $FileConfig $FileSuffix $Host $DayRequired $MonthRequired $YearRequired
61 $QueryString $SiteConfig $StaticLinks $PageCode $PageDir $PerlParsingFormat
62 $SiteToAnalyze $SiteToAnalyzeWithoutwww $UserAgent
63 $pos_vh $pos_host $pos_logname $pos_date $pos_tz $pos_method $pos_url $pos_code $pos_size
64 $pos_referer $pos_agent $pos_query $pos_gzipin $pos_gzipout $pos_compratio
65 $pos_cluster $pos_emails $pos_emailr $pos_hostr
66 /;


stammt aus einem paket zur analyse von log-dateien (und das ist nur der anfang ...)
zum glück konnte ich das noch deinstallieren, bevor mir schlecht wurde ... :(
ptk
 2004-05-19 12:28
#82530 #82530
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Das ist noch gar nichts. Ich habe ein Programm geschrieben, welches ca. 500 globale mit "use vars" deklarierte Variablen hat. Das sind soviele, dass es eine Extra-Datei dafuer gibt :-)
Taulmarill
 2004-05-19 15:52
#82531 #82531
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
globale variablen sind böse .... meistens.
eine stärke von perl ist es, jedem programmierer die freiheit zu lassen, selbst zu entscheiden, wie er eine funktion implementieren will. es gibt keine "erzieherischen massnahmen" in der syntax.
manche betrachten das als schwäche, solche sollten sich näher mit der materie ausseinandersetzen, falls man dann zu dem schluss kommt, dass man das immer noch nicht will, dann sollte man sich an sprachen wie python oder java wenden.

worauf will ich jetzt hinaus???

nun, ganz einfach. jeder, der die freiheiten von perl nutzt (und das tut jeder, der perl programmiert) sollte auch anderen die möglichkeit zugestehen, sich in den selben freiheiten zu bewegen.
es gibt immer mehr als eine richtige lösung eines problems! code kann noch so gut geschrieben sein, wenn er die problemstellung nicht zur zufriedenheit löst ist er schlecht, so einfach ist das.
umgekehrt bedeutet das auch, dass ein programm, welches eine problemstellung zur zufriedenheit löst, nicht falsch sein kann! natürlich gibt es verschiedene stile zu programmieren. aber ein programm als schlecht zu bewerten, nur weil es globale variablen (egal wie viele) benutzt ist gefährlich.
perl lässt solches programmieren zu! solange das programm funktioniert gibt es keinen grund hier etwas zu kritisieren!

schlechter stil (wenn es so was gibt) sieht ganz anders aus. glaub mir, ich kenn da leute .... ;)\n\n

<!--EDIT|Taulmarill|1084967629-->
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
kabel
 2004-05-19 19:31
#82532 #82532
User since
2003-08-04
704 Artikel
BenutzerIn
[default_avatar]
whoa =)
ihr wollt mich aber etzertla net auf die schippe nehmen?
-- stefan
Crian
 2004-05-24 16:17
#82533 #82533
User since
2003-08-04
5870 Artikel
ModeratorIn
[Homepage]
user image
Wenn ich so ein Programm warten müsste, würd ich es umarbeiten. Aber wenn es zur Zufriedenheit läuft, warum nicht. Wenn ich aber Arbeitgeber wäre, würde ich meine Leute zu vernünftigen Namensräumen "zwingen", selbst in C++ habe ich gerne zusätzliche Namensräume angelegt, damit sich nicht alles so vermischt. Aber da hat halt jeder seine Vorlieben.

Ich mag es, wenn Funktionen klar definierte Schnittstellen haben. Und die sind nicht gegeben, wenn sie globale Variablen verwenden. (Oder man muss sie dann erst durch Kommentare verdeutlichen.)

Wenigstens sollte man bei globale Variablen großklein und lokale ganz klein schreiben, dann hat man noch eine Chance, durch den Wust durchzusteigen. oder einfach alles global, dann weiß man auch, woran man ist.

Aber dann fängt der Spaß richtig an, wenn man Fehler sucht...
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
Taulmarill
 2004-05-24 16:51
#82534 #82534
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
@kabel: was bitte soll "etzertla" bedeuten?

@crain: änlich sehe ich das auch. klar definierte schnittstellen sind unerlässlich, wenn man mit mehreren personen an einem programm arbeitet.
wenn man module schreibt sowieso.

es kommt halt drauf an, ob man nur einen "diry hack" will, oder ein ausgewachsenes programm.
ich finde halt schön, dass man mit perl kleine schmutzige einzeiler genau so gut wie strukturierte, grosse programme schreiben kann. meiner meinung nach ist das einer der grössten stärken von perl.
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
Crian
 2004-05-24 17:09
#82535 #82535
User since
2003-08-04
5870 Artikel
ModeratorIn
[Homepage]
user image
Ja, das sehe ich auch so.
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
Alex
 2004-05-24 18:31
#82536 #82536
User since
2003-12-04
285 Artikel
BenutzerIn
[default_avatar]
[quote=Taulmarill,24.05.2004, 14:51]@kabel: was bitte soll "etzertla" bedeuten?[/quote]
"etzertla" ist ein gesprochenes Wort, dass es (auch) im schwäbischen gibt. Es ist als (verwunderter) Ausruf mit der hochdeutschen Bedeutung in etwa wie " Jetzt aber!" zu verstehen. ;)
<center>Schönen Gruß, Alex
Mit dem Computer geht alles viel schneller - es dauert nur ein bißchen länger!
</center>
kabel
 2004-05-24 19:50
#82537 #82537
User since
2003-08-04
704 Artikel
BenutzerIn
[default_avatar]
[quote=Taulmarill,24.05.2004, 14:51](1) ich finde halt schön, dass man mit perl kleine schmutzige einzeiler genau so gut wie strukturierte, grosse programme schreiben kann.

(2) meiner meinung nach ist das einer der grössten stärken von perl.[/quote]

(1) das betreffende skript hat ~10000 zeilen.

hab mir grad nochmal die sourcen gezogen. auf den ersten blick verträgt es eine TT/HTML::Template-kur (ne doppelte). die subroutinen sind dokumentiert, auch was das benutzen globaler variablen angeht -- scheint aber nicht konsistent zu sein, jedenfalls war die doku bei der zweiten sub, die ich anschaute, falsch. kontrollfluss ist nicht erkennbar, wird anscheinend von den ganzen subroutinen/variablendeklarationen verdeckt.

(2) solange du auch die schwächen kennst...

/me kennt spaghetti-code, hab schon selbst so was geschrieben, und ich bin NICHT stolz drauf. wie Crian bereits bemerkte, ist es ziemlich schwierig, dann noch durchzusteigen, erweitern ist nur ne qual. vom effekt auf das ego ganz zu schweigen :(

deswegen auch mein aufschrei, wenn ich sowas sehe.

@Alex: die übersetzung passt, nur aus schwaben komm ich net :D
-- stefan
Strat
 2004-05-25 10:38
#82538 #82538
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
@kabel: sowas ist doch schoen! da hat ein anderer programmierer dafuer gesorgt, dass man selbst ganz viel geld mit dem script verdienen kann und noch dazu zeigen kann, wie gut man ist :-))

Ich kam auch mal als troubleshooter zu einem kunden, der etwa 14.000 zeilen wuesten perl-code hatte (teilweise noch im perl4-stil geschrieben), der andauernd mit out-of-memory-error rausflog (bei der speicherfragmentierung war bei so 1.4 GB RAM schluss). Die Ideen hinter dem Programm waren zwar grundsaetzlich gut, aber derjenige, der es geschrieben hatte, hat dabei erst perl gelernt und konnte sich leider nie zeit fuer ein redesign nehmen. Ich brachte es zunaechst irgendwie so weit, dass es durchlief, und konnte es danach komplett neu schreiben mit dem effekt, dass die laufzeit von etwa 34 stunden auf 0.5 stunden sank, und der speicherbedarf auf knapp 500 MB

Ein Beispiel: wie uebergebe ich einen grossen Hash an eine Subroutine?
Code: (dl )
1
2
3
4
5
6
my @temp = [ %riesigerhash ];
&Package'Subroutine(*temp);
#...
sub Subroutine {
local (*temp) = @_;
}

oder so aehnlich...
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
<< |< 1 2 >| >> 13 Einträge, 2 Seiten



View all threads created 2004-05-19 01:38.