lib/Exim.pm
branchng
changeset 5 2407e371ec7a
child 6 31f1e0c6344d
equal deleted inserted replaced
4:90735b404da2 5:2407e371ec7a
       
     1 package Exim;
       
     2 
       
     3 use strict;
       
     4 use warnings;
       
     5 use Carp;
       
     6 
       
     7 my %basename;
       
     8 my %binary;
       
     9 my %config;
       
    10 
       
    11 sub new {
       
    12     my $class = ref $_[0] ? ref shift : shift;
       
    13 
       
    14     bless my $self = \my $anonymous => $class;
       
    15     my %arg = @_;
       
    16 
       
    17     $basename{$self} = $arg{basename} ? $arg{basename} : "exim4";
       
    18     $config{$self}   = $arg{config}   ? $arg{config}   : "$arg{basename}.conf";
       
    19     $binary{$self} = $self->_find_exim;
       
    20 
       
    21     return $self;
       
    22 }
       
    23 
       
    24 sub binary {
       
    25     my $self = shift;
       
    26     return $binary{$self};
       
    27 }
       
    28 
       
    29 sub run {
       
    30     my $self = shift;
       
    31     return qx/$binary{$self} -C $config{$self} @_/;
       
    32 }
       
    33 
       
    34 sub get {
       
    35     my $self = shift;
       
    36     chomp(local $_ = $self->run(-bP => shift));
       
    37     croak $_ unless /=/;
       
    38     return /=\s*(.*)/;
       
    39 }
       
    40 
       
    41 sub DESTROY {
       
    42     my $self = shift;
       
    43     delete $basename{$self};
       
    44     delete $binary{$self};
       
    45     delete $config{$self};
       
    46 }
       
    47 
       
    48 sub _find_exim {
       
    49     my $self = shift;
       
    50     my %seen;
       
    51     foreach (split /:/, "$ENV{PATH}:/usr/local/sbin:/usr/sbin:/sbin") {
       
    52         next if $seen{$_};
       
    53         return "$_/$basename{$self}" if -x "$_/$basename{$self}";
       
    54     }
       
    55     croak "Can't find the exim binary ($basename{$self})\n";
       
    56 }
       
    57 
       
    58 1;