in reply to trouble sending mail

    $mailitem = $outlook->CreateItem{olMailItem); is failing (it returns undef). Then, instead of tickling an OLE object,     $mailitem->{To} = "..."; creates a new hash instead, which you discover later when you try     $mailitem->Send(); The underlying problem is that you haven't defined olMailItem. You can fix this* by adding     use constant olMailItem => 0; to the top of your script.

You would have discovered this yourself had you checked for undef after each attempt to create a new OLE object. Blindly assuming that each OLE object creation succeeds is not a good strategy.

* or by following Adam's advice below. His is the more robust advice, though several of Microsoft's own books (e.g., Building Applications with Outlook 97) use the magic constant 0 in this case.