Thanks for that bit. I changed my code so that I am calling a method
from my BUILDARGS sub. This seems to be working quite nicely.
Steve
On 2/26/2010 2:30 PM, Jesse Luehrs wrote:
On Fri, Feb 26, 2010 at 12:52:44PM -0500, Steve wrote:
I've moved on to a slightly more complex situation. The same phone call
record contains two different date fields. One is a string like 'Jan
21, 2010' (incidentally, this date is repeated for each record, as it
represents the end of the billing cycle), which I have successfully
converted with:
type 'My::Types::Date' => as 'Str' => where { defined $_ and $_ =~
/^\d{8}$/ };
coerce 'My::Types::Date' => from 'Str' => via { my $d = shift;
if ($d =~ /^([a-zA-Z]+) ([0-9]+).*(\d\d\d\d)$/) { ...this code works}
The second situation is complex. Instead of a full date with year,
month, and day of the call, I am given MM/DD. No year. I have logic
that 'figures out' the year based on the billing cycle end date (above)
which I put into&explodeDate. Being a big fan of perl's debugger, I've
identified that by the time the subroutine gets called, I have no
reference to either the date, or my object.
elsif ($d =~ \d\d\/\d\d) {$d =&explodeDate;}
sub explodeDate {
my $self = shift; # Nothing here...
}
Well, you're calling explodeDate as a function, not as a method. Try
$self->explodeDate (or more probably, $self->explodeDate($d), since you
seem to be expecting it to get the date also).
Also, you shouldn't use a leading& to call regular functions, even when
you're not trying to call them as methods... it's equivalent in this
case, but can cause issues in other cases (particularly with functions
with prototypes).
Is this proper use of coercion, or is there a better way? If I'm on the
right track, how do I get access to my object within 'explodeDate'?
-doy
No virus found in this incoming message.
Checked by AVG - www.avg.com
Version: 9.0.733 / Virus Database: 271.1.1/2711 - Release Date: 02/26/10
02:34:00