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

Anfänger-Problem



<< |< 1 2 >| >> 11 Einträge, 2 Seiten
Gast Gast
 2004-08-31 23:44
#49725 #49725
Hallo...

beschäftige mich erst seit ein paar Tagen mit Perl und versteh eigentlich garnichts..

Habe ein Beispiel-Programm(wie es jeder kennt):
Einfach Temperatur umrechen...

Code: (dl )
1
2
3
4
5
6
7
8
9
#!C:/Perl/bin/perl -w
use CGI::Carp qw(fatalsToBrowser);
$fahr=0;
$cel=0;
print 'Geben Sie eine Temperatur in Fahrenheit ein:';
chomp ($fahr=<STDIN>);
$cel=($fahr-32)*5/9;
print"$fahr Grad Fahrenheit entsprechen";
printf("%d Grad Celsius\n",$cel);


Wenn ich es in der Kommandozeile eingebe funzt es...
Aber wenn ich es über den Apache laufen lassen will bekomm ich immer die Fehlermeldung:
[Tue Aug 31 21:41:51 2004] [error] [client 127.0.0.1] [Tue Aug 31 21:41:51 2004] TEMPER~1.PL: Use of uninitialized value in concatenation (.) or string at c:\\PROGRA~1\\apache\\cgi-bin\\TEMPER~1.PL line 8.\n

Kann mir da jemand weiterhelfen..
P.S. Also Hallo Welt führt er z.B aus...


Gruß
Sascha

edit renee: [code]-Tags spendiert\n\n

<!--EDIT|renee|1093982016-->
renee
 2004-08-31 23:52
#49726 #49726
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Wenn ich das richtig verstehe, willst Du also ein CGI-Skript schreiben (oder wie meinst Du das " über den Apache laufen lassen" ?)

Du kannst mit dem Apache keine Eingaben über <STDIN> machen. Du müsstest ein Formular haben, in das der Benutzer seine Eingaben machen kann!
Außerdem muss der Content-type ausgegeben werden, damit der Browser weiß, was er darstellen soll.

Benutze immer
Code: (dl )
1
2
use strict;
use warnings;


Das hilft Dir, viele Fehler zu vermeiden.

Probier mal folgendes:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
#!C:/Perl/bin/perl -w
use strict; # variablen jetzt mit 'my' deklarieren
use warnings;
use CGI::Carp qw(fatalsToBrowser);

print "Content-type: text/html\n\n";

my $fahr = 33;
my $cel = 0;
$cel = ($fahr-32)*5/9;
print"$fahr Grad Fahrenheit entsprechen",sprintf("%3d Grad Celsius\n",$cel);
\n\n

<!--EDIT|renee|1093982144-->
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/
depiser
 2004-09-01 00:01
#49727 #49727
User since
2004-08-31
3 Artikel
BenutzerIn
[default_avatar]
Ja cgi...
Also kann ich im IE (localhost/cgi-bin/....) kein Eingabe "schreiben" ohne so ein Formular?
Jetzt hab ich mir 2 tolle Bücher gekauft und nirgends steht das drin...
renee
 2004-09-01 00:07
#49728 #49728
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Du kannst Dir ja schnell ein Formular basteln, dass Du dann mit localhost/formular.html aufrufst
Code: (dl )
1
2
3
4
5
<html>
<body><form action="./cgi-bin/temperatur.pl" method="post">
<input type="text" name="fahrenheit"><br />
<input type="submit" value="Celsius berechnen">
</form></body></html>


und Dein temperatur.pl sieht dann so aus:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!C:/Perl/bin/perl -w
use strict; # variablen jetzt mit 'my' deklarieren
use warnings;
use CGI; # das CGI-Modul ist sehr praktisch
use CGI::Carp qw(fatalsToBrowser);

my $cgi = CGI->new();
print $cgi->header(-type => 'text/html'); # früheres print "Content-type:..."

my $fahr = 33;

my $temp = $cgi->param('fahrenheit'); # die Benutzereingabe bekommen
if(defined($temp)){
$fahr = $temp;
}

my $cel = 0;
$cel = ($fahr-32)*5/9;
print"$fahr Grad Fahrenheit entsprechen",sprintf("%3d Grad Celsius\n",$cel);
\n\n

<!--EDIT|renee|1093982889-->
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/
depiser
 2004-09-01 00:15
#49729 #49729
User since
2004-08-31
3 Artikel
BenutzerIn
[default_avatar]
OK...

sobald ich jetzt in dem Formular was eingebe und bestätige will er die Datei(temperatur.pl) downloaden..

Das hat ich schon bei anderen .pl Sachen...
Beispiel printenv.pl:
Code: (dl )
1
2
3
4
5
6
7
8
9
#!C:/Perl/bin/perl -w
use CGI::Carp qw(fatalsToBrowser);
print "Content-type: text/plain\n\n";
foreach $var (sort(keys(%ENV))) {
$val = $ENV{$var};
$val =~ s|\n|\\n|g;
$val =~ s|"|\\"|g;
print "${var}=\"${val}\"\n";
}

Das zeigt er mir auch nur in der Kommandozeile an...

edit renee: ne Runde [code]-Tags spendiert\n\n

<!--EDIT|renee|1093984081-->
renee
 2004-09-01 00:26
#49730 #49730
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Dann stimmt die Konfiguration Deines Apaches nicht.

Da müsste sowas wie
Quote
AddHander cgi-script cgi pl

drinstehen.

Kann sein, dass im Moment nur
Quote
AddHander cgi-script cgi
drinsteht

Jetzt hast Du zwei Möglichkeiten (und eine wird hoffentlich funktionieren ;) ):
1.) Benenn Dein Skript in temperatur.cgi um. Denk dran, das auch im Formular zu ändern
2.) Du änderst die Konfiguration des Apache... (in die oben von mir genannte Zeile)
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/
depiser
 2004-09-01 00:37
#49731 #49731
User since
2004-08-31
3 Artikel
BenutzerIn
[default_avatar]
So...

ist wohl nicht mein Tag heute...
Habs geändert im Apache...->
# To use CGI scripts:
#
AddHandler cgi-script .cgi .pl

Will es aber immer noch downloaden...
Und wenn ich es .cgi nenne, zeigt er mir den Quellcode beim bestätigen an.
Werd wohl noch verzweifeln, aber nur so lernt man...


Gruß
Sascha
renee
 2004-09-01 00:42
#49732 #49732
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Du hast das Skript aber auch wirklich in cgi-bin??

Weiß jetzt aber auf Anhieb auch nicht, woran es liegen könnte...
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/
Crian
 2004-09-01 13:50
#49733 #49733
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Sind die Punkte davor richtig? In Renees Beispiel waren keine Punkte vor den Endungen.
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
renee
 2004-09-01 14:00
#49734 #49734
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ja, geht auch mit den Punkten...
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/
<< |< 1 2 >| >> 11 Einträge, 2 Seiten



View all threads created 2004-08-31 23:44.