walker: javascript -> perl

hi!

ich bin absoluter perldau :)

ist es moeglich ein perlprogramm zu schreiben, welches die gleichen char verschluesselungen anlegt wie javascript?
wenn ja, wo fange ich an?
wenn nein, thema erledigt!

<script type="text/javascript">
var Name = "xMyTest";
var testa = (Name.charCodeAt(2));
var testb = (Name.charCodeAt(3));
var testc = (Name.charCodeAt(4));
var testd = (Name.charCodeAt(5));
var number = Math.round((testa+testb+testc+testd)*2265.7+35.4-92861);
document.write(number);
</script>

nummer waere in diesem fall 861034

ich moechte mittels form/eingabe Name den namen an ein perl_script schicken.
diese perl_script soll den namen entsprechend umrechnen und das password (Nummer) generieren.
ausserdem waere es toll das password anschliessend auszugeben, an eine email zu senden und wenn moeglich diese daten in eine datenbank zu schreiben.

bisherige loesung:
user sendet seinen wunschnamen (xMyTest) an meine emailadresse , ich rechne das mittels obigem .js um und sende die nummer an den user zurueck.die ueberpruefung des namens und der nummer (match) findet beim anwender statt
(lokales_openGL_game .js_engine/spidermonkey).

danke >>ew<<

  1. Hallo Walker,

    ist es moeglich ein perlprogramm zu schreiben, welches die gleichen char verschluesselungen anlegt wie javascript?

    ...

    var Name = "xMyTest";
    var testa = (Name.charCodeAt(2));
    var testb = (Name.charCodeAt(3));
    var testc = (Name.charCodeAt(4));
    var testd = (Name.charCodeAt(5));
    var number = Math.round((testa+testb+testc+testd)*2265.7+35.4-92861);
    document.write(number);

    Ich frage mich ob dieser Code Sinn macht.
    Macht es Sinn, nur das 3. bist zum 6. Zeichen in die Berechnungen einzubeziehen.
    Was soll passieren wenn eine zu kurzer String eingegeben wird?
    vielleicht wär hier eine for-Schleife angebracht.

    stellst du dir das so vor:

      
    #!/usr/bin/perl  
    use warnings;  
    use strict;  
      
    my $name = shift;  
    my $testa = ord(substr($name, 2, 1));  
    my $testb = ord(substr($name, 3, 1));  
    my $testc = ord(substr($name, 4, 1));  
    my $testd = ord(substr($name, 5, 1));  
    my $number = ($testa + $testb + $testc + $testd)*2265.7 + 35.4 - 92861;  
      
    printf "%.0f\n", $number;  
    
    

    die Variante mit for-Schleife vom 2. bis zum letzten Zeichen würde dann so aussehen:

      
    my $test = 0;  
    for(1..length($name)-1) {  
            $test += ord(substr($name, $_, 1));  
    }  
    my $number = $test*2265.7 + 35.4 - 92861;  
    
    

    eine Email schicken und in eine Datenbank schreiben ist eine andere Geschichte. Hast du einen MySQL Server, läuft ein Postfix/Sendmail auf dem Server?

    Benne

    1. hi Benne!

      danke fuer deine rasche antwort
      im game frage ich ab ob
      "badname" (hitler, nazi, ....)
      min. 7 chars
      max. 20chars
      vorhanden sind, ansonsten -> BadName -> bzw. -> no register

      ein mainproblem war Math.round(.js) in perl zu schreiben, int(perl) liefert nicht die gleichen zahlen zurueck,
      die verschluesselung ohne Math.round (.js) ergibt nun die selbe zahl wie die perlverschluesselung.
      (hab die kommastellen bei der berechnung weggelassen)

      ###############mein bisheriges ergebniss
      #!/usr/bin/perl -w

      use strict;
      use CGI::Carp qw(fatalsToBrowser);

      my $Name = "xMyName";
      my $testA = substr($Name,2,1);
      my $testB = substr($Name,3,1);
      my $testC = substr($Name,4,1);
      my $testD = substr($Name,5,1);
      my $XestA = (ord($testA));
      my $XestB = (ord($testB));
      my $XestC = (ord($testC));
      my $XestD = (ord($testD));
      my $XtestX =(($XestA+$XestB+$XestC+$XestD)*2265+35-92861);

      my $PwA = substr($XtestX,0,2);
      my $PwB = substr($XtestX,2,2);
      my $PwC = substr($XtestX,4,2);

      print "Content-type: text/html\n\n";
      print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n";
      print <<"ENDE";
      <html><head><title>Password</title></head><body>
      <h1>My$PwA-NA$PwC-ME$PwB</h1>
      </body></html>
      ENDE
      ###############mein bisheriges ergebniss
      ergibt password : My82-NA99-ME44

      dein beispiel is bei den variablen kuerzer, so werd ich das gerne uebenehmen, bloss wie bekomme ich den namen in das script, ich such und such und find nix in selfhtml

      my $Name ist ja eigentlich nicht vordeffiniert, das wird ja erst durch das formular eingetragen

      ich wollte die daten einfach in ein text.file (data.txt) schreiben mehr nicht, keine aufwendige datenbankloesung, denk das waer hier etwas oversized.

      ew<<

      1. Hallo walter,

        ein mainproblem war Math.round(.js) in perl zu schreiben, int(perl) liefert nicht die gleichen zahlen zurueck,

        wie in meinem Beispiel geht das elegant ohne Zusatzmodule mit printf:
        printf "%.0f", 7.5;
        ergibt 8

        die verschluesselung ohne Math.round (.js) ergibt nun die selbe zahl wie die perlverschluesselung.
        (hab die kommastellen bei der berechnung weggelassen)

        ###############mein bisheriges ergebniss
        #!/usr/bin/perl -w

        benutze lieber "use warnings" statt -w, da sonst Warnungen für alle eingebundenen Module eingeschalten werden

        use strict;
        use CGI::Carp qw(fatalsToBrowser);

        ...

        print "Content-type: text/html\n\n";
        print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n";
        print <<"ENDE";
        <html><head><title>Password</title></head><body>
        <h1>My$PwA-NA$PwC-ME$PwB</h1>
        </body></html>

        schau dir mal PROGRAMMING STYLE (header(); start_html()) des CGI Moduls an

        my $Name ist ja eigentlich nicht vordeffiniert, das wird ja erst durch das formular eingetragen

        das empfehle ich den Einsatz des CGI Moduls: FETCHING THE VALUE OR VALUES OF A SINGLE NAMED PARAMETER

        ich wollte die daten einfach in ein text.file (data.txt) schreiben mehr nicht, keine aufwendige datenbankloesung, denk das waer hier etwas oversized.

        ja. Wobei das mit dem DBI Modul kaum Aufwand ist.

        Gruß,
        Benne

        --
        ie:% fl:( br:> va:) ls:> fo:| rl:° ss:) de:[ js:| ch:| mo:} zu:)
        1. hi Benne!

          ich hab folgendes am anfang des scripts eingefuegt

          use CGI;
          my $query = new CGI;
          my $Name = $query->param("name");

          ########### formular #############
          <form action="convert.pl" method="post">
          <input name="name" type="text" size="40" maxlength="20">
          <input type="submit"><input type="reset">
          ########### formular #############

          scheint problemlos zu laufen, namen werden korrekt in zahlen umgerechnet, kein error 500, ...
          is es auch syntaxisch korrekt?

          sendmail habe ich , waere also kein problem ich seh mir das mal naeher an, vielleicht kann ich die daten sogar versenden
          textfile mit daten ist noch ein buch mit sieben siegeln

          ew<<

        2. hi!

          das anlegen einer .log_datei hab ich inzwischen mal so geloest, daten werden im "myLogFile.log" auch richtig angelegt.
          das subroutine wird aufgerufen nachdem die bildschirm_ausgabe stattgefunden hat

          ######### sub im script ###########
          sub WriteToLog()
          {
          open(DATA, "+>>myLogFile.log") || die "Log-Datei nicht gefunden!";
          flock(DATA, LOCK_SH);
          my $User = $Name;
          my $Pass = "0A$PwA-WN$PwC-EE$PwB";
          select(DATA);
          print "\n<tr><td>User : $User </td><td>Pass : $Pass</td><td>";
          close(DATA);
          }
          ######### sub im script ###########

          ew<<