The problem here is that what is being returned by $myObject->{DoCmd}->RunMacro("Delete")
evaluates to false in Perl.
When this code is run,
$myObject->{DoCmd}->RunMacro("Delete") or die "Could not run macro\n";
Perl will first run the code on the left side of the or
. If it evaluates to false, then it will evaluate the code on the right (which makes the program die).
Here is a quote from perldoc about falsehood in Perl :
The number 0, the strings '0' and "" , the empty list () , and undef are all false in a boolean context. All other values are true. Negation of a true value by ! or not returns a special false value. When evaluated as a string it is treated as "" , but as a number, it is treated as 0. Most Perl operators that return true or false behave this way.