|Perl: the Markov chain saw|
ActivePerl on Win32 storing integers as strings?by LonelyPilgrim (Beadle)
|on Feb 14, 2012 at 04:04 UTC||Need Help??|
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.
The output I get is:
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:
I properly get:
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?