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

Hashfunktion: eigene



<< >> 9 Einträge, 1 Seite
betterworld
 2003-10-13 22:35
#62956 #62956
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
Hallo,

gibt es eigentlich die Moeglichkeit, in Perl einem Hash eine besondere ``Vergleichsfunktion'' fuer seine Keys mitzugeben? Sodass man zB \$hash{case} == \$hash{CASE} erreichen koennte?

Danke,
betterworld
format_c
 2003-10-13 22:45
#62957 #62957
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Irgendwie raff ich nicht wass du genau willst?
Wenn dann if ($hash{case} == $hash{CASE}) {... aber ist wohl nicht das was du wissen willst.

Kannst du dein Problem bitte etwas genauer beschreiben?
Gruß Alex
pq
 2003-10-13 22:46
#62958 #62958
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
in damians oo perl wird das beschrieben: "case-insensitive hashes".
mehr kann ich dir nicht anbieten, den source-code
kannst du dir hier herunterladen.
dateiname insensitive.pl
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
betterworld
 2003-10-13 23:03
#62959 #62959
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
Danke, pq, werd ich gleich mal angucken.

format_c: Nehmen wir an, wir haben eine Passwortabfrage:
Code: (dl )
1
2
3
4
my $username = &eingegeben();
my $passwort = &eingegeben();
my $user = $users{$username};
if($user && $user->testpw($passwort)) { &login(); } else { &fehler(); }


Man beachte Zeile 3, die bewirkt, dass bei Usernamen die Gross/Kleinschreibung unterschieden wird. Bisher habe ich das Problem immer geloest, indem ich statt $username geschrieben habe lc $username. Das ist sozusagen Eindeutigmachung des Usernames. Viel geiler faender ich es aber, wenn Perl's Hash-Algorithmus (der ja eigentlich gar nicht so heissen darf, aber das ist eine andere Geschichte, die ein andern Mal erzaehlt werden soll) gar nicht zwischen Gross- und Kleinschreibung unterscheiden wuerde.
In C++ mit der STL zum Beispiel geht das. Da kann man einfach eine Vergleichsfunktion angeben. Perl verwendet hierzu ausschliesslich `eq'.
Hoffentlich habe ich nun das Problem etwas besser beschrieben.
Strat
 2003-10-13 23:04
#62960 #62960
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
man koennte es sich mit CPAN:Tie::Hash recht einfach basteln...
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
betterworld
 2003-10-13 23:37
#62961 #62961
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
[quote=Strat,13.10.2003, 21:04]man koennte es sich mit CPAN:Tie::Hash recht einfach basteln...[/quote]
Danke, das sieht ja ganz vielversprechend aus.
Mir scheint, dass Damian da in ihrem Insensitive::Hash auch so etwas aehnliches macht. Jedenfalls steht da irgendwo tie. Ich glaub ich les jetzt erstmal irgendwo, was dieses Schluesselwort macht, denn es scheint etwas Faszinierendes zu sein.
Strat
 2003-10-14 03:03
#62962 #62962
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
Damian ist keine Sie, sondern ein Er ;-)

tie ist recht nett, aber halt auch recht langsam. Schoen ist halt daran, dass sich die getiete Variable nach aussen wie eine normale Variable verhaelt, waehrend da hinter den Kulissen teilweise ganz schoen was gemacht werden kann, z.B. CPAN:Tie::File usw...
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
betterworld
 2003-10-14 17:25
#62963 #62963
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
[quote=Strat,14.10.2003, 01:03]Damian ist keine Sie, sondern ein Er ;-)

sie ist recht nett[/quote]
Echt jetzt? Ich dachte immer, es waere eine Sie... Ist das nicht ein Frauenname?
Wer ist nett? Damian? ;-)

Hmm, ich werde mal schauen, ob tie fuer mich schnell genug ist. Wie es scheint, laesst sich ein case-insensitive-Hash damit recht einfach programmieren, eben indem man intern einen Hash verwaltet, wo man die Schluessel uber 'lc' errechnet.
Strat
 2003-10-14 18:04
#62964 #62964
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
willkommen im internet, dort, wo die maenner noch maenner sind... und die frauen auch :-))

damian ist auf englisch ein eindeutiger maennername; und da er einen bart traegt, ist die chance, dass er auch ein mann ist, recht gross.\n\n

<!--EDIT|Strat|1066140371-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
<< >> 9 Einträge, 1 Seite



View all threads created 2003-10-13 22:35.