Font
[thread]8913[/thread]

eine Frage zu objektorientertem Perl (page 2)



<< |< 1 2 3 4 5 ... 15 >| >> 150 entries, 15 pages
ASDS
 2007-04-11 13:11
#75807 #75807
User since
2007-01-29
115 articles
BenutzerIn
[default_avatar]
Hm, eigentlich wollte ich ihm sagen, dass die Liste1 momentan ein leeres Array ist, welches dann später über die Eingabe des Users gefüllt wird.
Ich dachte ich mach das mit ().
Ronnie
 2007-04-11 13:26
#75808 #75808
User since
2003-08-14
2022 articles
BenutzerIn
[default_avatar]
[quote=ASDS,11.04.2007, 11:11]Hm, eigentlich wollte ich ihm sagen, dass die Liste1 momentan ein leeres Array ist, welches dann später über die Eingabe des Users gefüllt wird.
Ich dachte ich mach das mit ().[/quote]
ja, richtig - das ist auch einwandfrei. Die Frage ist was du in deinem Code erreichen willst. Den dort greifst du auf ein Array wie auf einen Hash zu?
renee
 2007-04-11 13:29
#75809 #75809
User since
2003-08-04
14371 articles
ModeratorIn
[Homepage] [default_avatar]
Dazu sollte man noch sagen, dass man auf ein Arrayelement mit eckigen Klammern zugreift:

Code (perl): (dl )
1
2
my @array = qw(1 3 6 8 9);
print $array[2];
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/
Taulmarill
 2007-04-11 13:30
#75810 #75810
User since
2004-02-19
1750 articles
BenutzerIn

user image
es geht hier nicht um die Zuweisung, die ist schon richtig, sondern um folgenden Teil
Code: (dl )
1
2
  $liste1{$eingabe}()
if defined $liste{$eingabe};

Da du hier geschweifte Klammern - also {} - benutzt, geht Perl davon aus, dass liste ein Hash sein soll.
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
ASDS
 2007-04-11 13:35
#75811 #75811
User since
2007-01-29
115 articles
BenutzerIn
[default_avatar]
Jetzt glaub ich häng ich.
Was renee gepostet hat ist mir schon klar.

Was ich mir gedacht hab war folgendes:
Ich sage dem User, bitte gib mir 10 Zahlen bekannt. Diese Zahlen soll er in ein Array Liste1 schreiben um dann damit später eine Referenz zu erstellen um eben den Baum aufzubauen.
Und dieses Array muss ich doch im vorhinein definieren... und da ich noch nicht weiß was drinnen steht, muss ich es als leer definieren.
Code: (dl )
$liste1{$eingabe}
Ich hab jetzt hier die () weggenommen. Aber es geht noch immer nicht.

Hab echt keinen Plan wo ich hier einen Hash aufruf --> ungeplanterweise... oje *g* da hab ich mir wieder was vorgenommen. Aber ich möcht das schaffen... vielen Dank für eure Hilfe
renee
 2007-04-11 13:41
#75812 #75812
User since
2003-08-04
14371 articles
ModeratorIn
[Homepage] [default_avatar]
$liste1{schluessel} ist ein Zugriff auf ein Hashelement. $liste[3] ist ein Zugriff auf ein Arrayelement.

Was Du wohl eher machen willst ist:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!c:/perl
use strict;
use warnings;


my @liste1 = ();
my @liste2 = (4, 28, 9, 100, 12, 84, 10, 11);
new();

sub new{
    print "Bitte geben Sie 10 Zahlen ein: \n";
    my $eingabe = <STDIN>;
    chomp($eingabe);
    @liste1 = split /\s/,$eingabe;
    print "Sie haben folgende Zahlen eingegeben: (@liste1) \n";
}


oder:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!c:/perl
use strict;
use warnings;


my @liste1 = ();
my @liste2 = (4, 28, 9, 100, 12, 84, 10, 11);

new();

sub new{
    for(0..9){
        print "Bitte geben Sie eine Zahlen ein: ";
        my $eingabe = <STDIN>;
        chomp($eingabe);
        push @liste1,$eingabe;
    }
    print "Sie haben folgende Zahlen eingegeben: (@liste1) \n";
}
\n\n

<!--EDIT|renee|1176284567-->
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/
renee
 2007-04-11 13:44
#75813 #75813
User since
2003-08-04
14371 articles
ModeratorIn
[Homepage] [default_avatar]
Hier steckt auch noch ein Fehler drin:
Code: (dl )
my @liste2 = 4, 28, 9, 100, 12, 84, 10, 11;


Da fehlen noch die runden Klammern:
Code: (dl )
my @liste2 = (4, 28, 9, 100, 12, 84, 10, 11);
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/
vayu
 2007-04-11 13:44
#75814 #75814
User since
2005-01-13
782 articles
BenutzerIn
[default_avatar]
der aufruf

$liste1{$eingabe}

versucht auf einen Hash zuzugreifen ... @liste1 ist aber ein array.

wenn du die zuweisung anhand der in einer Reihe eingebenen Zahlen machen möchtest mach es so:

Code: (dl )
1
2
3
my $eingabe = "1 2 4 5 3 6";
chomp($eingabe);
my @liste1 = split " ", $eingabe;


edit: mist renee war schneller und ausführlicher :P

mir kam n telefonat dazwischen.\n\n

<!--EDIT|vayu|1176284776-->
ASDS
 2007-04-11 13:46
#75815 #75815
User since
2007-01-29
115 articles
BenutzerIn
[default_avatar]
[quote=Taulmarill,11.04.2007, 11:30]es geht hier nicht um die Zuweisung, die ist schon richtig, sondern um folgenden Teil
Code: (dl )
1
2
  $liste1{$eingabe}()
   if defined $liste{$eingabe};

Da du hier geschweifte Klammern - also {} - benutzt, geht Perl davon aus, dass liste ein Hash sein soll.[/quote]
Ahhh, dein Beitrag hab ich nicht gesehen

@renee, ich guck mir das was du geschrieben hast gleich an, wenn ich wieder daheim bin. Jetzt muss ich aber schnell wohin, bin eh schon spät dran.
ASDS
 2007-04-12 11:58
#75816 #75816
User since
2007-01-29
115 articles
BenutzerIn
[default_avatar]
Vielen Dank für eure HIlfe

Was sagt ihr dazu:
Code: (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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
my @liste1 = ();
my @liste2 = (4, 28, 9, 100, 12, 84, 10, 11);

new();

sub knot { return ( { 'zahl' => $[0],
'linksweg' => undef,
'rechtsweg' => undef } );

sub new{
############################
#Eingabe der ersten 10 Zahlen
############################
....
######################
# Erstellen des Trees
######################

my $ref_liste1 = shift;
my $zahl = shift(@$ref_liste1); #Wurzel wird mit erster Zahl der Liste1 erstellt.
my $ref_wurzel = knot($zahl);

for $zahl (@$ref_liste1) {
my $refvalue = $ref_wurzel;

if ($zahl)
{
while {
############################
#Beginn des Vergleichs

if($zahl < $$refvalue{'zahl'}) {
if(defined($$refvalue{'linksweg'}))
{
$refvalue = $$refvalue{'linksweg'};
}
else {
$$refvalue{'linksweg'} = knot($zahl);
last; #Ende
}
}
#######
#wenns Links nicht mehr weiter geht, geh rechts weiter
else {
if(defined($$refvalue{'rechtsweg'}))
{
$refvalue = $$refvalue{'rechtsweg'};
}
else {
$$refvalue{'rechtsweg'} = knot($zahl);
last;
}
}

}
return($ref wurzel);
}
}

Leider hat sich auch hier schon wieder ein Fehler eingeschlichten. Irgendwas passt ihm hier nicht:
Code: (dl )
'zahl' => $[0],
==> er schreibt Number Found where Operator expected.
Was hab ichn hier schon wieder für nen Mist gebaut

und gibt es eine andere möglichkeit außer den salat von While und else
<< |< 1 2 3 4 5 ... 15 >| >> 150 entries, 15 pages



View all threads created 2007-04-10 15:14.