Did someone say "trap"? Test::Trap to the rescue! :)
The error message you want is printed on STDOUT on my machine. I was expecting STDERR. Other errors may come from the Perl code, so we want the $@ as well. My very own Test::Trap can give you all! :)
The example below, based on your code, makes use of the :output(systemsafe) pseudo layer, new in version 0.1.0. Older versions of Test::Trap may use :flow:stderr(systemsafe):stdout(systemsafe) to much the same effect.
#!/usr/bin/perl -w
use Test::Trap qw/ :output(systemsafe) /;
use MIME::Lite; # send mail attachments
use Sys::Hostname; # Used to insert hostname in emails
use Cwd; # Get current full dir for error msgs
use strict; # Enforce declarations
my (
$hostname, # name of this box for sending
$prog_full_name, # prog path + name
$contact_email, # contact email address
$msg, # msg object
$sender, # sender of email
$subject, # subject line in email
$body_text # actual email msg text
);
# Get hostname anyway we can using Sys::Hostname;
# tries syscall(SYS_gethostname), `hostname`, `uname -n`
$hostname = Sys::Hostname::hostname();
# Get program full path name
$prog_full_name = cwd()."/${0}";
# Set the fields required by Mailer...
$contact_email = '';
$sender = "$prog_full_name";
$subject = "$prog_full_name: Asset Mgr Report";
$body_text = "This is an automated message:\n\n";
# ... and send it
# Header
$msg = MIME::Lite->new(
From => $sender,
To => $contact_email,
Subject => $subject,
Type =>'multipart/mixed'
);
# Body Content
$msg->attach(
Type => 'TEXT',
Data => $body_text
);
# Attachment
$msg->attach(
Type => 'text/plain',
Path => "/home/chrism/t.cvs",
Filename => "t.csv",
Disposition => 'attachment'
);
# Send
trap { $msg->send or print "Error: $@\n" };
$_ and print "Error: $_\n" for $trap->die, $trap->stdout, $trap->s
+tderr;
print "Just another Perl ${\(trickster and hacker)},"
The Sidhekin proves Sidhe did it!
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.