Hi there, using Net::LDAP I had a problem when I wanted to hand of a stringified version of a single result record (object of type Net::LDAP::Entry): it seems like it's only possible to dump a record directly to a file handle (Net::LDAP::Entry->dump)?!
So in case anyone else finds this useful (and in case I didn't miss something) I've appended a small patch to Net/LDAP/Entry.pm (and Net/LDAP/Entry.pod) which provides a dumpstr() method to return a stringified record. Heiko
--- Entry.pm.orig 2010-02-04 18:01:33.000000000 +0100 +++ Entry.pm 2010-02-04 18:09:15.000000000 +0100 @@ -17,7 +17,7 @@ } -$VERSION = "0.24"; +$VERSION = "0.25"; sub new { my $self = shift; @@ -295,12 +295,25 @@ sub dump { my $self = shift; + no strict 'refs'; # select may return a GLOB name my $fh = @_ ? shift : select; + print $fh $self->dumpstr(); + + return; +} + + +sub dumpstr { + my $self = shift; + my $asn = $self->{asn}; - print $fh "-" x 72,"\n"; - print $fh "dn:",$asn->{objectName},"\n\n" if $asn->{objectName}; + + my $string = ''; + + $string .= "-" x 72 . "\n"; + $string .= "dn:" . $asn->{objectName} . "\n\n" if $asn->{objectName}; my($attr,$val); my $l = 0; @@ -313,15 +326,17 @@ foreach $attr (@{$asn->{attributes}}) { $val = $attr->{vals}; - printf $fh "%${l}s: ", $attr->{type}; + $string .= sprintf "%${l}s: ", $attr->{type}; my($i,$v); $i = 0; foreach $v (@$val) { - print $fh $spc if $i++; - print $fh $v; + $string .= $spc if $i++; + $string .= $v; } - print $fh "\n"; + $string .= "\n"; } + + return $string; } sub attributes { --- Entry.pod.orig 2010-02-04 18:03:28.000000000 +0100 +++ Entry.pod 2010-02-04 18:04:40.000000000 +0100 @@ -228,6 +228,12 @@ If C<FILEHANDLE> is omitted C<STDOUT> is used by default. +=item dumpstr ( ) + +Dump the entry to a string. + +This method is intended for debugging purposes and does not +treat binary attributes specially. =item exists ( ATTR )