10

Mooseを使い始めたばかりです。

単純な通知オブジェクトを作成していますが、入力が「Eメール」タイプであることを確認したいと思います。(今のところ、単純な正規表現の一致は無視してください)。

ドキュメントから、次のコードのように見えるはずだと思います。

# --- 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 => 'coolkids@example.com' 
);  
print $msg->{to} . "\n";

しかし、次のエラーが発生します。

「サブタイプ'Email'」の近くのmessage.pl5行目で演算子が予期した場所に文字列が見つかりました
    (サブタイプを事前に宣言する必要がありますか?)
「as'Str'」の近くのmessage.pl5行目で演算子が期待する場所に文字列が見つかりました
    (として事前に宣言する必要がありますか?)
「サブタイプ'Email'」の近くのmessage.pl5行目の構文エラー
エラー後のBEGINは安全ではありません--message.plの10行目でコンパイルが中止されました。

MooseでカスタムEメールサブタイプを作成する方法を知っている人はいますか?

Moose-バージョン:0.72 perl-バージョン:5.10.0、プラットフォーム:linux-ubuntu 8.10

4

2 に答える 2

13

私もMooseは初めてですが、subtypeについては、追加する必要があると思います

use Moose::Util::TypeConstraints;
于 2009-03-21T01:03:15.933 に答える
10

これは、以前にクックブックから盗んだものです。

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 );
于 2009-03-21T11:22:01.437 に答える