Domanda

Data::Alias . Sembra essere rotto in 5.12. Può essere fisso? Sarà risolto al più presto? C'è qualche bella alternativa?

È stato utile?

Soluzione

Qualsiasi versione di Data::Alias costruito prima versione 1.08 (Rilasciato 22 Ottobre 2010 BST) non funziona con Perl 5.12 da Data::Alias prima di 1.08 è rotto in Perl 5.12. Aggiornamento alla versione più recente (1.08 o più recente) e dovrebbe funzionare!

Come nota a margine interessante, sembra essere in grado di fare gli alias possono essere venuta a Perl come caratteristica del linguaggio, in futuro, con la pulizia di := non è più il che significa una lista di attributi vuota . Non vedere l'ora! :)

Altri suggerimenti

Il modulo non è stato aggiornato dal 2007, ma si può sempre inviare un messaggio all'autore (Matthijs van Duin: xmath@cpan.org). O una segnalazione di bug come Robert menzionato nella sua risposta

Ecco alcune alternative:

  • Per quanto riguarda i moduli CPAN aggiuntivi per aliasing che il lavoro in 5.12 +:

    E alla ricerca di 'alias' su CPAN salta fuori un paio di più, nessuno sembra fornire il "fare tutto con gli alias in questa affermazione" caratteristica di dati :: Alias ??però. Così fino a quando è fisso Data::Alias, è possibile utilizzare uno di quanto sopra, o i seguenti metodi Perl puro:

  • Perl ha un supporto incorporato per aliasing qualsiasi variabile alle variabili che esistono nella tabella dei simboli. Questo viene fatto nel seguente modo:

    my $x = 1;
    our $y; # declare $y in the symbol table for the current package
    {
        local *y = \$x;  # make $y an alias of $x in the current scope
        $y++;
    }
    print $x;  # prints 2
    

    Ma, come sempre, essere consapevoli di ciò che scope dinamico / locale in realtà lo fa prima di utilizzarlo.

  • A lessicale scalare può essere utilizzato come alias nell'ambito di un ciclo:

    my $x = 1;
    for my $y ($x) {
        $y++;
    }
    print $x;  # prints 2
    

    questo tipo di alias lessicale può anche essere passato dal ciclo in una chiusura se necessario

  • È possibile creare alias matrice usando la magia aliasing del Perl per le liste di argomenti di subroutine:

    my $x = 1;
    my $alias = sub{\@_}->($x); # return a reference to its argument list, 
                                # which maintains its aliases
    $$alias[0]++;
    print $x;     # prints 2
    

    , ma che in realtà non vi darà più funzionalità rispetto riferimenti, solo con una sintassi diversa.

  • E un esempio utilizzando i riferimenti del Perl:

    my $x = 1;   
    my $y = \$x;  # take a reference to $x
    $$y++;        # dereference $y
    print $x;     # prints 2 
    

Ho appena trovato un altro potenziale opzione: Scalar::Alias, che sembra funzionare in Perl 5.12. Ovviamente, solo alias scalari, ma non richiede una virgola grasso al posto di un segno di uguale.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top