lib/Exim.pm
branchng
changeset 5 2407e371ec7a
child 6 31f1e0c6344d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/Exim.pm	Fri Jul 16 17:12:22 2010 +0200
@@ -0,0 +1,58 @@
+package Exim;
+
+use strict;
+use warnings;
+use Carp;
+
+my %basename;
+my %binary;
+my %config;
+
+sub new {
+    my $class = ref $_[0] ? ref shift : shift;
+
+    bless my $self = \my $anonymous => $class;
+    my %arg = @_;
+
+    $basename{$self} = $arg{basename} ? $arg{basename} : "exim4";
+    $config{$self}   = $arg{config}   ? $arg{config}   : "$arg{basename}.conf";
+    $binary{$self} = $self->_find_exim;
+
+    return $self;
+}
+
+sub binary {
+    my $self = shift;
+    return $binary{$self};
+}
+
+sub run {
+    my $self = shift;
+    return qx/$binary{$self} -C $config{$self} @_/;
+}
+
+sub get {
+    my $self = shift;
+    chomp(local $_ = $self->run(-bP => shift));
+    croak $_ unless /=/;
+    return /=\s*(.*)/;
+}
+
+sub DESTROY {
+    my $self = shift;
+    delete $basename{$self};
+    delete $binary{$self};
+    delete $config{$self};
+}
+
+sub _find_exim {
+    my $self = shift;
+    my %seen;
+    foreach (split /:/, "$ENV{PATH}:/usr/local/sbin:/usr/sbin:/sbin") {
+        next if $seen{$_};
+        return "$_/$basename{$self}" if -x "$_/$basename{$self}";
+    }
+    croak "Can't find the exim binary ($basename{$self})\n";
+}
+
+1;