2009-03-21 20 views
10

Estoy empezando a usar Moose.¿Cómo se crean subtipos en Moose?

Estoy creando un objeto de notificación simple y me gustaría comprobar que las entradas sean del tipo 'Correo electrónico'. (Ignore por ahora el simple emparejamiento de expresiones regulares).

De la documentación que creo que debe ser similar al siguiente código:

# --- contents of message.pl --- # 
package Message; 
use Moose; 

subtype 'Email' => as 'Str' => where { /.*@.*/ } ; 

has 'subject' => (isa => 'Str', is => 'rw',); 
has 'to'  => (isa => 'Email', is => 'rw',); 

no Moose; 1; 
############################# 
package main; 

my $msg = Message->new( 
    subject => 'Hello, World!', 
    to => '[email protected]' 
); 
print $msg->{to} . "\n"; 

pero consigo los siguientes errores:

 
String found where operator expected at message.pl line 5, near "subtype 'Email'" 
    (Do you need to predeclare subtype?) 
String found where operator expected at message.pl line 5, near "as 'Str'" 
    (Do you need to predeclare as?) 
syntax error at message.pl line 5, near "subtype 'Email'" 
BEGIN not safe after errors--compilation aborted at message.pl line 10. 

Alguien sabe cómo crear un correo electrónico subtipo costumbre en Moose?

Moose-version: 0,72 perl- versión: 5.10.0, plataforma: Linux-Ubuntu 8.10

Respuesta

14

Soy nuevo a Moose así, pero creo que para subtype, es necesario agregar

use Moose::Util::TypeConstraints; 
10

Aquí hay una que robé el libro de cocina anterior:

package MyPackage; 
use Moose; 
use Email::Valid; 
use Moose::Util::TypeConstraints; 

subtype 'Email' 
    => as 'Str' 
    => where { Email::Valid->address($_) } 
    => message { "$_ is not a valid email address" }; 

has 'email'  => (is =>'ro' , isa => 'Email', required => 1); 
+1

Email :: válidos ++ # expresiones regulares para la validación de correo es el mal – brunov

+4

@bruno v - & Email :: Valid :: rfc822 usa una expresión regular para validación. – converter42

Cuestiones relacionadas