Thread Zeichen durch Zeichenfolge ersetzen (12 answers)
Opened by PETER_PAN2009 at 2010-06-23 13:45

pq
 2010-06-23 17:13
#138859 #138859
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
2010-06-23T14:46:56 Sven_123
Zur Position der Deklaration muss ich aber sagen, dass ich es viel übersichtlicher find, die gleich am Anfand des Hauptprogramms, oder der Subroutinen/Blöcke zu tätigen, von irgendwelchen Schleifenvariablen mal abgesehn. Die einzigen im Wiki aufgeführten Gründe, die dagegen sprechen sind "schlechter Stil" und "fehlerträchtig", wobei ersteres ziemlich nichtsaussagend und zweites (für mich) auch nicht wirklich nachvollziehbar ist. Eine deklarierte, aber nicht gefüllte Variable wird wohl kaum massig Speicher benötigen, oder?

nun, das nicht, aber wenn du schon den speicher ansprichst, dann geb ich dir dazu auch ein beispiel:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
my %big_hash;
my %big_array;

...
if ($x) {
    # fülle %big_hash und %big_array und mache was damit
    ...
}

if ($y) {
    # mach was ganz anderes
}
# usw usf

# %big_hash und @big_array verbrauchen bis zum scriptende platz

vs.
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
...
if ($x) {
    my %big_hash;
    my %big_array;
    # fülle %big_hash und %big_array und mache was damit
    ...
}
# hier sind %big_hash und @big_array schon nicht mehr vorhanden,
# speicher wird wieder ans script zurückgegeben zur wiederverwendung
# und das ganz automatisch

if ($y) {
    # mach was ganz anderes
}
# usw usf



Quote
Ich glaube, ich würde viel mehr Fehler machen, wenn ich alle Variablen erst beim ersten Auftauchen deklariere, weil mir das wohl andauernd in irgendwelchen Schleifen passieren würde, obwohl ich sie draußen noch brauch.

ehrlich, das würde dir passieren?
1. wieso sollte man variablen nur in einer schleife deklarieren, wenn man sie aussen noch braucht?
2. und wenn es einem passiert, wo ist dann das problem? strict weist einen ja sofort darauf hin und das problem ist gelöst.
ich hab damit jedenfalls keine probleme.

Quote
Zudem verlöre ich bei nem längeren Programm wohl auch den Überblick über benutzte Variablen

ganz im gegenteil, ich würde bei einer armada von deklarationen den überblick verlieren, weil ich gar nicht weiss, wo diese variablen denn alle benutzt werden.

denke mal als *maintainer* des scripts. also entweder als andere person oder als du selbst ein halbes jahr später. du willst das script doch nicht nur einmal schreiben, sondern später auch noch verstehen.

ein weiterer grund:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
sub foo {
    for my $i (0 .. 23) {
        ...
    }
}
...
sub bar {
    for my $i (23 .. 42) {
        
    }
}


würde man das jetzt vorausdeklarieren, wäre das ziemlich sinnfrei, denn die beiden $i haben absolut gar nichts miteinander zu tun.

Quote
2. Ok...die Scripte die ich zur Zeit schreib benutz ich meistens nur in dem Ordner in dem ich mich grad befind und normalerweise öffne ich da grad auch eine Datei zum Lesen und eine zum Schreiben, oder so...ich glaub nicht, dass es da nötig ist, aber wenn es weniger überschaubar wird, hast du wohl recht.


ich sagte ja schon: "mach ich später" zählt nicht.
wann genau willst du es denn machen? ab wann könnte der fehler passieren? ab welcher grösse des scripts? und du glaubst wirklich, dass es einen moment gibt, indem du sagst, ok, jetzt ist der moment gekommen, jetzt suche ich alles nach open ab und füge überall eine fehlerabfrage hinzu?

desweiteren geht es hier nicht um irgendwelche scripte, die du bei dir lokal ein paar mal laufen lässt, sondern du hast ein beispiel für jemand anderes geschrieben. wenn du meinst, ein open kann bei dir nie fehlschlagen, dann gut, aber ich finde halt, in beispielen ist es gerade wichtig.

wie lange programmierst du schon?
ich kann nur sagen, es passiert unzählige male in einer programmiererlaufbahn, dass ein script, dass man mal geschrieben hat, erweitert wird, rumliegt, wieder erweitert wird und dass es an irgendeiner stelle mal nicht mehr hinhaut.
in denm moment ist man wirklich verdammt dankbar, wenn man eine gute fehlerbehandlung hat.

Quote
4. Warum man die 3-Argumente-Form nehmen soll.
Weder im Tutorial im Wiki, noch in meiner Ausgabe der "Einführung in Perl" ist das überhaupt erwähnt und in der perldoc ist die Syntax zwar mit $file, aber nicht begründet warum...

http://reneeb-perlblog.blogspot.com/2009/09/versch...

Quote
5. Dafür schreibt man =>, Leertasten und Returns. Es ist aufjedenfall mehr zu tippen als die Klammerschreibweise, deswegen hatte ich mich über dein Finger wund tippen gewundert und dachte du benutzt vielleicht irgendwelche Makros, wobei das natürlich eh editorabhängig wär. Ist egal...übersichtlicher ist es, geb ich zu. Aber irgendwie häßlich...*g

mit wundtippen meinte ich die ganzen quotes.

und mein vorschlag war, wie ich auch schon sagte, dass ich das untereinanderschreiben lesbarer finde, weil man sofort sieht, was mit was ersetzt wird.
stell dir mal vor, du willst ein ersetzungspaar herausnehmen, erkennst du immer sofort, was zusammengehört?

hier gilt auch wieder: stelle dir nicht nur vor, dass du das programm schreibst, sondern dass du es irgendwann auch mal wieder lesen und verstehen musst.


so, meine meinung, meine erfahrung.
wir sprechen uns einfach mal in 5 jahren wieder, schlage ich vor ;-)
Last edited: 2010-06-23 17:15:03 +0200 (CEST)
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem

View full thread Zeichen durch Zeichenfolge ersetzen