Thread Beginner hat beginnerproblem mit Prompten von Anweisungen (4 answers)
Opened by Wild.Card at 2017-02-27 16:14

GwenDragon
 2017-02-27 16:32
#186176 #186176
User since
2005-01-17
14748 Artikel
Admin1
[Homepage]
user image
Hier wird niemand der Kopf abgerissen, höchstens mit neuem Wissen gefüllt und ein bisschen zum Lernen getriezt.


Du hast mit ($name = "Adam") der Variable $name den Wert Adam zu gewiesen!
Und der Vergleich if ($name = "Adam") ist immer wahr, da eine Zeichenkette ungleich "" immer true ist.

Vergleiche von Zeichenketten müssen mit eq erfolgen.
http://perldoc.perl.org/perlop.html
https://perlmaven.com/comparing-scalars-in-perl

Gewöhne dir bitte an am Anfang des Programms zu schreiben:
use strict; use warnings;

Wenn dein Programm jetzt kompilierst:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
use strict;
use warnings;

print "Wie ist Dein Name? "; 
$name = <STDIN>; 

if ($name = "Adam")
{
    print "Willkommen, Liebling!\n Was willst du? ";  
}
    else
{
    print "Bitte geh.";     
} 


hätte Perl dir gesagt wo was haken könnte:
Found = in conditional, should be == at a.pl line 12.
Global symbol "$name" requires explicit package name at a.pl line 5.
Global symbol "$name" requires explicit package name at a.pl line 7.
Execution of a.pl aborted due to compilation errors.


Also erst mal $name richtig definieren:
my $name;
$name = <STDIN>;


ergibt dann:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
use strict;
use warnings;

print "Wie ist Dein Name? "; 

my $name;
$name = <STDIN>; 

if ($name = "Adam")
{
    print "Willkommen, Liebling!\n Was willst du? ";  
}
    else
{
    print "Bitte geh.";     
} 

ergibt:
Found = in conditional, should be == at a.pl line 14.
a.pl syntax OK


Da weist Perl mit einer Warnung darauf hin, dass der Vergleich nicht passen könnte.

Wenn du das dann korrigierst:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
use strict;
use warnings;

print "Wie ist Dein Name? "; 

my $name;
$name = <STDIN>; 

if ($name eq "Adam")
{
    print "Willkommen, Liebling!\n Was willst du? ";  
}
    else
{
    print "Bitte geh.";     
} 


funktioniert es immer noch nicht.

Warum?
Weil du mit <STDIN> auch das Zeilenendezeichen mit eingelesen hast.
Das Zeilenende musst du vorher entfernen mit chomp;

Also so komplett:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
use strict;
use warnings;

print "Wie ist Dein Name? "; 

my $name;
$name = <STDIN>; 
chomp $name;

if ($name eq "Adam")
{
    print "Willkommen, Liebling!\n Was willst du? ";  
}
    else
{
    print "Bitte geh.";     
} 


Du kannst auch auf https://de.perlmaven.com/perl-tutorial einiges lernen.
Last edited: 2017-02-27 17:23:13 +0100 (CET)

View full thread Beginner hat beginnerproblem mit Prompten von Anweisungen