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

Rückgabewerte aus einer Subroutine aufrufen



<< |< 1 2 >| >> 12 Einträge, 2 Seiten
leissi
 2006-01-19 10:52
#62037 #62037
User since
2005-07-06
84 Artikel
BenutzerIn
[default_avatar]
Hallo,

möchte aus einer Subroutine explizit das Ergebnis ausgeben lassen und zwar mit dem Befehl return! Leider bekomme ich das Ergebnis nicht geliefert! Innerhalb der Subroutine erhalte ich das Ergebnis!

Gruss
Leissi
bloonix
 2006-01-19 11:03
#62038 #62038
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
Hallo Leissi,

ohne dein misslungenes Beispiel ist es nicht möglich, dir die
Fehler deines Codes aufzuzeigen.

Greez,
opi\n\n

<!--EDIT|opi|1137661575-->
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.
Crian
 2006-01-19 11:05
#62039 #62039
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
In C würd ich vermuten, dass du einen Pointer auf ein schon zerstörtes Objekt zurückgibst, aber in Perl? Hmmm da bin ich auf Deinen Code sehr gespannt.
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
morph
 2006-01-19 11:05
#62040 #62040
User since
2007-12-06
79 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hi,

ich versteh' Dich nicht?!

Aus einer Subroutine mit return das Ergebnis ausgeben lassen? Naja, ich lass mir auch gern einen ausgeben. ;)

Beschreib mal bissl genauer was Du willst. Ist das sowas?
Code: (dl )
1
2
3
4
5
6
7
8
9
10
sub bla_blub
{
my $x = shift;

$x++;

return($x);
}
[...]
my $f_var = &bla_blub($startwert);


-uw
leissi
 2006-01-19 11:32
#62041 #62041
User since
2005-07-06
84 Artikel
BenutzerIn
[default_avatar]
Hi,

hier ein Auszug aus dem Script:

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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
my $code = 'true';

#!/usr/bin/perl -w

use strict;
use warnings;
use time::localtime;
use Data::Dumper;
use File::Find;


my $ausgabe_Datei = "backupCheck.txt";
open(LogDatei, ">backupCheck.txt") or die "Kann Log Datei nicht anlegen : $!";

my $tm = localtime;
print LogDatei " $tm \n\n\n";

my $parameterFile = "input/Main.cfg";
open(IN, $parameterFile) || die "Paramterfile $parameterFile nicht gefunden!";
my @par = <IN>;
close(IN);

eval( join("\n", @par) );




#########################################################################################################################
##########################################################################################################################
###########################################################################################################################
# Subroutinenaufruf der einzelnen Prüfroutinen
&runSqlBackCheck; # start subroutine: runSqlBackCheck
&runOtaCheck; # start subroutine: runOtaCheck
&runSqlTrnCheck; # start subroutine: runSqlTrnCheck

my $Block3 = $bool_runSqlTrnCheck; ## Hier an der Stelle soll nochmals das Ergebnis aus der Subroutine ausgegeben werden!


# 3 Block hier werden die Transactionlog-Dateien geprüft
sub runSqlTrnCheck
{
#Überprüfung LogDatei-Verzeichnis



# 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 $runSQLTrnCheck = 1;

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

my $dir1 = '//D$//Backup//MSSQL//TRN//ztb_treasurycockpit_db';
opendir(DIR,$dir1) or die $!; # Verzeichnis "öffnen"

my @verzeichnisse1 = grep{-M $dir1 .'/'.$_}readdir(DIR);
my $bool_runSqlTrnCheck = 0; #0 = Nein
for my $file(@verzeichnisse1)
{
if(existsGlobalCheck($dir1.'/'.$file,1))
{
$bool_runSqlTrnCheck = 1; #1 = Ja
print LogDatei '-' x 130, "\n";
print LogDatei "\n ----------------------------LOG Dateien vorhanden----------------------------- \n" . $bool_runSqlTrnCheck . " LOG-Dateien gefunden!\n";
print LogDatei $file . "\n \n" . @verzeichnisse1 . " LOG-Dateien (TRN) im Verzeichnis " . $dir1 . " vorhanden!";
print LogDatei '-' x 130, "\n";
}
else
{
#print LogDatei "--------------------------------------------------------------------------\n";
#print LogDatei " Aktuelle Datei ist nicht vorhanden!\n";
#print LogDatei "--------------------------------------------------------------------------\n";
}
}
if ($bool_runSqlTrnCheck == 1) # 1= Ja
{
print LogDatei '-' x 130, "\n";
print LogDatei "INFO : Es besteht in dem Verzeichnis mind. eine aktuelle LOG-Dateien!\n";
print LogDatei '-' x 130, "\n";
}
else
{
print LogDatei '-' x 130, "\n";
print LogDatei "ERROR: Es besteht in dem Verzeichnis keine aktuelle LOG-Dateien!\n";
print LogDatei '-' x 130, "\n";
$runSQLTrnCheck = 0;
}
unless($runSQLTrnCheck)
{
print LogDatei '-' x 130, "\n";
print LogDatei "ERROR: LOG-Dateien unvollständig !!!!!\n";
print LogDatei '-' x 130, "\n";
print LogDatei '#' x 130, "\n";
print LogDatei '#' x 130, "\n\n\n";
}
return $bool_runSqlTrnCheck;

}# End of: sub runSqlTrnCheck

#***************************
#Ende der Subroutinen
#***************************
##########################################################################################################################################



Gruss\n\n

<!--EDIT|leissi|1137663236-->
morph
 2006-01-19 11:42
#62042 #62042
User since
2007-12-06
79 Artikel
BenutzerIn
[Homepage] [default_avatar]
Code: (dl )
my $Block3 = &runSqlTrnCheck;


-uw
leissi
 2006-01-19 12:02
#62043 #62043
User since
2005-07-06
84 Artikel
BenutzerIn
[default_avatar]
Hi,

also nochmals kurz beschrieben ich möchte aus der Subroutine das Ergebnis nochmals ausgelesen haben und dies anschliessend am Ende meines Logfiles als Ergebnis ausgedruckt haben und zwar

so:

Block1 = Ergebnis aus Subroutine;

Gruss
morph
 2006-01-19 12:08
#62044 #62044
User since
2007-12-06
79 Artikel
BenutzerIn
[Homepage] [default_avatar]
Also, nochmal kurz beschrieben. :D

Wenn Du in $Block3 den Rückgabewert der Funktion runSqlTrnCheck schreiben möchtest, dann musst Du auch die Funktion aufrufen und nicht ihre Rückgabevariable $bool_runSqlTrnCheck, zumal die durch die Definition mit my NUR in der Sub existiert.

Alles klar?

-uw
leissi
 2006-01-19 12:19
#62045 #62045
User since
2005-07-06
84 Artikel
BenutzerIn
[default_avatar]
Hi,

ist angekommen aber wenn ich das my herausnehme kommt es beim Aufruf des Programmes zu Fehlern!
Wie kann ich das elegant lösen?

Gruss
Leissi
Dubu
 2006-01-19 12:26
#62046 #62046
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Das my sollst du drin lassen!
Wie TbHoCne schon geschrieben hat:
Ersetze
Code: (dl )
1
2
3
&runSqlTrnCheck; # start subroutine: runSqlTrnCheck 

my $Block3 = $bool_runSqlTrnCheck; ## Hier an der Stelle ...

durch
Code: (dl )
my $Block3 = &runSqlTrnCheck; # start subroutine: runSqlTrnCheck 


Das ist in Perl nicht anders, als in den meisten anderen Programmiersprachen: Von Funktionen/Subroutinen zurueckgegebene Werte erhaelt man als Wert des Funktionsaufrufs, so einfach.
<< |< 1 2 >| >> 12 Einträge, 2 Seiten



View all threads created 2006-01-19 10:52.