LonelyPilgrim has asked for the wisdom of the Perl Monks concerning the following question:
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?
|
---|
Replies are listed 'Best First'. | |
---|---|
Re: ActivePerl on Win32 storing integers as strings?
by BrowserUk (Patriarch) on Feb 14, 2012 at 04:43 UTC | |
by LonelyPilgrim (Beadle) on Feb 14, 2012 at 04:59 UTC | |
by BrowserUk (Patriarch) on Feb 14, 2012 at 05:17 UTC | |
by LonelyPilgrim (Beadle) on Feb 14, 2012 at 05:59 UTC | |
Re: ActivePerl on Win32 storing integers as strings?
by LonelyPilgrim (Beadle) on Feb 14, 2012 at 04:19 UTC |