Leser: 1
![]() |
|< 1 2 3 >| | ![]() |
23 Einträge, 3 Seiten |
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
#!/usr/bin/perl use strict; use warnings; sub return_as_ref { my ( %A, %B, %C ); $A{1} = "Hugo"; $B{1} = "Schmitt"; $C{1} = "Vorsitzender"; my $Count = 1; return (\%A,\%B,\%C,$Count); } sub get_as_ref { my ($ref_A, $ref_B, $ref_C)=@_; $ref_A->{1} = "Hugo"; $ref_B->{1} = "Schmitt"; $ref_C->{1} = "Vorsitzender"; my $Count = 1; return $Count; } my $Anzahl; my (%A, %B, %C); my ($ref_A,$ref_B,$ref_C); ($rA,$rB,$rC,$Anzahl)=return_as_ref(); print "$ref_A->{1} $ref_B->{1} $ref_C->{1}\n"; # derefernzieren: %A=%{$ref_A}; %B=%{$ref_B}; %C=%{$ref_C}; print "$A{1} $B{1} $C{1}\n"; %A=(); %B=(); %C=(); $Anzahl=get_as_ref(\%A, \%B, \%C); print "$A{1} $B{1} $C{1}\n";
SchaubFD+2008-02-13 13:40:07--Das ist dann aber eine Lösung die nur über Referenzen läuft, nicht über einen Hash oder ? Ich frage mich immer noch, warum muss man diese unterschiedlichen Typen nutzen, um auf einen Hash zugreifen zu können?
( $a, $b, $c ) = ( 1, 2, 3 ) ;# => $a=1, $b=2 usw.
1 2 3 4 5 6 7
@x = ( x1, x2, x3 ); %y=( y1 => "Y1 ); ( $a, $b, $c ) = ( %y, $x, 1, 2, 3 ); # = ( y1, Y1, x1, x2, x3, 1, 2, 3) # => $a == "y1", $b == "Y1", $c == "x1"
1 2 3
($a,$b,@X,$c) = (%y,$x,1,2,3); # => @X = (x1,x2,x3,1,2,3) , $a = "y1", $b = "Y1", # => insbesondere $c = undef
( @X ) = ( @x )
( @X , @Y ) = ( @x , @y )
( $X_ref , $Y_ref ) = ( \@x , \@y )
1 2
@X = @$X_ref ; kopiert die Werte nach @X um *X = $X_ref ; legt ein Alias an, also \@X==\$X_ref
( *X , *Y , $A )=( \@x , \@y , $a)
( $a , $b , $c , @X ) = ( @X )
%A = ( %A, %B, %C )
SchaubFD+2008-02-13 13:40:07--Auch wenn meine Fragen nervig sind, sind Übergaben von Hashes nur über Referenzen möglich?
\( %a , %b ) == ( \%a , \%b )
SchaubFD+2008-02-13 13:40:07--Auch wenn meine Fragen nervig sind, sind Übergaben von Hashes nur über Referenzen möglich?
1 2 3 4
$A{1} = "Hugo"; $B{1} = "Schmitt"; $C{1} = "Vorsitzender"; my $Count = 1;
1 2 3 4 5 6 7
sub init_personen{ my @personen; $personen[0]{ vorname } = "Hugo"; $personen[0]{ nachname } = "Schmitt"; $personen[0]{ stellung } = "Vorsitzender"; return @personen; }
@copy_personen=init_personen();
1 2 3 4 5 6 7 8 9 10
sub init_personen{ my $p_ref=shift; $p_ref->[0]{ vorname } = "Hugo"; $p_ref->[0]{ nachname } = "Schmitt"; $p_ref->[0]{ stellung } = "Vorsitzender"; } my @alias; init_personen ( \@alias ); print $alias[0]{ nachname }
$$p_ref[0]{ vorname } = "Hugo";
1 2 3 4 5 6 7 8
sub init_personen ( \@ ) { my $p_ref=shift; $p_ref->[0]{ vorname } = "Hugo"; $p_ref->[0]{ nachname } = "Schmitt"; $p_ref->[0]{ stellung } = "Vorsitzender"; } init_personen( my @alias ) ;# Aufruf mit unsichtbarer impliziter Referenzierung
SchaubFD+2008-02-14 07:43:50--Wobei gerade diese für Anfänger eine enorme Erleichterung darstellen. Wenn man Referenzen vermeiden möchte bedeutet das bei komplexen Datenstrukturen (die offensichtlich vorliegen), dass du viele Verrenkungen machen musst, damit die Daten in einer vermeintlich einfachen Form vorliegen. Wie du ja selber und an den langen Erläuterungen gemerkt hast.Ich brauche den Index um später über die Hashes verschiedene Sortierungen durchführen zu können. Mehrdimensionale Hashes oder Kombinationen mit Listen wollte ich als Perl Anfänger vermeiden.
renee+2008-02-14 11:47:12--Ich habe perlreftut mal übersetzt: perlreftut
KurtZ+2008-02-14 11:48:01--Ich stell es mir schwer vor Hashes zu sortieren, verwechselst du da was mit Arrays?
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
sub lese_email
{
my @email;
my $satz;
my $datei="email.csv";
my $buf;
open(femail, "< $datei") or die "Kann Datei <$datei> nicht lesen!";
$satz=0;
$buf=<femail>; # Kopfzeile ignorieren - auslassen
while (<femail>) {
(
$email[$satz]{kostenstelle},
$email[$satz]{kostenstellenname},
$email[$satz]{kostentraeger},
$email[$satz]{kostentraegername},
$email[$satz]{konto},
$email[$satz]{kontoname},
$email[$satz]{email},
$email[$satz]{name}
)=split(';');
chomp($email[$satz]{name});
$satz++;
}
close femail;
return @email;
}
![]() |
|< 1 2 3 >| | ![]() |
23 Einträge, 3 Seiten |