1 How do I compare Class::Struct instances (objects)
  for equality (or precedence)?

E.g.,

use Class::Struct MyStruct =>
  [foo => '$',
   bar => '$',
   baz => '$'];

my MyStruct $a = MyStruct->new(foo => "a");
my MyStruct $b = MyStruct->new(bar => "b");
my MyStruct $a1 = MyStruct->new(foo => "a");

Both ($a eq $a1) and ($a eq $b) return false which is wrong for the
first expression.
I can write my own comparison, of course:

sub struct_eq ($$) {
  my ($x,$y) = @_;
  List::AllUtils::notall
    (sub { $_ }, (List::AllUtils::pairwise
                   (sub { $a eq $b }, @$x, @$y)));
}

but this does simple version does not work because some fields are
undefined and I have to check than and it quickly becomes a nightmare.
I could write a tedious function like

sub MyStruct_eq ($$) {
  my ($x,$y) = @_;
  (defined $x->foo and defined $y->foo and $x->foo eq $y->foo)
  or (not defined $x->foo and not defined $y->foo)
  .....
}

but there must be a better way.

2. Is there a way to get a list of all fields in a struct?
Class::Fields seems to claim to be able to do it, but I cannot figure
out how to use it.
Class::Fields->show_fields('MyStruct') returns nothing.
MyStruct->show_fields is not defined.
I am lost.

I would also like to be able to access MyStruct instance fields by name.
I know I can do that using hash{} instead of array[] in the definition,
but I would like to preserve the underlying array structure for passing
to Text::CSV functions (I guess I could use "values" for that too).
E.g., I want to be able to write something like

my $mystruct_foo_pos = MyStruct->getpos('foo');

and have $mystruct_foo_pos set to 0.
then I will be able to write

my MyStruct $a = MyStruct->new(...);

$a[$mystruct_foo_pos] = "a";


Thanks!

-- 
Sam Steingold (http://sds.podval.org/) on CentOS release 5.3 (Final) X
http://iris.org.il http://pmw.org.il http://memri.org http://ffii.org
http://dhimmi.com http://palestinefacts.org http://jihadwatch.org
My other CAR is a CDR.

-- 
To unsubscribe, e-mail: beginners-unsubscr...@perl.org
For additional commands, e-mail: beginners-h...@perl.org
http://learn.perl.org/


Reply via email to