package My::DBI; use base 'Class::DBI::mysql'; sub setup { my $sub_class = shift; my $table = shift; $sub_class->set_up_table($table); for my $col_name ($sub_class->all_columns) { my $col_type = $sub_class->column_type($col_name); if($col_type eq 'date') { # customize accessor to do euro formatting my $real_accessor = "_${col_name}_accessor"; no strict 'refs'; *{$sub_class.'::'.$col_name} = sub { my $self = shift; if(@_) { # setting my $date = shift; if($date =~ m! (\d+) / (\d+) (?:/ (\d+) )+!x) { my $y = $3; $y += ($y < 70) ? 2000 : 1900 if($y < 100); $date = sprintf "%4d-%02d-%02d", $y,$2,$1; } return $self->$real_accessor($date); } else { my $date = $self->$real_accessor(@_); $date =~ s!(\d{4})-(\d\d)-(\d\d)!$3/$2/$1!; return $date; } } } } } #### DB<1> p $s->ses_date 23/06/2003 DB<2> x $s->{ses_date} 0 '2003-06-23' DB<3> $s->ses_date('1/2/3') DB<4> p $s->{ses_date} 2003-02-01 DB<5> x $s->{ses_date} 0 '2003-02-01'