Schrift
[thread]6100[/thread]

Hash an Methode übergeben



<< >> 8 Einträge, 1 Seite
[HR]Doomrunner
 2004-02-27 11:59
#80362 #80362
User since
2003-09-04
77 Artikel
BenutzerIn
[default_avatar]
Hi Leutz,

habe ein Perl-Script, dass aus einer Methode heraus einen Hash an eine andere Methode übergeben soll. Irgendwie klappt das aber nicht so ganz wie ich mir das wünsche. Hier erstmal der Quellcode:

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
26
27
28
29
30
31
32
sub importdaten {
          $class = shift;
        
          ...
      
  for(@daten) {
              $line = $_;
              my @tokens = quotewords (";", 0, $line);
                
                     $in3{firma} = @tokens[0]." ".@tokens[4]." ".@tokens[5]." ".@tokens[6]." ".@tokens[7]." ".@tokens[8];
                     $in3{strasse} = @tokens[1];
                     $in3{plz} = @tokens[2];
                     $in3{ort} = @tokens[3];
                     $in3{ansprechpartner} = @tokens[9]." ".@tokens[10]." ".@tokens[11]." ".@tokens[12];
                     $in3{position} = @tokens[13];
                     $in3{tel} = @tokens[14];
                     $in3{fax} = @tokens[15];
                     $in3{branche} = @tokens[16];
                
                     $in3{gruendung} = @tokens[20];
                
                     $class->neu(%in3);
          }
}

sub neu {       
          $class = shift;
          %neu = shift;
        
          print "Content-type: text/html\n";
          print $neu{firma};
}


Irgendwie klappt das aber nicht so ganz. Habt ihr ne Ahnung, woran das liegen kann?\n\n

<!--EDIT|
Doomrunner|1077876157-->
renee
 2004-02-27 12:02
#80363 #80363
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
so kannst Du es machen:
Code: (dl )
1
2
3
4
5
6
7
8
9
$class->neu(\%in3);

sub neu {
$class = shift;
$hash_ref = shift;

print "Content-type: text/html ";
print $hash_ref->{firma};
}


statt $hash_ref->{firma} kannst Du vorher auch dereferenzieren
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/
[HR]Doomrunner
 2004-02-27 12:04
#80364 #80364
User since
2003-09-04
77 Artikel
BenutzerIn
[default_avatar]
Danke. Ich müsste es aber nachher nicht über $hash_ref->{firma}, sondern über $hash_ref{firma} ansprechen können. Denn aus einer anderen Methode heraus wird es so übergeben.

Ist das noch irgendwie drin?
renee
 2004-02-27 12:11
#80365 #80365
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
1
2
3
4
5
6
7
8
9
10
class->neu(\%in3);

sub neu {
$class = shift;
$hash_ref = shift;
my %hash = %{$hash_ref};

print "Content-type: text/html ";
print $hash{firma};
}


oder einfacher:

Code: (dl )
1
2
3
4
5
6
7
8
$class->neu(%in3);

sub neu {
 my ($class,%neu) = @_;

 print "Content-type: text/html ";
 print $neu{firma};
}

geht auch...\n\n

<!--EDIT|renee|1077876822-->
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/
[HR]Doomrunner
 2004-02-27 12:21
#80366 #80366
User since
2003-09-04
77 Artikel
BenutzerIn
[default_avatar]
Vielen Dank.

Klappt wunderbar :-)
pq
 2004-02-27 14:27
#80367 #80367
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[HR
Doomrunner,27.02.2004, 10:59]
Code (perl): (dl )
                     $in3{firma} = @tokens[0]." ".@tokens[4]." ".@tokens[5]." ".@tokens[6]." ".@tokens[7]." ".@tokens[8];

hmm, du benutzt keine warnings, stimmt's?
@array[$n] sollte man immer als $array[$n] schreiben.

edit:
ausserdem kann man das da oben auch viel schöner schreiben:
$in3{firma} = join ' ', @tokens[0,4..8]; # hier ist das @ übrigens richtig\n\n

<!--EDIT|pq|1077885224-->
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
pq
 2004-02-27 14:31
#80368 #80368
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[HR
Doomrunner,27.02.2004, 10:59]
Code (perl): (dl )
1
2
3
sub neu {       
          $class = shift;
          %neu = shift;

dir ist nicht ganz klar, was shift() macht. es holt das erste element
aus dem übergebenen array (hier das array @_). somit weist du dem
hash %neu genau ein element zu.
aber was ist mit dem rest von dem übergebenen hash? lösung:
my %neu = @_;
ausserdem würde ich dir dringend empfehlen, alle variablen mit my()
zu deklarieren, sonst kommst du irgendwann durcheinander. indem
du einfach use strict in dein skript/modul plazierst, sagt perl dir,
welche variablen du vergessen hast zu deklarieren.\n\n

<!--EDIT|pq|1077885085-->
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
[HR]Doomrunner
 2004-02-27 15:02
#80369 #80369
User since
2003-09-04
77 Artikel
BenutzerIn
[default_avatar]
Auch danke an pq. Habe das join direkt eingebaut.
<< >> 8 Einträge, 1 Seite



View all threads created 2004-02-27 11:59.