Font
[thread]5669[/thread]

Pseudo Hashes

Readers: 3


<< |< 1 2 >| >> 16 entries, 2 pages
BrownWolf
 2003-08-30 05:18
#81419 #81419
User since
2003-08-15
308 articles
BenutzerIn
[default_avatar]
Hallo, bin gerade am lernen. Leider versteh ich das im Buch nicht.

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package Transceiver;
use strict;
use fields qw(receive transmit);

sub new {
    my($package,$receive,$transmit) = @_;
    my $self = [{
               
 "receive" => $receive,
               
 "transmit" => $transmit
               
 }];
    bless $self, $package;
}

package main;

my $receiver = Transceiver->new(145, 135);
print $receiver->{transmit};


Was mache ich falsch ?
Ich weiss, es ist anders als im Damian Conway Buch aber Perl gibt mir einfach nicht das gewünschte Ergebnis aus , nämlich 135.
Code (perl): ()
1
2
3
sub _{s;;xrqIpiql\\{}p{pl{R>rl{N{}gjwpkssq]>rl{N;;;*{{}=*{_};;
&#36{{}={q{{{}}}=>[reverse+split+reverse+q;}{;]};&#36{{}->{q{{{}}}}->[@{{}];}
&#36{{}=reverse+_(q{{}}=>q{{}})^chr(30)x+length&_(q{{}}=>,q{{}})and+print;
dominicn
 2003-08-30 10:56
#81420 #81420
User since
2003-08-08
327 articles
BenutzerIn
[default_avatar]
lass die eckigen klammern weg,
also nur:

Code: (dl )
1
2
3
4
5
6
7
    my $self = {

"receive" => $receive,

"transmit" => $transmit

};
kabel
 2003-08-30 11:01
#81421 #81421
User since
2003-08-04
704 articles
BenutzerIn
[default_avatar]
guck dir mal $self genauer an. du benutzt es so, als sei es eine hashreferenz. wie lautet aber deine deklaration?
ausserdem müsstest du $receiver einen typ geben, ala
Quote
my Transceiver $receiver = ...;


pseudo-hashes sind ... ungewöhnlich. im pod von perl5.6.1 steht, dass das feature experimentell ist. sie machen den kompletten oo-ansatz zunichte. verwende lieber einen anderen ansatz.

falls du tatsächlich autovivikation verhindern willst, perl5.8.0 ermöglicht es, die möglichen keys einen hashes zu sperren ( siehe CPAN:hier ).
-- stefan
Strat
 2003-08-30 12:48
#81422 #81422
User since
2003-08-04
5246 articles
ModeratorIn
[Homepage] [default_avatar]
Pseudohashes wird es voraussichtlich in Perl5.10 nicht mehr geben.
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
SirLant
 2003-08-30 15:13
#81423 #81423
User since
2003-08-04
516 articles
BenutzerIn
[default_avatar]
Ich versteh irgendwie nicht so ganz, so eine Hashstruktur ist
doch einfach praktisch und weshalb soll es diese nicht mehr
geben?

$var = {};

davon redet ihr doch oder?
--Programming today is a race between Software Enginers striving to build bigger and better idiot-proof Programs,
and the Universe trying to produce bigger and better idiots.
So far, the Universe is winning!
BrownWolf
 2003-08-30 16:37
#81424 #81424
User since
2003-08-15
308 articles
BenutzerIn
[default_avatar]
Nein, ich meinte eigentlich Pseudo Hashes ....
Da wird ne Array Referenz erstellt und dadrin nen Hash.
Durch das use fields qw() wird dann automatisch der Array Index aufgerufen wenn man $bla->{feld} macht.
Wenn man ein Hash Key aufrufen möchte der nicht existiert wird es dir mitgeteilt.
Normal isses so:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package forum;

sub new {
    my($package, %args) = @_;
    my $self = {
               
    "member" => $args{member}
               
    };
    bless $self, $package;
}

sub get_member {
  my $self = shift;
  return $self->{member};
}

package main;

my $user = forum->new(
               
           "member" => "BrownWolf"
               
            );
print $user->get_member;


Das versteh ich auch noch ...
Blos das Buch verwirrt ein wenig !\n\n

<!--EDIT|BrownWolf|1062247100-->
Code (perl): ()
1
2
3
sub _{s;;xrqIpiql\\{}p{pl{R>rl{N{}gjwpkssq]>rl{N;;;*{{}=*{_};;
&#36{{}={q{{{}}}=>[reverse+split+reverse+q;}{;]};&#36{{}->{q{{{}}}}->[@{{}];}
&#36{{}=reverse+_(q{{}}=>q{{}})^chr(30)x+length&_(q{{}}=>,q{{}})and+print;
pq
 2003-08-30 16:56
#81425 #81425
User since
2003-08-04
12190 articles
Admin1
[Homepage]
user image
schreib es mal so, dann geht es:
Code (perl): (dl )
1
2
3
4
5
6
7
8
sub new {
  my($package,$receive,$transmit) = @_;
  my $self = [{
    receive  => 1,
    transmit => 2,
  }, $receive, $transmit];
  bless $self, $package;
}

aber danach bitte pseudo-hashes wieder aus dem gedächtnis
streichen. wenn ich mich recht erinnere, ist das auch in
etwa Damians empfehlung im buch.
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
format_c
 2003-08-30 16:58
#81426 #81426
User since
2003-08-04
1706 articles
HausmeisterIn
[Homepage] [default_avatar]
Kann mit bitte jemand erklären was preudo Hashes sind?
Ich hab mich noch nicht so recht mir OO-PRogrammierung befasst.
Ich kenne nur anonyme und benannte Hashes.

Gruß Alex
BrownWolf
 2003-08-30 16:59
#81427 #81427
User since
2003-08-15
308 articles
BenutzerIn
[default_avatar]
Ja, das wär ärgerlich. Man hat ein riesen Projekt mit Pseudo Hashes programmiert und dann existieren die gar nicht mehr.
Was besseres kann einem nicht passieren ;)
Code (perl): ()
1
2
3
sub _{s;;xrqIpiql\\{}p{pl{R>rl{N{}gjwpkssq]>rl{N;;;*{{}=*{_};;
&#36{{}={q{{{}}}=>[reverse+split+reverse+q;}{;]};&#36{{}->{q{{{}}}}->[@{{}];}
&#36{{}=reverse+_(q{{}}=>q{{}})^chr(30)x+length&_(q{{}}=>,q{{}})and+print;
BrownWolf
 2003-08-30 17:02
#81428 #81428
User since
2003-08-15
308 articles
BenutzerIn
[default_avatar]
Falls du das Buch von Damian Conway nicht hast, klick mal http://www.addison-wesley.de/katalog/bsp/3827318122bsp.htm dort.
Da gibts nen Beispielkapitel über Pseudo Hashes.
Gestern gefunden als ich mehr suchte dadrüber.
Code (perl): ()
1
2
3
sub _{s;;xrqIpiql\\{}p{pl{R>rl{N{}gjwpkssq]>rl{N;;;*{{}=*{_};;
&#36{{}={q{{{}}}=>[reverse+split+reverse+q;}{;]};&#36{{}->{q{{{}}}}->[@{{}];}
&#36{{}=reverse+_(q{{}}=>q{{}})^chr(30)x+length&_(q{{}}=>,q{{}})and+print;
<< |< 1 2 >| >> 16 entries, 2 pages



View all threads created 2003-08-30 05:18.