http://qs1969.pair.com?node_id=296694


in reply to Split on . (dot)

hi, In you code, split returns all fields found in $ip using '.' metacharacter as a delimiter. '.' metacharacter matches almost any character but newline. As a consequence,@t will contain invisible characters as NUL character and \n. When you do :
map { print ord $_,"\n" } split(/./, $ip);
You 'll print the ascii code of each element in the returned list by split function. Here's the output i get :
0 
0
0
0
0
10
0 is the ascii NUL and 10 is the newline character. I hope you understand these explanations, Arnaud

Replies are listed 'Best First'.
Re: Re: Array empty
by bart (Canon) on Oct 05, 2003 at 14:11 UTC
    Close. But ord($_) returns 0 not because it contains a null byte, but because it is an empty string.
    print ord("");
    prints: 0
    (Where on earth would he be getting null bytes from?)

    Indeed, the resulting array he's getting after doing

    $ip = "21.23\n"; @t = split /./, $ip;
    is
    ("", "", "", "", "", "\n")
    

    The explanation: every character in the input string, except the newline, is used as a split delimiter. Thus you get, as a result, the stuff between those characters, which is nothing every time, except at the last character.