in reply to Re^2: specific field selection
in thread specific field selection

In the spirit of helping improve programming skills, please accept these minor criticisms:

Happy programming!

You could also consider the Net::SMTP (or Mail::SendEasy) modules as an alternative to using system calls to send mail.

     "As you get older three things happen. The first is your memory goes, and I can't remember the other two... " - Sir Norman Wisdom

Replies are listed 'Best First'.
Re^4: specific field selection
by javpra (Initiate) on Mar 07, 2008 at 21:54 UTC
    Thank you NetWallah, your input is appreciated. I've made the changes so hopefully my script now looks closer to what someone that knows what thery're doing would have done ;-) . I do have one new issue. I'm trying to get the script to email. According to what I read in "Programming Perl" and through Google it should work as is shown below. However the $hostname and $address variables in @email are not being seen. If I "hard code" the hostname and email address the script works fine. Anyone have any more suggestions?
    #!/usr/bin/perl use strict; use warnings; $address = 'user@gmail.com'; my @hostname = ("hostname -s"); my @email = ("echo $hostname array issue | mail -s 'Array problem' $ad +dress"); my @args = ("cciss_vol_status /dev/ciss0 > checkstatres.txt"); system(@args); open RESULTS, "checkstatres.txt" or die "can't open datafile: $!\n"; while (<RESULTS>){ my @F=split(/:/, $_); if ( $F[2] =~ /OK./){ ;; } else{ my $hostname = system(@hostname); system(@email); } } my @args2 = ("rm checkstatres.txt"); system(@args2);
      To get the hostname from the operating system, you need the text results(STDOUT) from the execution of the "hostname-s" command. (There are other ways to do this in perl, using modules).

      The system command does NOT return the contents of STDOUT, it merely returns the exit status value.

      To get the OUTPUT, use backticks (``), or the qx command.

      my $hostname = qx[hostname -s]; chomp ($hostname); # Gets rid of trailing CR
      You need to get the $hostname value filled-in BEFORE using it in the @email assignment.

      To make your program a little easier to read, when you are ready for it, lookup the next; statement. If you put a "next" in your "if" statement, you can avoid the "else" , and just place those statements after the closing brace of the "if".

           "As you get older three things happen. The first is your memory goes, and I can't remember the other two... " - Sir Norman Wisdom