in reply to [pack]little endian timestamp to decimal value

Tutorials: Pack/Unpack Tutorial (aka How the System Stores Data)
$ perl -le"print pack qw! H* B65B7B4000 !" ╢[{@ $ perl -le"print unpack q!L!, pack qw! H* B65B7B4000 !" 1081826230

Replies are listed 'Best First'.
Re^2: [pack]little endian timestamp to decimal value
by ikegami (Patriarch) on Oct 26, 2010 at 19:33 UTC
    "L" is machine dependent. To resolve that ambiguity, switch to "L<" or "V".
    $ perl -le'print unpack "L<", pack "H*", "B65B7B4000"' 1081826230 $ perl -le'print unpack "V", pack "H*", "B65B7B4000"' 1081826230
      Great, I really couldn't find that out myself!

      I actually tried running my script (it's fully Perl, not from commandline) also on a PowerPC. Obviously it returned another decimal value. I understand why, and it is really not a big issue. But I'm just wondering: Is it also possible to tell Perl how to treat a particular variable or value? Or let it run a function as being a in little-endian environment?
      I actually thought that "<" would make Perl do that. But so far, no luck. Or am I doing something wrong?
      Thanks again. You really helped me out again!

      #!/usr/bin/perl -w use strict; my $hexvalue = $ARGV[0]; print unpack "L<", pack "H*", $hexvalue;
      The great mistake is to anticipate the outcome of the engagement; Let nature take it's course, and your tools will strike at the right moment.

        Obviously it returned another decimal value.

        For the same input, it should return the same on every machine, including your PowerPC.

        Or let it run a function as being a in little-endian environment?

        Since endianness only matters when you're talking about how something is stored and you can't access the buffers in which Perl stores its numbers, there's no way to be affected by endianness used. Your request makes no sense.