The error seems to indicate that the
$Word object was never created, and maybe LastError() from Win32::OLE would tell you what is wrong there. Looking at the Win32::OLE::Const docs, your code doesn't look right, it should probably be:
use Win32::OLE;
use Win32::OLE::Const;
my $Word = Win32::OLE->new('Word.Application');
my $wd = Win32::OLE::Const->Load($Word);
But you never use any of the constants, it looks like you are creating them manually with "use constant ..." instead (and I don't know if those are the correct constants or if they differ on different systems), but maybe you should use the
$wd hashref to get at the constants instead.