Schrift
[thread]7548[/thread]

Hash als Option missbrauchen (Seite 12)

Leser: 1


<< |< 1 ... 9 10 11 12 >| >> 119 Einträge, 12 Seiten
bloonix
 2005-12-26 01:11
#61069 #61069
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
[quote=steffenw,25.12.2005, 23:59]Du hast einfach nur einen Alias in die Struktur gelegt. Das ist so ähnlich wie in JavaScript with (http://de.selfhtml.org/javascript/sprache/objekte.htm#with).

Das ist nicht nur viel weniger Schreibaufwand und übersichtlicher, sondern steigert die Performence ungemein, weil Perl nicht jedesmal durch die Strukturen tippeln muß.

Das zeigt, daß Du es verstanden hast.[/quote]
Danke Steffen.

Das grundlegende Problem besteht eigentlich darin, dass ich ja in der
new-Methode mit bless nur einen Hash übergeben kann, oder ist es doch
möglich, mehr zu übergeben?

In der new-Methode initialisiere ich verschiedene Statistiken und lege sie in
$self->{i_stats} ab. Die Optionen lege ich in $self->{options} ab. Mir
wäre aber sowas wie

%i_stats,
%param;

bless %i_stats, %param, $class;

Aber bless erwartet einen Hash und danach die Klasse.
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.
steffenw
 2005-12-26 13:43
#61070 #61070
User since
2003-08-15
692 Artikel
BenutzerIn
[Homepage] [default_avatar]
Du kannst nur eine Referenz blessen, von welchem Typ die ist, ist ziemlich egal. Oft nimmt man eine Hashreferenz. An die kann man natürlich die wildesten Datenkonstruktionen anhängen. In denen können auch wieder Objekte vorkommen. Man ist da völlig frei - Perl eben.
Code: (dl )
1
2
3
4
5
6
7
bless %i_stats, %param, $class; # geht natürlich nicht
bless {i_stats => \%i_stats, param => \%param}, $class; # wäre ein Weg
# z.B. Zugriffsmethode
sub getIStats
my $self = shift;
$self->{i_stats} # gibt eine Referenz auf den ursprünglichen Hash %i_stats zurück
}

Wenn Du den Hash %i_stats mit my in der new-Methode deklarierst, dann geht Dir am Ende der Methode new zwar der Name des Hashes verloren aber nicht die Daten, weil diese über die Referenz gehalten werden. Erst wenn letztendlich das Objekt zerstört wird, geht die geblesste Referenz verloren und wenn die Daten keine andere Referenz hält, verschwinden auch diese aus dem Speicher.
$SIG{USER} = sub {love 'Perl' or die};
Dubu
 2005-12-28 00:15
#61071 #61071
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
[quote=esskar,23.12.2005, 13:10][quote=Dubu,23.12.2005, 09:44]Und das "fat comma" (=>) quotet auch den Ausdruck links von sich, sofern er die Form eines Identifiers hat, also kann man auch das 'passwd' ohne Anfuehrungszeichen schreiben. (Die Einschraenkung mit dem Identifier gilt uebrigens auch fuer das Quoten innerhalb von {}.)[/quote]
nicht ganz richtig:
ein identifier (also eine variable) darf nicht mit einer Zahl anfangen (zumindest kein user-spezifischer) ... der Ausdruck links neben dem Komma schon.
[/quote]
*pfft*

Code: (dl )
1
2
3
4
5
6
~> perl -Mstrict -Mwarnings -le 'my %foo = ( abc1 => "hello" ); print "ok"'
ok
~> perl -Mstrict -Mwarnings -le 'my %foo = ( 1abc => "hello" ); print "ok"'
syntax error at -e line 1, near "1abc"
Execution of -e aborted due to compilation errors.
~>



Quote
und von der Schönheit wegen, würde ich meinen, dass wenn man einmal quotet, man immer quotet

ACK
esskar
 2005-12-28 00:36
#61072 #61072
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=Dubu,27.12.2005, 23:15]*pfft*[/quote]
ich sollte echt öfters versuchen meine theorien auch zu beweisen *dumdidum*
Dubu
 2005-12-28 02:01
#61073 #61073
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
[quote=opi,25.12.2005, 23:07]Hashes sind ja was ganz tolles, aber wenn man auf mehrdimensionale
Hashes zugreifen muss, dann kann die Syntax recht unübersichtlich
werden. Gibt es an dieser Stelle übliche Methoden, um die Übersichtlichkeit
zu erhöhen?[/quote]
Ja, lass die Pfeile zwischen den Subskripten weg.

Aus
$stats->{i_stats}->{Processes}->{$pid}->{sProcStartTime}
wird so
$stats->{i_stats}{Processes}{$pid}{sProcStartTime}
. Weniger zu tippen, besser zu lesen (IMHO, zumindest).
Strat
 2005-12-28 14:40
#61074 #61074
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
ich baue mir da gerne shortcuts, z.B.
Code: (dl )
1
2
my $processSc = $stats->{i_stats}->{Processes}->{$pid};
printf "%s => %s\n", $processSc->{sProcStartTime}, $processSc->{sProcEndTime};

wobei ich manchmal sogar eine subroutine schreibt, die mir die werte extrahiert und in kurzform zurueckgibt.
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
pq
 2005-12-30 16:01
#61075 #61075
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=Dubu,28.12.2005, 01:01]Ja, lass die Pfeile zwischen den Subskripten weg.

Aus
$stats->{i_stats}->{Processes}->{$pid}->{sProcStartTime}
wird so
$stats->{i_stats}{Processes}{$pid}{sProcStartTime}
. Weniger zu tippen, besser zu lesen (IMHO, zumindest).[/quote]
ich dagegen finde es schlechter zu lesen und schreibe alle pfeile.
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
pq
 2005-12-30 16:05
#61076 #61076
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=Relais,23.12.2005, 19:21]Ich mache mir noch etwas - vermutlich überflüssige - Sorgen, daß perltidy manchen Code kaputtmachen könnte. (Kenne aber selbst nur das eine an den Haaren herbeigezogenes Beispiel).[/quote]
naja, ich würde mich nicht auf perltidy verlassen.
zwar kann es sogar den code von HTC (code, der selbst code erzeugt),
fehlerfrei umformen, aber es kann passieren, dass einrückungen danach
nicht mehr stimmen, d.h. klammern sind zu tief eingerückt. das will man ja
auch nicht.
ich benutze perltidy aber seit kurzem gerne im editor (vim), um einzelne
paragraphen ggfs. zu säubern. da sehe ich meist gleich, ob da was
schiefgelaufen ist oder nicht.
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
bloonix
 2005-12-31 15:45
#61077 #61077
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
Hallo Leute,

bevor das neue Jahr beginnt, möchte ich mich bei euch allen recht herzlich
bedanken. Für eure Hilfe und für eure Geduld. Das Modul ist jetzt über
CPAN erhältlich und kann sich soweit sehen lassen.

Big Thanks und 'nen guten Rutsch :)

Greez,
opi
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.
<< |< 1 ... 9 10 11 12 >| >> 119 Einträge, 12 Seiten



View all threads created 2005-12-19 02:24.