perlnewbie: Perl-Anfänger braucht Hilfe u.a."string terminator"

Hallo! Ich habe gestern angefangen, Perl zu lernen. Ich habe gestern das "Hallo Welt" Programm erstellt, und ein zweites ähnliches.
Heute habe ich das "Krümelmonster" und das "Echo" Programm geschrieben.
Jetzt möchte ich ein Programm erstellen, welches folgendes können muss: Es soll mich nacheinander nach zwei Zahlen fragen, diese addieren und das Ergebnis herausgeben.

So sieht es bisher aus:

#!/usr/bin/perl -w
use 5.010;
use warnings;

say "zahl?";
chomp($zahl = <STDIN>);
say "zweite zahl?";
chomp($zahl2 = <STDIN>);
say "$erg = $zahl1 + $zahl2;

Aber wenn ich es ausführen möchte, steht da "cant find string terminator..."
Also fehlt mir irgendwo irgendein Zeichen, oder?
Habe fleißig gegoogelt, aber leider nichts hilfreiches gefunden.

Vielleicht könnt ihr mir ja helfen?
Danke schon mal im Voraus :)

L.G. Perlnewbie

  1. say "$erg = $zahl1 + $zahl2;

    Hab zwar von Perl keine Ahnung, aber ich vermute mal, da fehlt dir das doppelte Anführungszeichen am Ende um das String-Literal zu "beenden"

    MfG
    bubble

    --
    If "god" had intended us to drink beer, he would have given us stomachs. - David Daye
  2. Hi,

    say "$erg = $zahl1 + $zahl2;

    Aber wenn ich es ausführen möchte, steht da "cant find string terminator..."
    Also fehlt mir irgendwo irgendein Zeichen, oder?

    Ja, und zwar ein String-Begrenzer auf gut Deutsch …

    Vielleicht könnt ihr mir ja helfen?

    Schau dir die letzte Zeile da oben noch mal genau an …

    MfG ChrisB

    --
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
  3. Tach!

    say "$erg = $zahl1 + $zahl2;
    Aber wenn ich es ausführen möchte, steht da "cant find string terminator..."
    Also fehlt mir irgendwo irgendein Zeichen, oder?

    Ja, da fehlt ein String Terminator, so wie es die Meldung sagt, also ein Begrenzungszeichen für den String.

    dedlfix.

  4. Danke an dedlfix, ChrisB und bubble! Ihr habt mir echt geholfen! :)
    Ich habe jetzt das fehlende doppelte Anführungszeichen jetzt eingefügt, es sieht nun so aus:

    #!/usr/bin/perl -w
    use 5.010;
    use warnings;

    say "zahl?";
    chomp($zahl = <STDIN>);
    say "zweite zahl?";
    chomp($zahl2 = <STDIN>);
    say "$erg = $zahl1 + $zahl2";

    Das Programm funktioniert immernoch nicht, die Fehlermeldung lautet diesmal:
    Name "main::zahl1" used only once: possible typo at hallo.pl line 9.
    Name "main::erg" used only once: possible typo at hallo.pl line 9.
    Name "main::zahl" used only once: possible typo at hallo.pl line 6.

    Nach den drei Linien, die mit Name anfangen, stand da "zahl?", und wenn ich zB. "9" eingebe, stand da "zweite zahl?". Wenn ich dann wieder "9" eingebe, steht da:
    Use of uninitialized value $erg in concentanation <.> or string at hallo.pl line 9, <STDIN> line 2.
    Use of uninitialized value $erg in concentanation <.> or string at hallo.pl line 9, <STDIN> line 2.

    1. Tach!

      Danke an dedlfix, ChrisB und bubble! Ihr habt mir echt geholfen! :)
      Ich habe jetzt das fehlende doppelte Anführungszeichen jetzt eingefügt, es sieht nun so aus:

      #!/usr/bin/perl -w
      use 5.010;
      use warnings;

      say "zahl?";
      chomp($zahl = <STDIN>);
      say "zweite zahl?";
      chomp($zahl2 = <STDIN>);
      say "$erg = $zahl1 + $zahl2";

      Das Programm funktioniert immernoch nicht, die Fehlermeldung lautet diesmal:
      Name "main::zahl1" used only once: possible typo at hallo.pl line 9.
      Name "main::erg" used only once: possible typo at hallo.pl line 9.
      Name "main::zahl" used only once: possible typo at hallo.pl line 6.

      Das sieht nach Hinweisen und nicht direkt nach Fehlermeldungen aus. Und wenn du mal genau hinschaust, dann siehst du, dass sie berehtigt sind. $zahl ist nicht $zahl1. $erg hat auch keine Zuweisung erhalten, sie wird nur in der letzten Zeile ausgelesen. Da steht auch nur ein String. Dessen Inhalt wird nicht automatisch als Code angesehen. Wenn in $erg das Ergebnis der Addition stehen soll, musst du eine solche notieren - aber nicht in einem String.

      Use of uninitialized value $erg in concentanation <.> or string at hallo.pl line 9, <STDIN> line 2.

      Wie gesagt ...

      Ich hoffe, du verstehst Englisch, denn ohne das wird Programmieren sehr schwer werden, wenn du die Fehlermeldungen nicht übersetzen/verstehen kannst.

      dedlfix.

    2. Korrektes Programm mit gutem Stil:

      #!/usr/bin/perl  
      use 5.010;  
      use strict;  
      use warnings FATAL => 'all';  
        
      say 'zahl?';  
      my $zahl = <STDIN>;  
      say 'zweite zahl?';  
      my $zahl2 = <STDIN>;  
      my $erg = $zahl + $zahl2;  
      say "Das Ergebnis ist $erg.";  
      
      

      Diskussion:

      Die Option -w ist längst überholt, verwende stattdessen nur das Pragma warnings.

      Verwende das Pragma strict, damit Perl zur Compilezeit einen Fehler über undeklarierte Variablen ausgibt. Dies erzwingt, dass du verwendete Variablen definieren muss, hier mittels 'my'.

      Verwende den Import 'FATAL', um Warnungen in Fehler umzuwandeln.

      Verwende einfache Anführungsstriche, wenn keine Interpolation gewünscht/verwendet wird.

      chomp ist überflüssig wegen der durch den Plusoperator erzwungenen Typumwandlung. Ein Newline am Ende des Eingabewerts stört nicht.

    3. Hallo,

      Use of uninitialized value $erg in concentanation <.> or string at hallo.pl line 9, <STDIN> line 2.

      Bist du dir sicher, dass da "concentanation" steht? Mit dem Wort tut sich nämlich leo.org wegen Nichtexistenz schwer.
      Wenn ja, dann doofes Perl.
      Wenn nein, dann doofes copy&paste.
      Eigentlich gehört dort "concatenation" und das lässt sich dann auch sinnvoll übersetzen.

      Gruß
      Kalk

  5. Hallo nochmal!

    Ich möchte euch allen nochmal danken, ich hätte nie damit gerechnet, dass einem hier so toll geholfen wird. :)

    @CPAN, Vielen Dank besonders an dich, da du mir das Programm verbessert und fertiggestellt hast! Du hast mir echt viel Arbeit erspart. :)

    L.G. perlnewbie

    1. Om nah hoo pez nyeetz, perlnewbie!

      … ich hätte nie damit gerechnet, dass einem hier so toll geholfen wird. :)

      Warum?

      Matthias

      --
      Der Unterschied zwischen Java und JavaScript ist größer als der zwischen Mona und Monaco.

      1. Om nah hoo pez nyeetz, perlnewbie!

        … ich hätte nie damit gerechnet, dass einem hier so toll geholfen wird. :)

        Warum?

        Matthias

        weil einem in anderen foren nie so gut und so schnell geholfen wird. jedenfalls nicht in denen, die ich bisher kannte. :)

    2. ich hätte nie damit gerechnet, dass einem hier so toll geholfen wird. :)

      Ich kenne keine Seite wo einem besser geholfen werden könnte worden würde sein werden!

      Gruß
      bereits gewordener
      T-Rex

      1. Hallo,

        Ich kenne keine Seite wo einem besser geholfen werden könnte worden würde sein werden!

        Übst du für Gespräche über den Berliner Flughafen?

        Gruß
        Kalk

      2. ich hätte nie damit gerechnet, dass einem hier so toll geholfen wird. :)

        Ich kenne keine Seite wo einem besser geholfen werden könnte worden würde sein werden!

        also speziell für perl gäbs da noch ein forum, bei dem man je nach tageszeit und fragestellung ähnlich viel resonanz bekommt ;-)

        1. Om nah hoo pez nyeetz, tinita!

          also speziell für perl gäbs da noch ein forum, bei dem man je nach tageszeit und fragestellung ähnlich viel resonanz bekommt ;-)

          Selbstverständlich darfst du dieses Forum auch verlinken. ;-)

          Matthias

          --
          Der Unterschied zwischen Java und JavaScript ist größer als der zwischen Wal und Waldsterben.

          1. Selbstverständlich darfst du dieses Forum auch verlinken. ;-)

            http://www.perl-community.de/ - ist aber eigenwerbung =)