Hi. I am a fairly experienced Perl amateur, or so I thought. I've been whipping things up in Perl for some 10+ years, but I've never gotten very deep down into the nuts and bolts until fairly recently. Despite being a onetime computer science major as an undergrad (before turning the dark side and becoming a historian), I struggle with computer-sciencey concepts, so that might be part of my problem here.

Anyway, I am trying to learn about pack and unpack and bitwise operations and such. And I have run into some behavior that seems very odd and I can't explain it. I am using the latest release of ActivePerl on a Win32 (WinXP) system.

use strict; use warnings 'all'; my $i = 0; # This should be zero! I want 0b00000000! my $b = unpack("B*", $i); print $b;

The output I get is:

00110000

In other words, what I am getting instead of zero (i.e. 0b00000000, 0x00, NUL, the real zero) is 0b00110000, or 0x48 -- the ASCII character 0. This isn't what I want. It doesn't matter how I write the number. Whether I code $i = 0 or 0x00 or 0b00000000 -- I keep getting the character 0.

If, on the other hand, I code:

printf("%08b", 0);

I properly get:

00000000

Why is this happening? Why is unpack interpreting my 0 as a character or string? Is this the proper behavior for Perl, or is it some quirk or bug of this distribution or system? Or am I just doing something wrong, or misunderstanding what is happening here? Is there any way to stop it?


In reply to ActivePerl on Win32 storing integers as strings? by LonelyPilgrim

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.