Schrift
[thread]12317[/thread]

String in Hash-Abfrage benutzen



<< >> 5 Einträge, 1 Seite
Gast Gast
 2008-08-08 11:03
#113223 #113223
Hallo,

ich bin gerade neu in der Perl-Welt und versuche mich an einem, ich denke nicht zu schweren Script.

Ich versuche Daten aus einem Hash auszugeben, allerdings steht im Printbefehl nicht der Wert des Paares sondern ein einfacher Skalar.

Zum Beispiel:

Code (perl): (dl )
print $Daten{'$xxx'};


In diesem $xxx steht nun ein Begriff den ein anderer Teil meines Programms zuvor ausgelesen hat, z.B. aus einer Textdatei.

Nun habe ich das Problem das die ausgabe von Hashes anscheinend nicht funktioniert wenn man anstelle eines Keys im Printbefehl {'Key'} einen Wert wie {'$xxx'} setzt.

Ihr merkt schon ich bin wirklich ein Frischling, wäre super wenn ihr mir helfen könntet.

Liebe Grüße,


Julian
renee
 2008-08-08 11:08
#113224 #113224
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Bie einfachen Anführungszeichen wird nichts interpoliert (ersetzt). Deswegen wird in dem Hash nach einem Schlüssel $xxx gesucht und nicht nach dem was in der Variablen $xxx steht.

Lass die Anführungszeichen komplett weg...

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/usr/bin/perl

use strict;
use warnings;

my %Daten = (
  test => 33,
);

my $xxx = 'test';

# jetzt wird nach 'test' gesucht
print $xxx, " => ", $Daten{$xxx},"\n";

# und jetzt nach $xxx
print '$xxx => ', $Daten{'$xxx'},"\n";
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/
Gast Gast
 2008-08-08 11:33
#113225 #113225
Super, vielen Dank!!!

Eine Frage habe ich aber noch, $xxx wird bei mir vorher im Programm in einer While-Schleife aus einer Textdatei ausgelesen, $xxx wird auch erst in dieser Schleife initialisiert:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
open(DB, "<temp.tmp") || die "Kann Temporäre Datei nicht öffnen!";
while(<DB>) {
            $buffer = $_;
            $INDD = $buffer;
            $INDD =~ m/^(.*?)=(.*),(.*)$/;
            $xxx = $2;
            $OUTDD = $buffer;
            $OUTDD =~ m/^(.*?),(.*)=(.*)$/;
            $yyy = $3;
            }


Kann es sein, das $xxx nach beenden der Schleife seine Wertigkeit verliert und ich den $xxx garnicht weiter benutzen kann???

Ich bekomme nämlich immer folgende Warnmeldung:

Use of uninitialized value in print at BEFEHLE.pm

Liebe Grüße,

Julian


Gast Gast
 2008-08-08 11:58
#113228 #113228
Problem gelöst, vielen vielen Dank!!! Hatte nur nen kleinen Denkfehler.

Liebe Grüße,

Julian
Gast Gast
 2008-08-08 13:08
#113232 #113232
Warum nicht so?
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
open(DB, "<", "temp.tmp") || die "Kann Temporäre Datei nicht öffnen!";
while(<DB>) {
            chomp($_);
            my $buffer = $_;
            $xxx = $1 if($buffer =~/^.*?=(.*),.*$/);
            $yyy = $1 if($buffer =~/^.*?,.*=(.*)$/);
#            $INDD = $buffer;
#            $OUTDD = $buffer;
            }
<< >> 5 Einträge, 1 Seite



View all threads created 2008-08-08 11:03.