Sometimes modules just come together in such a way as to make my life very easy and enable me to dazzle the people I work for. In this case, simplified APIs to more complicated functionality: MIME::Lite and Spreadsheet::WriteExcel::Simple. Here's an example of how to create and mail a simple spreadsheet as an attachment. For bonus points, generalize it to get the data from DBI or a Data::Table object.
#!/usr/local/bin/perl5.8.0 -- # -*- perl -*-
use warnings;
use strict;
use Spreadsheet::WriteExcel::Simple;
use MIME::Lite;
my $xls = Spreadsheet::WriteExcel::Simple->new;
$xls->write_bold_row([qw(col1 col2 col3)]);
for (1 .. 5)
{
    $xls->write_row([qw(one two three)]);
}
my $msg = MIME::Lite->new(
			  From => 'me@example.com',
			  To => 'you@example.com',
			  Subject => 'Example: mailing an Excel workbook',
			  Type => 'TEXT',
			  Data => <<'EOF',
Here is your example Excel workbook.
EOF
			  );
$msg->attach(
	     Type => 'application/vnd.ms-excel',
	     Data => $xls->data,
	     Filename => 'example.xls',
	     );
$msg->send;
--Nat