Maybe I wasn't clear in the explanation.
$#="%c";print 65; should not print
an A. It pushes 65.0 (a double) and "%x" on the C stack, and
calls sprintf. Then sprintf sees "%c", so tries to pop an int
from the stack. 65.0 is represented as the bytes
(00 00 00 00 00 40 50 40)hex, but an int is just 4 bytes so
it pops (00 00 00 00)hex which is 0 as an int so it prints a nul char.
(On sparc, however, it will get (40 50 40 00)hex, which is 67437568,
so it will either print a null character or a multibyte
character sequence corresponding to unicode chr 67437568,
depending on the version of Perl.)
Dlugosz, I guess your cpu is an x86, correct me if it isn't.
| [reply] [d/l] |