visual studio microsoft español descargar community perl enums

perl - microsoft - visual studio installer



¿Perl tiene un tipo de enumeración? (7)

De hecho, Perl tiene un tipo de enumeración como en C. Prueba esto para obtener más detalles.

perldoc enum

Por ejemplo:

use enum qw(HOME WORK MOBILE);

Ahora tenemos:

HOME == 0 WORK == 1 MOBILE == 2

También puede establecer los indecis usted mismo:

use enum qw(HOME=0 WORK MOBILE=10 FAX);

Ahora tenemos:

HOME == 0 WORK == 1 MOBILE == 10 FAX == 11

Mire aquí para más detalles.

Tenga en cuenta que esto no es compatible con todas las versiones de Perl. Sé que v5.8.3 no lo admite, mientras que v5.8.7 sí lo admite.

¿Tiene Perl un tipo de enumeración que se adhiere a las mejores prácticas o, lo que es más importante, lo necesita?

El proyecto en el que trabajo uno usa cadenas por todos lados para indicar cosas que típicamente usarían un Enum en un lenguaje como C #. Por ejemplo, tenemos un conjunto de números de teléfono en una matriz de valores hash, cada uno asociado con un tipo de teléfono ("Inicio", "Trabajo", "Móvil", etc.):

$phone_number->{type} = ''Home'';

¿Sería suficiente utilizar un conjunto de variables de solo lectura aquí o debería usarse un Enum? Encontré un módulo enum en CPAN pero parece usar palabras simples que infringen una de las mejores prácticas de Perl . Mi manera de pensar sobre el uso de variables de solo lectura es algo como esto:

use Readonly; Readonly my $HOME => ''Home''; Readonly my $WORK => ''Work''; Readonly my $MOBILE => ''Mobile''; $phone_number->{type} = $HOME;

¿Es este un buen enfoque o hay una mejor manera?


Esto funcionó bien para mí ...

use constant MYENUM => qw(ZERO ONE TWO THREE FOUR); BEGIN { eval "use constant (MYENUM)[$_] => $_;" foreach 0..(MYENUM)-1; }

Puede usar ZERO, ONE, TWO etc. como constantes e imprimir su nombre simbólico usando (MYENUM)[$value] .


Me temo que Perl está completamente parapléjico cuando se trata de estas enumeraciones y constantes con nombre:

  • enum y Readonly no son módulos principales (al menos en Perl 5.8, que acabo de comprobar). Por lo tanto, estos pueden no estar disponibles en un sistema donde uno no tiene libertad para instalar nuevos módulos.

  • "use Constant" con "use strict" (que siempre se debe usar) es completamente inutilizable, ya que genera una carga de horribles mensajes de error del formulario:

    Bareword "FRED" no está permitido mientras que "termines estrictos" en uso

¡Esperemos que hayan resuelto este desastre en Perl 6, si es que alguna vez ve la luz!


No, no hay una construcción enum incorporada. Perl no hace mucha escritura estricta, por lo que creo que en realidad hay poca necesidad de una.

En mi opinión, el enfoque de Readonly que Readonly es sólido.

También existe el pragma constant más tradicional.

use constant { HOME => ''Home'', WORK => ''Work'', MOBILE => ''Mobile'', }; $phone_number->{type} = HOME;

Detrás de escena, establece una función para cada constante que devuelve el valor, como tal.

sub HOME () { ''Home'' }

Me quedaría con Readonly menos que quiera aprovechar esa propiedad, por ejemplo:

package Phone::Type; use constant { HOME => ''Home'', #... }; package main; print Phone::Type->HOME, "/n";



Siempre debe recordar que PBP es aconsejable, el libro en sí mismo. Necesita interpretar las pautas en lugar de adoptarlas servilmente.


Tu camino es más que adecuado.

También puede crear enumeraciones con Moose :: Util :: TypeConstraints, si está utilizando Moose. (Que deberías ser)