Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2003
    Messaggi
    1,093

    recupero hash da funzione

    ciao,

    ho provato a fare questo:

    #!/usr/bin/perl;

    my %prova;
    my %resto;
    my $ita;

    %prova = ('ita', 2, 'spa', 3);

    sub stampa {
    %prova = shift;
    print $prova{'ita'};

    }
    stampa(%prova);

    ma non funziona, in pratica vorrei passare i dati dell' hash ad una funzione che mi stampi poi il valore di "ita", ma non funziona...

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Nel tuo programmino di test c'e`, a mio parere, un errore.

    La variabile %prova e` definita globale, quindi e` valida anche dentro la funzione.
    Ma nella funz. tu la ridefinisci, e non locale, ma globale.

    Quindi:
    - o rendi locale la hash dentro la funzione (con un my davanti);
    - oppure utilizzi direttamente la variabile globale.

    Con questo non sto dicendo che poi funzionera`: non ne sono sicuro.
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2003
    Messaggi
    1,093
    Perchè?..non capisco, my %prova è la definizione della variabnile sopra e quindi globale, vista dalla fuzione e da tutto lo script, dentro io gli assegno semplicemente l' argomento non la ridichiaro, la inizializzo...

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Esatto, la ricarichi con il contenuto che deve prendere da se stessa (ricorda che alla funzione hai passato il riferimento alla hash stessa).

    In pratica stai facendo:
    %prova = %prova;
    (non so se questo e` valido per una hash)


    Un'altra cosa:
    nel print manca il \n finale: questo vuol dire che non viene stampato nulla fino al prossimo \n che viene inviato al buffer di stampa.
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2003
    Messaggi
    1,093
    semplicemente bisognava passarlo come riferimento...tutto qui

    grazie lo stesso...

  6. #6
    segui il consiglio di Mich_ di curare di più la gestione dei namespace, per è sempre meglio usare:

    use strict;

    my $var;

    sub funzione {
    my $var =...
    }

    a parte questo quando tu scrivi:

    stampa(%prova);

    spalmi gli elementi dell'hash all'interno dell'array di sistema @_ nel senso che avrai:
    @_ = ('ita',2,'spa',3);

    per cui se poi all'interno della funzioni scrivi:

    %prova = shift;

    scarichi solo il primo elemento di @_ cioè 'ita'.

    dovresti fare:
    %prova = @_;
    per avere ciò che vuoi.

    Ma comunque il metodo migliore è il seguente:

    #!/usr/bin/perl

    use strict;

    my %prova;

    %prova = ('ita', 2, 'spa', 3);

    sub stampa {
    my $prova = shift;
    print $prova->{'ita'},"\n";
    }
    stampa(\%prova);
    Marco Allegretti
    shishii@tiscalinet.it
    Lang: PERL, PHP, SQL.
    Linux user n° 268623 Fedora Core 10, Fedora Core 6, Debian Sarge on mips

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2003
    Messaggi
    1,093
    ok grazie...

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.