in reply to Split on . (dot)

Two things that help in deducing what's going on with a split function are to tell perl to keep the delimiter matches as elements of the list it returns, and to print out the array line by line rather than with a print "@t\n";

This is how I would attack the problem:

#!/usr/bin/perl print "Entrez votre ip :"; $ip=<STDIN>; @t=split(/(.)/,$ip); # Surround the delimiter in (), then the # regexp matches become array elements print scalar @t,"\n"; # Don't waste a variable print "[$_]\n" for @t; # Surround each match by brackets, # print each match on its own line.

Then your output becomes:

Entrez votre ip :21.23 11 [] [2] [] [1] [] [.] [] [2] [] [3] [ ]

"Oh, each byte was a match," says I. Changing @t=split(/(.)/,$ip); to @t=split(/(\.)/,$ip); gives:

Entrez votre ip :21.23 3 [21] [.] [23 ]

OK, good. Now we need to get rid of that line feed, and take the delimiter out of the array. Final code:

#!/usr/bin/perl print "Entrez votre ip :"; $ip=<STDIN>; @t=split(/[.\n]/,$ip); # Don't need \. for period in [ ] print scalar @t,"\n"; print "[$_]\n" for @t;

Which outputs:

Entrez votre ip :21.23 2 [21] [23]

Was that what you were looking for?

Replies are listed 'Best First'.
Re^2: Array empty
by Aristotle (Chancellor) on Oct 05, 2003 at 18:39 UTC
    To get rid of the newline you probably should use chomp instead of putting it in the list of delimiters.

    Makeshifts last the longest.