Schrift
[thread]8018[/thread]

funktion und referenz

Leser: 1


<< |< 1 2 >| >> 16 Einträge, 2 Seiten
shaihulud
 2006-05-24 18:26
#66573 #66573
User since
2006-04-12
76 Artikel
BenutzerIn
[default_avatar]
Hauptprogramm:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
  my %hash;
 &Doc_Rep_info(\%hash);

 #einfacher test  auf inhalt

 foreach my $ele ( keys(%hash)){
   print "dokuart:"."$ele\n";
     foreach my $ele2 (keys %{ $hash{$ele} }){
       print "$ele2\n";
       print "$hash{$ele}{$ele2}\n";
     }
   }
 }


wie muss ich in diesem code referenzieren/dereferenzieren um den hash aus dem hauptrogram zu füllen?
Nebenprogramm:
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
# Doc_Rep_info speichert alle benötigten Informationen zur dokuart in einen hash

sub Doc_Rep_info{
open(DATEI, "<./Konfigurationsdaten/20060310.DOCFIELD") || die "Fehler beim öffnen von Datei $datei - $!";
my @Zeilen = <DATEI>;
close(DATEI);
my %hash2;                               <---betreffende Zeile
#my $hash2 = shift; etc ????
my $old_doc;
my %hash;

 #Gehe Zeilen der Docfielddatei durch
 foreach (@Zeilen){
     if (/(\w+)\;(\d+)\;(\d+)/){
       $dokuart =  $1;
       $zahl1 =  $2;
       $zahl2 =  $3;
       if(!defined $old_doc){
         $old_doc = $dokuart;
       }
       #wenn dokuart nicht mehr die gleiche wie im letzten durchlauf der froeach-
       #schleife speichere den hash in hash2 mit key alte dokuart.
       if($dokuart!=$old_doc){
       $hash2{$old_doc}=\%hash;        <---betreffende Zeile
       %hash;
       }
       #gehe Zeilen der Repository durch und speichere zahl und header in hash
       open(DATEI, "<./Konfigurationsdaten/20060310.REPOSITORY") || die "Fehler beim öffnen von Datei $datei - $!";
       my @Zeilen2 = <DATEI>;
       close(DATEI);
       foreach(@Zeilen2){
         if(/^$zahl2;(^[;]+)/){
           $hash{$zahl1}=$1;                                
         }
       }        
     }
     $old_doc = $dokuart;
 }


danke für die hilfe\n\n

<!--EDIT|shaihulud|1148487908-->
bloonix
 2006-05-24 19:22
#66574 #66574
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
meinst du sowas?

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
use strict;
use warnings;

my %hash = (key1 => 1, key2 => 2, key3 => 3);

deref(\%hash);

sub deref {
  my %hash = %{$_[0]};
  for (keys %hash) {
     print "$_:$hash{$_}\n";
  }
}


Der Hash wird aber kopiert.\n\n

<!--EDIT|opi|1148484580-->
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.
shaihulud
 2006-05-24 20:22
#66575 #66575
User since
2006-04-12
76 Artikel
BenutzerIn
[default_avatar]
also ich will einfach den hash den ich an das nebenprogramm gebe im nebenprogramm füllen können und ihn dann wieder im hauptprogramm auslesen können. d.h. ich muss ja irgendwie in den hash der referenz schreiben oder nicht?! wie ich das hier genau machen soll weiss ich nicht...
bloonix
 2006-05-24 20:29
#66576 #66576
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
[quote=shaihulud,24.05.2006, 18:22]d.h. ich muss ja irgendwie in den hash der referenz schreiben oder nicht?! wie ich das hier genau machen soll weiss ich nicht...[/quote]
Mein Beispiel nochmal mit einer Hashreferenz:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
use strict;
use warnings;

my %hash = (key1 => 1, key2 => 2, key3 => 3);

work_with_reference(\%hash);

sub work_with_reference {
 my $hash = shift;
 for (keys %$hash) {
    print "$_:$hash->{$_}\n";
 }
}


Nun wird eine Referenz auf den Hash an die Funktion übergeben.
Der Zugriff auf den Wert eines Hashschlüssels schaut dann wie
folgt aus:

$hash->{Schluessel}

Für Fragen bezüglich Referenzen wäre die Doku nicht schlecht, um ein
allgemeines Verständnis zu erlangen.

perlreftut\n\n

<!--EDIT|opi|1148488285-->
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.
Ronnie
 2006-05-24 20:32
#66577 #66577
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
[quote=shaihulud,24.05.2006, 18:22]also ich will einfach den hash den ich an das nebenprogramm gebe im nebenprogramm füllen können und ihn dann wieder im hauptprogramm auslesen können. d.h. ich muss ja irgendwie in den hash der referenz schreiben oder nicht?! wie ich das hier genau machen soll weiss ich nicht...[/quote]
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/usr/bin/perl

use strict;
use warnings;

use Data::Dumper;

my %hash = (key1 => 1, key2 => 2, key3 => 3);
add_to_hash(\%hash);
die Dumper \%hash;

sub add_to_hash {
my $h_ref = shift or die;
$h_ref->{key4} = 4;
}
shaihulud
 2006-05-25 00:59
#66578 #66578
User since
2006-04-12
76 Artikel
BenutzerIn
[default_avatar]
und wie mach ich dass dann in der nebenfunktion für nen hash?
Code: (dl )
1
2
3
4
sub add_to_hash {
my $h_ref = shift or die;
$h_ref->{key4} = 4;
}


hash->{key] = \hash2 ??
für
$h_ref->{key4} = 4;
bloonix
 2006-05-25 01:42
#66579 #66579
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
@shaihulud, nu bin ich aber beleidigt :(

du hast dir nicht das perlreftut durchgelesen!

;)
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.
Ronnie
 2006-05-25 02:07
#66580 #66580
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
[quote=opi,24.05.2006, 23:42]@shaihulud, nu bin ich aber beleidigt :(

du hast dir nicht das perlreftut durchgelesen!

;)[/quote]
Nee, er hat auch den Beispiel-Code nicht ausprobiert ;)
shaihulud
 2006-05-25 12:11
#66581 #66581
User since
2006-04-12
76 Artikel
BenutzerIn
[default_avatar]
ihr habt beide recht.. *schäm* *g
war nicht zu hause als ich gepostet hatte und habs daher nicht ausprobiert... ich les es mir ja schon durch.. :P
shaihulud
 2006-05-25 12:27
#66582 #66582
User since
2006-04-12
76 Artikel
BenutzerIn
[default_avatar]
oki es geht sowohl:
   my $hash2 = shift;
   $hash2->{$old_doc}=\%hash;
als auch
   my $hash2 = shift;
   ${$hash2}{$old_doc}=\%hash;

aber was ich nicht ganz verstehe ist warum das nicht
my $hash2 = %{shift};
$hash2{$old_doc}=\%hash;

oder sowas ähnliches heißt?!
wird hash2 automatisch beim deklarieren durch die referenz (shift) als hash gekennzeichnet oder wie muss ich das verstehen?\n\n

<!--EDIT|shaihulud|1148545718-->
<< |< 1 2 >| >> 16 Einträge, 2 Seiten



View all threads created 2006-05-24 18:26.