#!/usr/local/bin/perl
use strict;
use Net::LDAP;
use Net::LDAP::Constant qw(LDAP_CONTROL_PREREAD LDAP_CONTROL_POSTREAD);
use Net::LDAP::Control::PreRead;
use Net::LDAP::Control::PostRead;

my ($ldaphost, $binddn, $bindpw) = ("", "", "");
my $attr = "someIntegerAttr";

my $ldap = Net::LDAP->new($ldaphost);
$ldap->bind($binddn, password => $bindpw);

my $preread = Net::LDAP::Control::PreRead->new(value => $attr, critical => 1);
my $postread = Net::LDAP::Control::PostRead->new(value => $attr, critical => 1);

my $sd = $ldap->search(filter => $filter, base => $base);

my $e = $sd->pop_entry;
$e->increment($attr => 1);
my $msg = $e->update($ldap, control => [$preread, $postread]);

if($msg->code) {
  die $msg->error_text;
} 

my ($pre) = $msg->control(LDAP_CONTROL_PREREAD);
print "Pre-update: " . $pre->entry->get_value($attr). "\n";

my ($post) = $msg->control(LDAP_CONTROL_POSTREAD);
print "Post-update: " . $post->entry->get_value($attr). "\n";
