http://www.perlmonks.org?node_id=164208


in reply to pack()ing Win32 Structures

A couple of things -

  1. 'u' in the pack template is UUEncoded text, I think you want 'U' for unicode, right? The template you are looking for should be "LU32PLU32PL"
  2. Instead of " " x 32, pass a list of 32 32's, for example:
    push @splist, 32 for (1 .. 32); $tz_struct = pack("LU32PLU32PL", 0, @splist, $systime_struct, 0, @splist, $systime_struct, 0 +);
  3. 'P' and 'N' are constants defined in Win32::API, not strings. The third parameter to new Win32::API should be an anonymous list or an array reference, not a string literal
    'GetTimeZoneInformation', [P], N
  4. Have fun unpacking the unicode string! If all you are interested in is the bias, try "LS64PLS64PL" for the template.

Update:

Updated my Win32::API, and updated #3 above. Thanks mothra:-)
BTW, $bias returns 480 after making the above modifications (UTC -8)