Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]9976[/thread]

Verständnisfrage zu Perl



<< >> 7 Einträge, 1 Seite
LadyM
 2007-08-06 15:08
#97618 #97618
User since
2007-08-06
2 Artikel
BenutzerIn
[default_avatar]
Hallo,

ich beschäftige mich seit kurzem mit Perl, da ich ein Perl Skript in C++ umschreiben soll.

Nun versuche ich gerade, zu verstehen, was in dem Perl Skript vorgeht.
Dazu habe ich eine Verständnisfrage:

In dem Skript steht ein Hash:
%$tmp=("a" => $opt[1], "b" => $opt[2], "c" => $opt[3]);

Weiter unten steht:
$tmp = opt . $j;

Und später steht dann noch:
$test = $irgend * $$tmp{'b'} * $etwas;

Was passiert denn hier jetzt mit der Variablen $tmp alles?
Warum steht in diesem letzten Aufruf $$?

Könnt Ihr mir da weiterhelfen?

Vielen Dank
lichtkind
 2007-08-06 15:14
#97619 #97619
User since
2004-03-22
5681 Artikel
ModeratorIn + EditorIn
[Homepage]
user image
$ dient der dereferenzierung

$tmp beinhaltet einen zeiger auf einen hash (%), wesweger erst noch der zeiger zuerst dereferenziert werden muss. deswegen 2 $. ka warum das in dem fall sinvoll ist, aber sieht interessant aus. wusste gar nicht das man das so direkt in perl definieren kann.

der "." verbinden strings aber wenn mir nicht ganzen algorrithmus gibts kann ich dir nicht sagen was es macht.
Wiki:Tutorien in der Wiki, mein zeug:
kephra, baumhaus, garten, gezwitscher

Es beginnt immer mit einer Entscheidung.
nepos
 2007-08-06 15:16
#97620 #97620
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Ich denke eher, die $$ sind dafür da, weil der Name des eigentlichen Hashes mit Hilfe von $tmp zusammengebaut wird. Oder fehlt bei
Code: (dl )
$tmp = opt . $j;
das $ vor obj?
renee
 2007-08-06 15:17
#97621 #97621
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Da ist das Stichwort Wiki:Referenzen...

$tmp ist eine Referenz auf ein Hash. Bei der Zuweisung wird die Referenz dereferenziert (%$tmp).

Was $tmp = opt . $j soll, kann ich ohne weiteren Code nicht sagen...

Und danach wird der Variablen $test ein Wert zugewiesen, der sich aus $irgend mal dem Wert, der in der Hashreferenz $tmp zum Schlüssel "b" gespeichert ist, mal $etwas.

$$tmp{'b'} ist eine Kurzschreibweise von ${ $tmp }{'b'} beziehungsweise von $tmp->{'b'}
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/
LadyM
 2007-08-06 15:20
#97622 #97622
User since
2007-08-06
2 Artikel
BenutzerIn
[default_avatar]
Danke schon mal für die Antworten.

@nepos:
Nein, hier steht vor dem opt kein $.
pq
 2007-08-06 17:17
#97626 #97626
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
LadyM+2007-08-06 13:20:48--
@nepos:
Nein, hier steht vor dem opt kein $.

dann soll es 'opt' heissen, aber ohne strict laesst perl das auch zu.
also $tmp = 'opt' . $j;
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
bloonix
 2007-08-07 15:46
#97708 #97708
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
opt kann doch was ganz anderes sein!
Vielleicht eine Routine?

Code (perl): (dl )
1
2
3
4
sub opt { '/opt' }
my $j = '/foo';
my $tmp = opt . $j;
print $tmp, "\n";

/opt/foo
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.
<< >> 7 Einträge, 1 Seite



View all threads created 2007-08-06 15:08.