Thread MooseX::Types - Problem mit Subtype und Where-Test
(8 answers)
Opened by roooot at 2010-09-22 22:18
Ich hänge mich mal an, weil ich ein weiteres Problem hierbei habe.
Ich möchte folgende Datenstruktur umwandeln: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 [ bless( { 'value' => 'mail@gmail.com', 'primary' => 1, 'type' => bless( { 'uri' => 'http://schemas.google.com/g/2005#other' }, 'WWW::Google::Contacts::Type::Rel' ) }, 'WWW::Google::Contacts::Type::Email' ) ] Er soll mir nun die erste primary Email heraussuchen. Folgender Map macht das zuverlässig: Code (perl): (dl
)
1 2 3 4 5 6 7 my @primary = map { if ($_->{primary} == 1) { $_->{value} } } @$_; return $primary[0]; Allerdings braucht man, wenn man coerce benutzen will auch immer den Zustand der Ursprungsdatenstruktur. In meinem Fall ist das eine ArrayRef -> Ref auf WWW::Google::Contacts::Type::Email -> HashRef -> Strings Wie bringe ich das jetzt im coerce unter? Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 # GooglePrimaryEmail subtype GooglePrimaryEmail, as EmailAddress, where { $_ }, message { 'validation failed for: '. Dumper $_; }; coerce GooglePrimaryEmail, from ArrayRef[HashRef[Str]], via { my @primary = map { if ($_->{primary} == 1) { $_->{value} } } @$_; return $primary[0]; }; Das wirft aber -- oh Wunder -- einen Fehler, dass er WWW::Google::Contacts::Type::Email nicht parametisieren kann. Wo liegt der Hund begraben? Viele Grüße :)
|