Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    2

    [Perl]

    Salve, scrivo perchè ho un problema con uno script in perl. In pratica lo script si connette ad un server che rimanda la risposta all'interrogazione fatta dal codice. Il mio problema, sapendo qual'è la sintassi esatta della risposta del server, è quello di estrarre solo la parte di risposta che mi interessa. Cioè, ad esempio, sapendo che la parte di risposta da estrarre è posta fra parentesi, che sintassi devo usare per riconoscerla e stamparla a video?

    Esempio: "rispostarisposta qui)"

    Presumo che debba usare sempre la funzione while ($risp = $sock){if ($risp ...)...

    Grazie per l'attenzione...

  2. #2
    Non ho capito molto, pero' provo a risponderti.

    Te hai l'handle della connessione che si chiama $server.

    Quando ricevi un pacchetto usi la funzione recv, giusto?
    Se la stringa di risposta la metti in uno scalare che problema c'è ad estrarla? puoi usare una RE.
    no?

    Posta il codice va.
    ...

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    2
    innanzitutto mi scuso per non aver messo il titolo completo al topic, nn me ne ero accorto..
    allora: io ho uno script che utilizzando il modulo Io::Socket si connette ad un $server. gli invia certi dati e il server di rimbalzo risponde dopo aver ricevuto questi.
    io, già so la risposta quale sarà, ma di questa a me interessa solo una piccola parte, che sta fra parentesi. solitamente utilizzavo per "sgrossare" le risposte del server la stringa simile a questa:

    while($risposta = <$sock>) {
    if ($risposta =~ /([0-9a-f]{32})/) {
    print " Hash is: $1";
    }}

    dove $sock è IO::Socket::INET->new(Proto=>"tcp", PeerAddr=>"$server", PeerPort=>"80").

    in questo caso però sembra non funzionare ( ex: if($risposta =~ risp(PAROLA_DA_PRENDERE) ) )

    al momento ancora non ho un codice vero e proprio...
    spero di aver chiarito...

  4. #4
    Strano che non funzioni. Prova a salvare la risposta che ricevi o a stamparla a video.
    Se i dati che ricevi sono corretti, controlla l'RE.
    io ora ho provato questo codice e funziona:

    my $risposta="Risposta:ciao qualcosa";
    if ($risposta =~ /Risposta.+)/) {
    print "Hash is: $1\n";
    }
    <stdin>;
    -------------------------
    Altro esempio:
    my $risposta="Rispostaciao qualcosa)";
    if ($risposta =~ /Risposta:\((.+?)\)/) { # Prendi quello tra parentesi.
    print "Hash is: $1\n";
    }
    <stdin>;


    PS:
    Ho notato ora che nella tua RE usi [0-9a-f], quindi diventa case sensitive, se l'HASH contiene anche caratteri maiuscoli l'RE non viene valutata e non viene fatto l'if.
    Risolvi in due modi.
    a) [0-9a-fA-F]
    b) if ($risposta =~ /([0-9a-f]{32})/i) { # AGgiungi una i per dire che è INSENSITIVE.


    Non so se ho indovinato l'errore.
    Poi, sono anche molto stanco che è tardi ora ç_ç
    ...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.