On Tue, 22 Mar 2005 17:46:30 +0000, Saurabh Singhvi
<[EMAIL PROTECTED]> wrote:
> #!/usr/bin/perl
> 
> foreach (`df -h|grep /dev/hda11`) {
>      split();
> #       our $total = $_[1];
> #       our $used = $_[2];
>         our $free = $_[3];
>         if ($free =~ /M/){
>                 $free=~ s/M//;
>                 print $free."\n";
>                 if ($free <= 10) {
>                         $mesg = "the space left is $free";
>                         print("low on space.\n");
>                         system('mailx','-s','"Space
> low"','[EMAIL PROTECTED]','<',qq($mesg)) == 0 or die "Couldn't
> mail $!";
>                 }
> 
>         }
>     }
> 
> this isn't working....i have to press Ctrl+D to send the mail.....this
> script will be cronned so i need the mail to be send
> automatically......what can i do ?? alternatives???

That's because mailx expects your operating system's EOF.  You really
need to rewrite this using Net::SMTP, or MIME::Lite, or Mail::Mailer,
or something along those lines.  as a stop-gap measure, try ending
$mesg with "\n.\n"; some versions of mail will accept a . on a line by
itself as EOF, but I don't know how that works with STDIN in pipes.

More importantly, though, if you're ever planning to expand this
script, it has a fairly fatal flaw:  the result of `` isn't
automatically evaluated in list context.  Store your system call to an
array first.  You also don't need to test m// before s///; if is
doesn't match s/// won't do anything.  And finally, you should be
getting errors about non-numeric tests since you don't strip anything
other than 'M'.  You can ignore them, but they'll eventually get
annoying.

   #!/usr/bin/perl
   use strict ;
   use warnings ;

   my @parts = `df -h|grep hda`;

   foreach (@parts) {
      (my $free = (split())[2]) =~ s/M//;
      if ($free <= 10){
         # rewrite this part with a module from cpan 
         my $mesg = "the space left is $free\n.\n";
         system('mailx','-s','"Space low"','[EMAIL PROTECTED]',
            '<',qq($mesg)) == 0 or die "Couldn't mail $!";
      }
   }

HTH

--jay

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to