use Net::DBus;
my $bus = Net::DBus->system;
my $hal = $bus->get_service("org.freedesktop.Hal");
my $man =
$hal->get_object(
"/org/freedesktop/Hal/Manager",
"org.freedesktop.Hal.Manager"
);
my $batteries = $man->FindDeviceByCapability("battery");
my $battery;
for (@{$batteries}) {
my $o = $hal->get_object($_, 'org.freedesktop.Hal.Device');
if ($o->GetPropertyBoolean('battery.present')) {
$battery = $o;
last;
}
}