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


in reply to Re: packing and unpacking
in thread packing and unpacking


I don't know the 64-bit Perl.
whether you are mentioning 64-bit processor or ...?

I am using Perl version 5.8.8

I ran the given code It shows the following error.
Invalid type 'Q' in unpack at pack.pl line 9.
--$ugum@r--

Replies are listed 'Best First'.
Re^3: packing and unpacking
by almut (Canon) on Mar 12, 2010 at 10:22 UTC

    You could also simply try

    my $x1 = $r << 32 | $t; printf "\nThe value is 0x%x", $x1; # 0x23400000345

    (though whether this works similarly depends of the build options of your perl)

    P.S.: What exactly do you need this for?  Maybe bigint or Math::BigInt would help.

    Update:

    use bigint; my $r = 0x234; my $t = 0x345; my $x1 = $r << 32 | $t; print $x1->as_hex;


      while(1)
      {
      print"Thankyou...."
      }
      --$ugum@r--

        BTW, note that using bigint indiscriminately can have a massive performance penalty.  So be sure to always localize it to exactly where you actually need it (by putting extra {...} blocks around those sections).

        #!/usr/bin/perl use strict; use warnings; use Benchmark qw(cmpthese); { use bigint; # code that needs bigint my $r = 0x234; my $t = 0x345; my $x1 = $r << 32 | $t; #print $x1->as_hex; # other stuff that doesn't... # => unnecessarily slow! sub with_bigint { my $x = 1; $x = $x * 4 / 2 - 1 for 1..1000; } } # end of bigint sub no_bigint { my $x = 1; $x = $x * 4 / 2 - 1 for 1..1000; } cmpthese (-1, { with_bigint => \&with_bigint, no_bigint => \&no_bigint, }, ); __END__ Rate with_bigint no_bigint with_bigint 11.3/s -- -100% no_bigint 4073/s 35876% --
Re^3: packing and unpacking
by spadacciniweb (Curate) on Mar 12, 2010 at 10:14 UTC
    From perldoc -f pack:
    Q An unsigned quad value. (Quads are available only if your system supports 64-bit integer values _and_ if Perl has been compiled to support those. Causes a fatal error otherwise.)

    (($_="Mzz ojjdloobnf jt uvy5502383")=~y~b-zg2-5c96-81~a-z0-9~s)=~s~~~s; print
      I know that "perldoc -f pack"
      why it shows this error "Invalid type 'Q' "?

      --$ugum@r--