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

Subroutine

Leser: 1


<< >> 6 Einträge, 1 Seite
leissi
 2006-01-20 13:52
#62103 #62103
User since
2005-07-06
84 Artikel
BenutzerIn
[default_avatar]
Hallo,

meine Subroutine funktioniert soweit aber bei positiven Lauf bekomme ich trotzdem am Ende ein negativen Wert zurück! Was ist mein Fehler???

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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
my $code = 'true';
#1 Block Prüfung BackupCheck-Verzeichnis
sub runSqlBackCheck
{



# Flag, ob die Gesamtprüfung positiv ist.
# 0 = nein, d.h. In mindestens einem Fall war keine aktuelle Backup-Datei vorhanden.
# 1 = ja, d.h. es ware stets eine aktuelle Backup-Datei vorhanden.
my $runSQLBakCheck = 1;

print LogDatei '*' x 130, "\n\n";
print LogDatei '#' x 130, "\n";
print LogDatei '#' x 130, "\n\n";
print LogDatei " Backup-Verzeichnischeck beginnt: $tm \n\n\n";
print LogDatei '#' x 130, "\n\n";


#wird erst später aus DOMS.mdb ermittelt, vorerst wird mit Hardcodierten Werten gearbeitet

my (@pjDomain,@pjName);

$pjDomain[0] = "ZITA_PKM";
$pjName [0] = "Phoenix";

$pjDomain[1] = "ZITA_ATF";
$pjName [1] = "ZITA_522";

$pjDomain[2] = "ZITA_ATF";
$pjName [2] = "TLA";

my $numberProjects = $#pjName;
my $backupPath = 'H:\\Perl\\BackupCheck\\_backup';


# Nun wird für jedes TestDirector-Projekt überprüft, ob im
# Backup-Bereich des Servers ein aktuelles Backup vorliegt.
for (my $i = 0; $i <= $numberProjects; $i++)
{
my $bkupDirectory = $backupPath . "\\" . $pjDomain[$i] . "_" . $pjName[$i] . "_db";

print LogDatei '#' x 130, "\n";
print LogDatei " " . $tm . "\n \n Prüfe Existenz von " . $bkupDirectory . "\n";
print LogDatei '#' x 130, "\n";

if ( -e $bkupDirectory )
{
print LogDatei "Verzeichnis ist vorhanden!\n";
opendir(DIR,$bkupDirectory);

my @verzeichnisse = grep{-f $bkupDirectory .'/'.$_}readdir(DIR);
my $bool = 0;
for my $file(@verzeichnisse)
{
if(existsActBackup($bkupDirectory.'/'.$file,1))
{
$bool = 1;
print LogDatei '#' x 130, "\n";
print LogDatei "\n ****************************Backup vorhanden***************************** \n" . $bool . " Backupdatei gefunden!\n";
print LogDatei $file . "\n \n" . @verzeichnisse . " Backupdateien im Verzeichnis " . $bkupDirectory . " vorhanden!";
print LogDatei '#' x 130, "\n";
}

}
if ($bool == 1)
{
print LogDatei '*' x 130, "\n";
print LogDatei "INFO : Es besteht in dem Verzeichnis mind. eine aktuelle Backupdatei!\n";
print LogDatei '*' x 130, "\n\n\n";
}
else
{
print LogDatei '*' x 130, "\n";
print LogDatei "**********ERROR: Es besteht in dem Verzeichnis keine aktuelle Backupdatei!************\n";
print LogDatei '*' x 130, "\n\n\n";
$runSQLBakCheck = 0;
}
## Hier wird nach Durchlauf der Kontrolle ein Statment abgegeben wenn Error auftrat!
unless($runSQLBakCheck)
{
print LogDatei '#' x 130, "\n\n";
print LogDatei " ********** ERROR: Ineinem bzw. mehreren Backupverzeichnissen liegen keine aktuellen Backupdateien vor!! Bitte prüfen!!! ************\n\n";
print LogDatei '#' x 130, "\n";
print LogDatei '#' x 130, "\n\n\n";
}
}
else
{

print LogDatei "ERROR: Das zu prüfende Backupverzeichnis wurde nicht gefunden! Bitte prüfen!!\n";
} # end of: if ( -e $bkupDirectory )
} # end of: for (my $i = 0; $i <= $numberProjects; $i++)

} # end of: sub runSqlBackCheck


Gruss Leissi
Taulmarill
 2006-01-20 14:07
#62104 #62104
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
hm, ich denke mal eher, dass du undef zurück bekommst, da du gar keinen wert zurück gibst. du kannst z.b. mit return 1; die subroutine beenden und einen positiven wert zurückgeben.
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
leissi
 2006-01-20 14:15
#62105 #62105
User since
2005-07-06
84 Artikel
BenutzerIn
[default_avatar]
Hi,

ich rufe die Ergebnisse der Subroutinen so auf:
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
my $code = 'true';

my $ReturnCode1 = &runSqlBackCheck; # start subroutine: runSqlBackCheck
my $ReturnCode2 = &runOtaCheck; # start subroutine: runOtaCheck
my $ReturnCode3 = &runSqlTrnCheck; # start subroutine: runSqlTrnCheck

# Hier muß ich das Ergebnis auswerten

if ( $ReturnCode1 == 1 && $ReturnCode2 == 1 && $ReturnCode3 == 1)
{
# Gesamtergebnis positiv

print LogDatei '*' x 130, "\n";
print LogDatei '#' x 130, "\n";
print LogDatei '#' x 130, "\n";
print LogDatei " Die Z3S BackupKontrolle war erfolgreich!!!!! \n";
print LogDatei '#' x 130, "\n";
}
else
{
# Gesamtergebnis negativ

print LogDatei '*' x 130, "\n";
print LogDatei '#' x 130, "\n";
print LogDatei '#' x 130, "\n";
print LogDatei " Die Z3S BackupKontrolle war nicht erfolgreich!!!!! \n";
print LogDatei '#' x 130, "\n";
print LogDatei "Einzelergebnisse:\n";


Es sind drei Subroutinen bei den anderen beiden erhalte ich das gewünschte Ergebnis!
Nu bei diesem erhalte ich einen negativen Wert auch zurück wenn er alles als positiv als richtig bewertet!

Gruss
:rock:
Taulmarill
 2006-01-20 14:36
#62106 #62106
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
hast du meinen post überhaupt gelesen?!?

du musst das ergebniss, dass deine subroutine zurückgeben soll, schon auch irgendwo zurückgeben. das kann man entweder mit return machen, welches die subroutine auch gleich beendet, oder man benutzt einfach den rückgabewert des letzten ausdrucks in der subroutine.
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
leissi
 2006-01-20 14:49
#62107 #62107
User since
2005-07-06
84 Artikel
BenutzerIn
[default_avatar]
Hi,

man Danke hast recht ich hab am Ende den Return eingebaut jetzt übergibt er auch das richtige Ergebnis aus Der SubRoutine!

Sorry nochmal!!!

UND VIELEN DANK :D
nepos
 2006-01-20 21:16
#62108 #62108
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Standardmaessig wird das Ergebnis des letzten Ausdrucks zurueckgegeben, aber das ist oft nicht das, was man will. Persoenlich find ichs ausserdem mit return schoener, da man da explizit sieht, was nun zurueckgegeben wird.
<< >> 6 Einträge, 1 Seite



View all threads created 2006-01-20 13:52.