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 )
 

Reply via email to