Schrift
[thread]10756[/thread]

hash, oder was?



<< >> 8 Einträge, 1 Seite
Froschpopo
 2007-11-08 21:22
#102064 #102064
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
Ich sehe öfters mal bei Modulen, dass Daten folgendermaßen übergeben werden:

funktion(-name => 'Hans Peter')

wie nennt man sowas? Ist das eine Hashreferenz oder wie heisst das und wieso muss man die Parameter nicht in geschweifte Klammern fassen?
ptk
 2007-11-08 21:40
#102067 #102067
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Nein, das ist eine normale Liste. Auf der Gegenseite kannst du das in ein Hash oder in einen Array einlesen.
pktm
 2007-11-08 21:41
#102068 #102068
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
prinzipell ist das nur ein Array, der => - Operator sorgt allerdings dafür, dass das, was davor steht (also das -name) automatisch gequotet wird. Da könnte auch stehen funktion("-name","Hans Peter").

In der Funktion selbst kannst du dir dann aussuchen, wie du es ausliest. Du kannst es als Array auslesen: my @params = @_; oder als assoziatives Array (=Hash) (wie das geht habe ich wieder vergessen).

Wenn du geschweifte Klammern drum machst hättest du nurnoch einen Parameter, und der wäre dann eine Hashreferenz.
http://www.intergastro-service.de (mein erstes CMS :) )
pktm
 2007-11-08 21:44
#102070 #102070
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Hier mal ein Beispiel:
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
#!/Perl/bin/perl

use strict;
use warnings;
use Data::Dumper qw/Dumper/;



func( -name => 'wert' );



=head1 METHODEN

=head2 func( -name => 'wert' )

Nur zum Testen...

=cut

sub func {
my %p = @_;
print Dumper \%p;

# alternativ:
#my @p = @_;
#print Dumper \@p;

} # /func
http://www.intergastro-service.de (mein erstes CMS :) )
pq
 2007-11-08 21:46
#102072 #102072
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
pktm+2007-11-08 20:41:01--
In der Funktion selbst kannst du dir dann aussuchen, wie du es ausliest. Du kannst es als Array auslesen: my @params = @_; oder als assoziatives Array (=Hash) (wie das geht habe ich wieder vergessen).

my %params = @_;
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
Froschpopo
 2007-11-09 00:01
#102086 #102086
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
Verstehe, und diesen Bindestrich (-name...) muss ich dann im Modul selber löschen.
Danke!
pktm
 2007-11-09 00:39
#102091 #102091
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Froschpopo+2007-11-08 23:01:35--
Verstehe, und diesen Bindestrich (-name...) muss ich dann im Modul selber löschen.
Danke!


Wozu? Es ist mit Bindestrich immer noch ein String :)
Im Prinzip ist es egal, ob du diese Option mit oder ohne Bindestrich angibst, aber ich finde es schöner mit, und nehme dafür gerne in Kauf, in meinem Modul sowas zu schreiben: if( $p{'-option'} ...
http://www.intergastro-service.de (mein erstes CMS :) )
Struppi
 2007-11-09 11:50
#102108 #102108
User since
2006-02-17
628 Artikel
BenutzerIn
[Homepage]
user image
Der Bindestrich wird in erster Linie genutzt, um den Parameter zu erkennnen. Vor allem CGI.pm macht davon massiv Gebrauch. Du kannst dort alle Funktionen sowohl mit einem Hash als auch mit einer Liste verwenden:
func( -wert2 => 'wert2', -wert1 => 'wert1' );
func( 'wert1', 'wert2' );

CGI.pm überprüft jetzt ob der ewrste Parameter mit einem '-' anfängt und erkennt daran, dass du die erste Schreibweise möchstest. Ansonsten ist das Minus nicht notwendig.
<< >> 8 Einträge, 1 Seite



View all threads created 2007-11-08 21:22.