Schrift
[thread]11237[/thread]

static variable

Leser: 1


<< |< 1 2 3 >| >> 25 Einträge, 3 Seiten
#Kein Kommentar
 2008-02-03 18:46
#105517 #105517
User since
2007-06-09
575 Artikel
HausmeisterIn
[default_avatar]
hallo,

ich suche eine möglichkkeit in Perl statische variablen zu erzeugen, so wie in PHP mit
der funktionen static.

sowas funktioniert zwar:
Code (perl): (dl )
1
2
3
4
5
6
7
8
foreach (1..5){
    hallo ();
}

sub hallo {
        $ab++;
        print $ab, "\n";
}

ist aber nicht use strict - konform.

gibst da eine möglichkeit?
Gerade weil wir alle in einem Boot sitzen, sollten wir froh sein, dass nicht alle auf unserer Seite sind
styx-cc
 2008-02-03 18:50
#105518 #105518
User since
2006-05-20
533 Artikel
BenutzerIn

user image
Deklariere $ab global, in deinem Beispiel ist $ab auch global
Pörl.
#Kein Kommentar
 2008-02-03 18:54
#105519 #105519
User since
2007-06-09
575 Artikel
HausmeisterIn
[default_avatar]
ja, gut aber dann habe ich lauter globale variablen... ich wollte es aber eigentlich
so haben, dass diese variablen nur in der funktion hallo () verfügbar
sind.

aber ich merke gerade, dass das eigentlich ziemlich schlechter programmierstil
ist (wie so vieles in PHP ;-). ich glaube es ist besser, wenn ich lieber die objektorientierte programmierung nehme... es hätte mich nur interessiert, ob sowas in Perl möglich wäre.
Gerade weil wir alle in einem Boot sitzen, sollten wir froh sein, dass nicht alle auf unserer Seite sind
Ronnie
 2008-02-03 18:55
#105520 #105520
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
Warum? Allgemein erwartet man Seiteneffekt-freie Funktionen. Macht die Sache wartbarer. Gibt gute Gründe auch gelegentlich anders vorzugehen, aber wofür brauchst du es?!
Ronnie
 2008-02-03 18:56
#105521 #105521
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
#Kein Kommentar+2008-02-03 17:54:35--
ja, gut aber dann habe ich lauter globale variablen... ich wollte es aber eigentlich
so haben, dass diese variablen nur in der funktion hallo () verfügbar
sind.

Dann könnte evtl. ein Closure eine vernünftige Lösung sein - hängt halt davon ab was du genau damit anstellen wolltest.

Gruß,
Ronnie
styx-cc
 2008-02-03 18:57
#105522 #105522
User since
2006-05-20
533 Artikel
BenutzerIn

user image
Hab mal ins PHP-Manual geschaut, direkt so etwas duerfte es in Perl nicht geben
Pörl.
renee
 2008-02-03 19:17
#105523 #105523
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
In Perl 5.10 gibt es "state"-Variablen und bei Perl-Versionen kleiner 5.10 kann man es so machen:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/usr/bin/perl

use strict;
use warnings;

{
    my $i;
    sub incrementor{
        print ++$i,"\n";
    }
}

incrementor();
incrementor();
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/
#Kein Kommentar
 2008-02-03 19:50
#105525 #105525
User since
2007-06-09
575 Artikel
HausmeisterIn
[default_avatar]
danke für die antworten!

aber ihr habt recht, sauberes programmieren fördert es nicht...
Gerade weil wir alle in einem Boot sitzen, sollten wir froh sein, dass nicht alle auf unserer Seite sind
betterworld
 2008-02-03 21:58
#105527 #105527
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
Also mit our() wuerde das (ab 5.6 oder so) auch gehen. Der Nachteil waere dann nur, dass man nicht in zwei verschiedenen Funktionen im selben Paket eine Variable vom gleichen Namen nehmen darf.
betterworld
 2008-02-03 22:04
#105528 #105528
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
Und nur weil es so schoen kryptisch aussieht, hier noch eine weitere Loesung:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
use strict;
use warnings;

foreach (1..5){
    hallo ();
}

sub hallo {
        my $ab;
        sub counter {
            no warnings;
            return ++$ab;
        }
        print counter(), "\n";
}


Das nutzt ein "Feature" aus, was die meiste Zeit eigentlich nur stoerend auffaellt, und zwar, dass my-Variablen in inneren Funktionen zu so einer Art State-Variablen werden.
<< |< 1 2 3 >| >> 25 Einträge, 3 Seiten



View all threads created 2008-02-03 18:46.