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

Rückgabewert in Variable speichern???



<< |< 1 2 >| >> 17 Einträge, 2 Seiten
Tom
 2004-01-05 16:04
#661 #661
User since
2003-09-20
470 Artikel
BenutzerIn
[Homepage] [default_avatar]
Sorry aber mir ist kein besserer Titel eingefallen.

Also ich habe ein Kalendermodul bei dem es auch die Möglichkeit gibt das Datum zu überprüfen, um das Datum zu überprüfen muß ich das ganze so aufrufen,

Code: (dl )
print check_date("$day","$month","$year");


Ist das Datum richtig wird 1 als Ergebniss geliefert, bei falsch 0.

Jetzt möchte ich aber das Ergebniss nicht auf dme Bildschrim ausgegeben haben sonder in einer Variable die ich dann in meinem Script weiterverwenden kann.

Nur weiß iuch nicht wi ich den Rückgabe wert in einer Variabel speichere.

Der Code sieht folgendermaßen aus

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
# Checkt das Datum 
sub check_date{
return 0 if scalar @_ != 3;
my ($day, $month, $year) = @_;
my $zahl = "$day$month$year";
if($zahl =~ /[^0-9]/){return 0}
if($month > 12 or $month <= 0 or $day <= 0 and $year < 1582){return 0}
if($day > &days_of_month($month,$year)){return 0}
if($month < 10 and $year < 1582){return 0} # 15.10.1582 Gregorian Day
# over!
return 1;
}


Ich hoffe ihr könnt mir bei meinem Problem helfen!

DANKE euch schonmal

Tom
Computerprobleme??? -> http://www.weber-computerhilfe.de

Fordere keine Anerkennung!
Zeige was und man wird Dich kennen
[E|B]
 2004-01-05 16:10
#662 #662
User since
2003-08-08
2561 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Wieso nutzt du die Anführungszeichen bei der Parameterübergabe? Die kannst du auch weglassen...

Code: (dl )
my $var = check_date($day,$month,$year);
Gruß, Erik!

s))91\&\/\^z->sub{}\(\@new\)=>69\&\/\^z->sub{}\(\@new\)=>124\&\/\^z->sub{}\(\@new\)=>);
$_.=qq~66\&\/\^z->sub{}\(\@new\)=>93~;for(@_=split(/\&\/\^z->sub{}\(\@new\)=>/)){print chr;}

It's not a bug, it's a feature! - [CGI-World.de]
Tom
 2004-01-05 16:13
#663 #663
User since
2003-09-20
470 Artikel
BenutzerIn
[Homepage] [default_avatar]
Das das so einfach ist hätte ich nicht gedacht.

Danke

Tom
Computerprobleme??? -> http://www.weber-computerhilfe.de

Fordere keine Anerkennung!
Zeige was und man wird Dich kennen
Tom
 2004-01-19 19:38
#664 #664
User since
2003-09-20
470 Artikel
BenutzerIn
[Homepage] [default_avatar]
Jetzt habe ich aber noch ne Frage dazu, ich rufe ein Script auf, in diesem Script wird ein weiteres Script mit require "script.cgi" aufgerufen, das aufgerufene Script liefert ein return 1; zurück, wie kann ich das in einer Variable speichern???

Danke

Tom\n\n

<!--EDIT|Tom|1074533991-->
Computerprobleme??? -> http://www.weber-computerhilfe.de

Fordere keine Anerkennung!
Zeige was und man wird Dich kennen
eisbeer
 2004-01-19 19:43
#665 #665
User since
2003-08-29
347 Artikel
BenutzerIn
[Homepage] [default_avatar]
Was schätzt du denn :) ?

Es ist genau so, wie mit allem anderen.

PS: Sorry dafür, das ich kein Beispiel bringe
oder es nicht ausführlich erläutere, ich will
eigentlich den Leuten, die hier Fragen stellen
ein bisschen mehr selbst-erlernungsweg lassen.
Die meisten PC Probleme befinden sich zwischen Bildschirm und Stuhl...
Tom
 2004-01-19 20:05
#666 #666
User since
2003-09-20
470 Artikel
BenutzerIn
[Homepage] [default_avatar]
[quote=eisbeer,19.01.2004, 18:43]PS: Sorry dafür, das ich kein Beispiel bringe
oder es nicht ausführlich erläutere, ich will
eigentlich den Leuten, die hier Fragen stellen
ein bisschen mehr selbst-erlernungsweg lassen.[/quote]
Das versteh ich schon, will ja auch was dabei lernen ;)

Aber wenn ichs so schreibe

Code: (dl )
my $var = login.cgi;


Dann erhalte ich folgende Fehlermeldung

Can't return outside a subroutine at C:\projekte\login.cgi line 51.

In der login.cgi steht an folgender Stelle

Code: (dl )
1
2
if ($username =~ $inusername && $inuser_passwd eq crypt($user_passwd, $inuser_passwd)){
return 1;


Tom
Computerprobleme??? -> http://www.weber-computerhilfe.de

Fordere keine Anerkennung!
Zeige was und man wird Dich kennen
format_c
 2004-01-19 20:27
#667 #667
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Richtig. return funktioniert nur innerhalb einer Sub-Routine. Wenn du eine Datei mit require oder do einbindest, muss sie gezwungenermaßen 1 (true) zuzrückgeben, da sonst require bzw. do fehlschlagt und es einen Laufzeitfehler gibt. Das ist dir wahr scheinlich nicht aufgefallen, da du der Code in dem eingebundenen Script wahrscheinlich nicht ausschließlich aus subroutionen besteht, die nur ausgeführt werden wenn sie aufgerufen werden. Also hast du Code (Zeichen) in der einzubindenen Datei, also gibt sie true zurück. Sie wird so nicht 0 (false) zurückgeben.

Wenn du allerdings deinen Code ausschließlich in Subroutinen steckst sieht das eingebundene script etwa so aus.
Code: (dl )
1
2
3
4
5
use strict;

sub schagmichtot ($) {return 1 if $_[0] eq 'ok';}

1;# Damit unser require/do sein true bekommt.


und die sub schlagmichtot kannst du dann einfach aus dem einbindenden script aufrufen als wäre sie in der Datei selbst.

Ich hoffe ich habe dich jetzt nicht ganz verwirrt.

Gruß Alex

Edit: Außerdem gibt $var = login.cgi; einen klaren Syntaxfehler wenn du den String nicht quotest.\n\n

<!--EDIT|format_c|1074536934-->
pq
 2004-01-19 21:21
#668 #668
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
als letzte zeile in dem aufgerufenen skript:
$x; # wobei $x den gewünschten wert enthält.
im hauptskript:
my $return = require "script.cgi";
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
eisbeer
 2004-01-19 21:30
#669 #669
User since
2003-08-29
347 Artikel
BenutzerIn
[Homepage] [default_avatar]
Du machst ja meine Pläne zunichte :)
Die meisten PC Probleme befinden sich zwischen Bildschirm und Stuhl...
Strat
 2004-01-19 21:50
#670 #670
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
dieser weg mit dem require schlaegt fehl, wenn da z.B. 0 zurueckgegeben wird. besser dafuer
Code: (dl )
1
2
3
4
my $var = do 'script.cgi';
unless (defined ($var)) {
die "Error: couldn't include script.cgi: $!\n";
}

sonst muesste man das require in ein eval packen, damit in diesem fall das hauptscript nicht abbricht (hatten wir diese diskussion nicht schon mal?)\n\n

<!--EDIT|Strat|1074541905-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
<< |< 1 2 >| >> 17 Einträge, 2 Seiten



View all threads created 2004-01-05 16:04.