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

probleme mit Hashes: Hash hat keinen Inhalt ausserhalb IF---



<< >> 8 Einträge, 1 Seite
perlOpfer
 2007-07-05 10:21
#78225 #78225
User since
2007-07-05
3 Artikel
BenutzerIn
[default_avatar]
Hallo Forum,

nun bin ich auch mal bei Perl am verzweifeln und hoffe hier hat einer einen guten Tip für mich:

Ich habe ein Skript geschrieben, was Informationen über den Benutzer ausgiebt. Es soll nun auch die Möglichkeit geben, über eine Option die Sprache wechseln zu können (tie)

Die Hashes im Programm sind verwendbar, so lange Sie am Anfang des Skriptes stehen, wenn sie allerding innerhalb einer IF Bedingung stehen, passiert leider nichts. Ich kann bei der definition der Hashes (innerhalb if) den Inhalt ausgeben lassen, aber leider (wie schon gesagt) nicht ausserhalb von if:

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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#! /usr/bin/perl  
# name: uebung9
# author: philipp petersen
# mat nr.: 729184
# date: 06/2007
# uni: thf-berlin

sub print_line($);
sub print_groups();
sub print_network();
sub group_network($);
sub group_network_all($);

use File::Basename;
use Getopt::Long;
use POSIX;
use SDBM_File;
use Fcntl;

if ($opt_s eq "en_US"){
print "in ENG";
####################################################################
####################################################################
$dbm_datei = "./en_US/default_msg.dbm";
(-r $dbm_datei.".pag") or die "$prog: $dbm_datei $!\n";

tie(my %default_msg, 'SDBM_File', $dbm_datei, O_RDONLY, 0444)
or die "$dbm_datei: $!\n";
#untie %default_msg;
##########################################
$dbm_datei = "./en_US/group_msg_en.dbm";
(-r $dbm_datei.".pag") or die "$prog: $dbm_datei $!\n";

tie(my %group_msg_de, 'SDBM_File', $dbm_datei, O_RDONLY, 0444)
or die "$dbm_datei: $!\n";
#untie %group_msg_de;
##########################################
$dbm_datei = "./en_US/not_found_msg.dbm";
(-r $dbm_datei.".pag") or die "$prog: $dbm_datei $!\n";

tie(my %not_found_msg, 'SDBM_File', $dbm_datei, O_RDONLY, 0444)
or die "$dbm_datei: $!\n";
#untie %not_found_msg;
##########################################
$dbm_datei = "./en_US/verbal_de.dbm";
(-r $dbm_datei.".pag") or die "$prog: $dbm_datei $!\n";

tie(my %verbal_de, 'SDBM_File', $dbm_datei, O_RDONLY, 0444)
or die "$dbm_datei: $!\n";
print %verbal_de;
#untie %verbal_de

####################################################################
####################################################################


}else


Das Print verbal_de würde hier eine Ausgabe machen.

ACHTUNG das hier ist nur ein Ausschnitt des Sktiptes... will das Forum nicht zumüllen mit code...


Hilfe...
ptk
 2007-07-05 10:41
#78226 #78226
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Hast du "use strict" im Originalskript?
bieber
 2007-07-05 10:44
#78227 #78227
User since
2007-06-18
148 Artikel
BenutzerIn
[default_avatar]
wenn du den hash innerhalb von if mit "my" deklarierst ist er auch nur in der if-Anweisung verfügbar, hier zu sehen:

Code: (dl )
1
2
3
4
5
6
7
8
#!/usr/bin/perl

$check=1;
if($check==1){
my %test= ( '2','funst' );
print "innerhalb $test{2} \n";
}
print "außerhalb: $test{2}"


ansonsten, ka, musst du auf die profis warten ;)
Es gibt immer Leute die meinen, sie seien schlauer als ich. Das Schlimmste ist, sie sind es auch.
renee
 2007-07-05 10:44
#78228 #78228
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Hast Du überprüft, dass das Programm tatsächlich in den if-Zweig geht?

Bekommst Du eine Fehlermeldung?

Kannst Du ein Minimal-Programm schreiben, das den Fehler reproduziert?
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/
Ishka
 2007-07-05 11:06
#78229 #78229
User since
2003-08-04
771 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Hallo,

mit use strict würdest du den Fehler selbst finden.
Wie bieber schon sagte, sorgt das my dafür, daß die Variable nur innerhalb der if-Abfrage den Wert hat. Schreib also statt
Code: (dl )
tie(my %default_msg

lieber
Code: (dl )
tie(%default_msg

und dafür vor die if-Abfrage ein my %default_msg;, damit die Variable declariert ist.

Und nimm das nächste mal
Code: (dl )
1
2
use strict;
use warnings;

dann passiert sowas nicht so leicht.
sub z{if(@_){1while$x[$k=rand 10];t($t=$x[$k]=1)}print map"$z[$x[$_]]$_".($_%3?
"":"\n"),1..9}sub t{$j=0;$x[$_+1]==$t&&($j+=2**$_)for 0..8;z,die"Gewinner $z[$t]
"if grep$_==($j&$_),7,56,73,84,146,273,292,448;z,die"Gleichstand\n"if@x>9&&!grep
!$_,@x}@x=4;@z=qw{. [ (};z$^T&1;while(<>){next if$_>9||$x[$_];t$t=$x[$_]=2;z 1}
perlOpfer
 2007-07-05 11:55
#78230 #78230
User since
2007-07-05
3 Artikel
BenutzerIn
[default_avatar]
:) Hey das ist ja SUPER... ich danke euch für die schnelle zahlreichen Antworten :D

Ich probiere es nacher gleich mal und schreibe euch ob ich es hinbekommen habe oder nicht.

Nochmal DANKE an alle...
renee
 2007-07-05 11:58
#78231 #78231
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Zu use strict ist dieser Wiki:Artikel sehr lesenswert.
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/
perlOpfer
 2007-07-06 01:13
#78232 #78232
User since
2007-07-05
3 Artikel
BenutzerIn
[default_avatar]
Hat alles funkttioniert, danke
<< >> 8 Einträge, 1 Seite



View all threads created 2007-07-05 10:21.