[Chapter 19] 19.4 Variants
Author: Randal L. Schwartz, Erik Olson & Tom Christiansen
Date: 1999-07-02T01:37:19Z

#

| Chapter 19 OLE Automation |

## 19.4 Variants

In order for automation controllers and servers to cooperate, they have to have some way to agree on the type of data that they're passing. Automation accomplishes this through a data type called a `VARIANT`. The `VARIANT` data type is built on a C-language union. It contains a type field that identifies that type of data in the union (things such as strings, numbers, automation objects, etc.) and a field that contains the data.

Usually, Perl handles data-type conversion for you. If you need more control, though, you can create a `Variant` object and specify the type yourself. Perl provides access to the types listed in Table 19.3.

Table 19.3: Variant Types
Variant Type | Description
--- | ---
VT_UI1 | Unsigned character (1 byte)
VT_I2 | Signed integer (2 bytes)
VT_I4 | Signed integer (4 bytes)
VT_R4 | Floating point (4 bytes)
VT_R8 | Floating point (8 bytes)
VT_DATE | OLE Date (floating-point value measuring days since midnight, Dec. 30, 1899)
VT_BSTR | OLE String
VT_CY | OLE Currency
VT_BOOL | OLE Boolean

By default, Perl converts integer data to the VT_I4 type, string data to the VT_BSTR type, and floating-point data to the VT_R8 type. Usually, these conversions are what you'd expect, but let's look at how you might specify your own type:

    $vt = new OLE::Variant(OLE::VT_DATE, "May 31, 1997" );
    $Message->{TimeSent} = $vt;

This example first creates a Variant object, setting the type to `VT_DATE` and the date to "May 31, 1997." It then assigns the date to the `Message` object TimeSent property (something you might do if you were posting a message to a folder, for example).

19.3 Using Automation Objects |  | 19.5 Tips and Techniques