Something along the lines of the following should work: package Types;
use Moose::Util::TypeConstraints; # note, need a type here, as otherwise coersions won't work if done as a subtype of 'Str' type "Types.pcr" => where { defined $_ and $_ =~ /^\d+$/ }; coerce "Types.pcr" => from "Str" => via { my $v = shift; $v =~ s/-//g; $v }; package UsageDetail; use Moose; # Note the 'coerce' flag and isa here has pcr => ( is => "rw", isa => "Types.pcr", coerce => 1 ); package main; my $dashful = UsageDetail->new( pcr => "9-8-7-6-5-4-3-2-1" ); my $dashless = UsageDetail->new( pcr => "123456789" ); print "Dashful: " . $dashful->pcr . "\n"; print "Dashless: " .$dashless->pcr . "\n" - The above gives: Dashful: 987654321 Dashless: 123456789 On Fri, Feb 26, 2010 at 2:21 PM, Steve <st...@matsch.com> wrote: > I have been attempting to solve the following problem: > > I have a class, 'UsageDetail' which takes a CSV phone call record and > inserts it into my database. One of the attributes, 'WirelessNumber' has > dashes in it, ie: '989-555-1212'. I don't want to store the dashes in the > db. I've rtfm over and over, but I haven't been successful in storing > without the dashes. I've tried subtypes, but that didn't work. BTW, the > values passed in to my constructor are not ONLY the 3-3-4 digit format, > sometimes the wireless number is 2 digits, and my WirelessNumber attr. isa > 'Str' currently. Also, I can't modify the value passed into my constructor, > as it is used for many different tables. Any suggestions are greatly > appreciated. > > Steve >