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:
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:
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:
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:
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)