On 9/4/07, Giacomo Cerrai <[EMAIL PROTECTED]> wrote: > A typical case I feel the need for that is when you have a hierarchy of > classes where you deal with a lot of data fields and you name them with > class data members: > > our FIELDNAME1 = 'field1'; > our FIELDNAME2 = 'field2'; > ... > our FIELDNAMEn = 'fieldn'; > > and then you use them like this: > > foo({param1 => $val, > fields => { $FIELDNAME1 => $val1, > $FIELDNAME2 => $val2, > ... > $FIELDNAMEn => $valn, > }, > }); > ... > foreach my $field ($FIELD4, $FIELD2, ..., $FIELD10) { > ... > > With accessor methods this would be considerably more verbose: > > foo({param => $val, > fields => { $SomeClass->FIELDNAME1 => $val1, > $SomeClass->FIELDNAME2 => $val2, > ... > $SomeClass->FIELDNAMEn => $valn, > }, > }); > ... > foreach my $field ($SomeClass->FIELD4, $SomeClass->FIELD2, ..., > $SomeClass->FIELD10) { > ... > > This becomes quickly unreadable and is not lazy. > Furthermore every fieldname access is a method call which is too much > overhead, especially when you have many fields to deal with.
If you put the field names into an array (or hash) then it becomes a lot easier. our @FIELDNAMES = ( ... ); sub fieldnames { @FIELDNAMES }; my %fields; my @names = $SomeClass->fieldnames(); @[EMAIL PROTECTED] = ($val1, $val2, ..., $valn); foo({param1 => $val, fields => \%fields ); ... foreach my $field (@{$SomeClass->fieldnames()}) { ...