Beefy Boxes and Bandwidth Generously Provided by pair Networks
Keep It Simple, Stupid

Re: How is perl able to handle the null byte?

by Joost (Canon)
on Jun 15, 2006 at 18:52 UTC ( #555581=note: print w/ replies, xml ) Need Help??

in reply to How is perl able to handle the null byte?

Yup, C treats a 0 byte as the end of a string. And yes perl is written in C. However, perl strings are not C strings.

In C a string is nothing more than a pointer to the first character of the string. C can't know how long a string is except by counting all the characters from the start until the first 0 byte. You need to know the length of a string in order to do things like copy or compare them.

Perl's strings are C structs that include (amongst other things) a pointer to the first character, AND the length of the string. Since perl doesn't need a special terminating character you can use 0 characters in the middle of a string too.

Note that internally perl strings are still 0-terminated in order to facilitate interoperation with functions that expect C style strings. Also note that sending strings with embedded 0 characters to system calls or XS libraries does not always work as you'd expect, though all the buildin string and IO operations (regexes, print etc) should work correctly.

Comment on Re: How is perl able to handle the null byte?
Replies are listed 'Best First'.
Re^2: How is perl able to handle the null byte?
by muba (Priest) on Jun 15, 2006 at 18:56 UTC
    A struct is basically like creating your own data type, right?

    However, I understand now. That was fairly simple, actually...
    Thank you!

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://555581]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others chanting in the Monastery: (7)
As of 2015-09-04 02:19 GMT
Find Nodes?
    Voting Booth?

    My preferred temperature scale is:

    Results (128 votes), past polls