If you didn't know already, use OLEView and look at the IDL
http://www.sapnet.ru/examples/oleview_typelib.gif . For your specific problem, a variant is used when the data can be a string/floating/point/array and the API wants to deliver all versions of it. Corion's post is probably right. If it can be done in VB AND you can find example code of it in VB, it can be done with Win32::OLE. The only limitation to Win32::OLE is when you use IUnknown interfaces, which are C only interfaces. Win32::OLE only supports IDispatch interfaces. A IUnknown interface, must be called using C on machine code level. An IDispatch interface internally, briefly described, is what in Perl is calls
eval. Also, if you want to see if you truly have any data in those scalars,
Data::Dumper for the light viewing and
Devel::Peek for hard core viewing. I googled up GetFileAgesValue, that last 2 are probably intergerish. Also do "Win32::OLE->Option(Warn => 3);" in your code, you never checked if GetFileAgesValue succeeded.