[prev] [thread] [next] [Date index for 2004/05/14]
Hi, I've just started using Class::DBI, and it's making my life a lot easier already! Great tool. But there's always a but. I have a MySQL table with lots of column names that have spaces in them, or other characters like '-' or '.', e.g. Membership No. E-mail Website address Changing the column names is a possible, but difficult option. I'd prefer something Lazier. I can set the CDBI subclass up by escaping the column names like so: My::Class->columns( Primary => '`Membership No`' ); My::Class->columns( Essential => ( '`E-mail`', '`Website address`', 'some_other', 'well_behaved_name', ); But then when I try to extract the data like this: foreach my $column ( sort My::Class->columns ) { sprintf '%s: %s', $column, $my_class_object->$column; } I get no output for the ugly column names (I mean, I get column names like `e-mail` and `website address`, but no values). I've tried re-naming these columns with sub accessor_name { my ($class, $column) = @_; $column =~ s/\s/_/g; $column =~ s/-/_/g; $column =~ s/`//g; return $column; } and then calling $my_class_object->website_address which produces no error, but still no output. With or without the accessor_name sub, Data::Dumper shows that the object has double entries for the ugly column names, like so: ... '`website address`' => undef, ... 'website address' => 'www.example.com', ... So I CAN retrieve the data by directly accessing the hashref like this: print $my_class_object->{ 'website address' }; but that makes me feel dirty. Can I be Lazy and clean at the same time, or must I choose my poison? Cheers! David. -- Dr. David R. Baird ZeroFive Web Design dave@xxxxxxxx.xx.xx http://www.zerofive.co.uk
misbehaving column names
|
Generated at 11:34 on 01 Dec 2004 by mariachi v0.52