BrowserUk has asked for the wisdom of the Perl Monks concerning the following question:
The description of the 'a', 'A' & 'Z' templates for pack reads:
a A string with arbitrary binary data, will be null padded. A A text (ASCII) string, will be space padded. Z A null-terminated (ASCIZ) string, will be null padded.
And sure enough:
print length pack '(A2)*', 'fr','ed','x';; 6 print unpack 'C*', pack '(A2)*', 'fr','ed','x';; 102 114 101 100 120 32 print length pack '(a2)*', 'fr','ed','x';; 6 print unpack 'C*', pack '(a2)*', 'fr','ed','x';; 102 114 101 100 120 0 print length pack '(Z2)*', 'fr','ed','x';; 6 print unpack 'C*', pack '(Z2)*', 'fr','ed','x';; 102 0 101 0 120 0 ## Note! the 'r' & 'd' characters have been thrown +away? Another bug?
And the docs for unpack say:
unpack does the reverse of pack: it takes a string and expands it out into a list of values.
But:
printf "'%s'\n", join"'", unpack '(A2)*', 'fredx';; 'fr'ed'x' printf "'%s'\n", join"'", unpack '(a2)*', 'fredx';; 'fr'ed'x' printf "'%s'\n", join"'", unpack '(Z2)*', 'fredx';; 'fr'ed'x'
Shouldn't that last element from unpack ('x') be padded with either space or null?
Has it always been 'wrong'? Is it too late to change it?
|
---|
Replies are listed 'Best First'. | |
---|---|
Re: pack() v unpack() padding: bug or ???
by Athanasius (Archbishop) on Feb 16, 2015 at 16:11 UTC | |
by BrowserUk (Patriarch) on Feb 16, 2015 at 16:32 UTC | |
by roboticus (Chancellor) on Feb 16, 2015 at 16:43 UTC | |
by BrowserUk (Patriarch) on Feb 16, 2015 at 17:06 UTC | |
Re: pack() v unpack() padding: bug or ???
by Anonymous Monk on Feb 16, 2015 at 13:57 UTC | |
by tye (Sage) on Feb 16, 2015 at 19:23 UTC | |
Re: pack() v unpack() padding: bug or ???
by GotToBTru (Prior) on Feb 16, 2015 at 16:02 UTC | |
by BrowserUk (Patriarch) on Feb 16, 2015 at 16:52 UTC |