Re: @Profis: Perl-Problem mit barewords - baseportal Forum - Web-Anwendungen einfach, schnell, leistungsfähig!
baseportal
English - Deutsch "Es gibt keine dummen Fragen - jeder hat einmal angefangen"

 baseportal-ForumDie aktuellsten 10, 30, 50, 100 Einträge anzeigen.  

 
 Ausgewählter Eintrag: Zur Liste 
    Beitrag von Jurenda (305 Beiträge) am Samstag, 24.Dezember.2005, 00:47.
    Re: @Profis: Perl-Problem mit barewords

      > Und was mich interessieren würde: Wie kannst Du barewords von Skalaren unterscheiden?
      

      Bingo, Du stellst die entscheidende Frage (bringt mich seit Monaten zur Verzweiflung) :(((

      Ich kann es nicht, aber das 'require' kann das!!!!!!!

      Nun ja, im Prinzip läßt Perl das Überschreiben sämtlicher eingebauten Funktionen zu. Trotzdem halte ich das für 'use' und 'require' für unmöglich, solange es nicht möglich ist, korrekt mit barewords umgehen zu können (z.B. diese von Scalaren zu unterscheiden,...).

      Und mich bringt das ziemlich durcheinander, wenn ein Ausdruck anstelle von links nach rechts, plötzlich von rechts nach links ausgewertet wird und er dabei EINDEUTIG falsch ausgewertet wird (-> Suche eines Funktionsnamens in einem falschen Namespace).

      Es verwirrt mich, wenn der Ausdruck:

        dosomething thing;
      

      interpretiert wird als:

        thing::dosomething;
      

      Nirgendwo in der Prel-Dokumentation habe ich die Notation:

        funktionsname namespace;
      

      gefunden!

      Grüße Andreas :-})


    Antworten

 Alle Einträge zum Thema: Zur Liste 
    Beitrag von Jurenda (305 Beiträge) am Freitag, 23.Dezember.2005, 11:41.
    @Profis: Perl-Problem mit barewords

      Hallo liebe Wissenden:

      Ich habe da ein gröberes Problem mit dem Perl-Compiler (sowohl 5.6.1 als auch 5.8.3).

      Beim Compilieren sucht der Compiler plötzlich Subroutinen in einem falschen Namespace!

      Folgender Quellcode:

       <perl>
       sub dosomething ($;$) {
        out "I do something with: $_[0] $_[1]<br>";
       }
      
       out "<b>HIER GEHTS ZUM 1. TEIL</b><br>";
       dosomething thing,1;

       out "<b>WIEDERHOLUNG VOM 1. TEIL</b><br>";
       dosomething thing,2;
      
       out "<b>COMPILER ERZEUGT NEUEN NAMESPACE thing</b><br>";  if (0) { thing::test(); } # .............................. hier wird nun thing:: erzeugt!  out "<b>HIER GEHTS ZUM 2. TEIL</b><br>";  dosomething thing,3; # .............................. hier gibts nun einen absolut skurielen Fehler :(((
       </perl><perl> # Fehler rücksetzen  out "<b>WIEDERHOLUNG VOM 2. TEIL</b><br>";
       dosomething 'thing',4;

       out "<b>2. WIEDERHOLUNG VOM 2. TEIL</b><br>";
       dosomething(thing,5);
      
       </perl>

      Nachdem der Compiler bei thing::test den Namespace thing:: erzeugt hat, ist er nicht mehr fähig, thing als bareword zu erkennen!

      So schaut das Ergebnis dieses Beispiels aus: http://baseportal.de/cgi-bin/baseportal.pl?htx=/direkt/problems/bareword/zzzz_bareword2

      Hat jemand von Euch eine Ahnung, was da läuft?
      In der Perl-Dokumentation habe ich dazu bisher überhaupt nichts dazu gefunden.
      Lediglich in http://search.cpan.org/dist/perl/pod/perlsub.pod#Prototypes habe ich viele Möglichkeiten gefunden, Prototypes zu definieren, die eingebauten Funktionen entsprechen, jedoch der obige Fall ist nicht dabei.

      Hingegen bei den Funktionen 'use' und 'require' hat Perl keinerlei Probleme mit barewords und macht den oben beschriebenen Mist NICHT und kann sogar zwischen bareword und Scalar unterscheiden.
      Hat jemand von Euch eine Ahnung, wie ich das meiner Funktion beibringen kann?

     Antworten

    Beitrag von H.Fehde (724 Beiträge) am Freitag, 23.Dezember.2005, 14:40.
    Re: @Profis: Perl-Problem mit barewords

      ... im 2.Teil geändert,

      <perl>
      # Fehler rücksetzen
       out "<b>WIEDERHOLUNG VOM 2. TEIL</b><br>";
       dosomething 'thing',4;
      
       out "<b>2. WIEDERHOLUNG VOM 2. TEIL</b><br>";
       dosomething 'thing',5; #
      </perl>
      

      ... meinst Du es so ? . Gruß Harald

     Antworten

    Beitrag von H.Fehde (724 Beiträge) am Freitag, 23.Dezember.2005, 14:48.
    P.S. :Re: @Profis: Perl-Problem mit barewords

      ... oder sowas:

      <perl>
      # Fehler rücksetzen
       out "<b>WIEDERHOLUNG VOM 2. TEIL</b><br>", dosomething 'thing',4;
       out "<b>2. WIEDERHOLUNG VOM 2. TEIL</b><br>";
       dosomething 'thing',5; #
      </perl>
      

     Antworten

    Beitrag von Christoph Bergmann (8110 Beiträge) am Freitag, 23.Dezember.2005, 16:41.
    Re: @Profis: Perl-Problem mit barewords

      Ah, mal was Heftigeres ;)

      Aber ist das so verwunderlich? Ich vermute mal Perl legt irgendwo in der Symboltabelle nach dem Erzeugen des Namespaces "thing" an - und damit ist es eben kein bareword mehr, sondern ein Namespace den man alleine nich einfach hinschreiben kann...

      Wozu brauchst Du das?

      Und was mich interessieren würde: Wie kannst Du barewords von Skalaren unterscheiden?

     Antworten

    Beitrag von Jurenda (305 Beiträge) am Samstag, 24.Dezember.2005, 00:47.
    Re: @Profis: Perl-Problem mit barewords

      > Und was mich interessieren würde: Wie kannst Du barewords von Skalaren unterscheiden?
      

      Bingo, Du stellst die entscheidende Frage (bringt mich seit Monaten zur Verzweiflung) :(((

      Ich kann es nicht, aber das 'require' kann das!!!!!!!

      Nun ja, im Prinzip läßt Perl das Überschreiben sämtlicher eingebauten Funktionen zu. Trotzdem halte ich das für 'use' und 'require' für unmöglich, solange es nicht möglich ist, korrekt mit barewords umgehen zu können (z.B. diese von Scalaren zu unterscheiden,...).

      Und mich bringt das ziemlich durcheinander, wenn ein Ausdruck anstelle von links nach rechts, plötzlich von rechts nach links ausgewertet wird und er dabei EINDEUTIG falsch ausgewertet wird (-> Suche eines Funktionsnamens in einem falschen Namespace).

      Es verwirrt mich, wenn der Ausdruck:

        dosomething thing;
      

      interpretiert wird als:

        thing::dosomething;
      

      Nirgendwo in der Prel-Dokumentation habe ich die Notation:

        funktionsname namespace;
      

      gefunden!

      Grüße Andreas :-})

     Antworten


     
 Liste der Einträge von 20851 bis 21001:Einklappen Zur Eingabe 
Neueste Einträge << 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | Neuere Einträge < Zur Eingabe  > Ältere Einträge | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 >> Älteste Einträge


Zurück zur Homepage

© baseportal.de. Alle Rechte vorbehalten. Nutzungsbedingungen



powered in 0.04s by baseportal.de
Erstellen Sie Ihre eigene Web-Datenbank - kostenlos!