in reply to Split String after nth occurrence of a charater

#! usr/bin/perl my ($occ,$str); $str="hi there this is perl monks forum."; print "enter number of occurence where you want to split\n"; $occ=<STDIN>; chomp($occ); $str=~ /(\S+\s){$occ}/; print "left : $& \nRight: $'\n";

Replies are listed 'Best First'.
Re^2: Split String after nth occurrence of a charater
by JavaFan (Canon) on Nov 08, 2011 at 07:30 UTC
    Wrong on several accounts:
    1. It doesn't count leading whitespace.
    2. It counts non-space whitespace as if it were a space.
    3. It only counts whitespace directly following non-whitespace.
    4. It doesn't actually split; the whitespace on which it should split is returned in $&.
    5. It doesn't actually split: it only returns one substring; if you were to fix this by adding /g, whitespace following the "11"th one will be lost.
    6. It only matches chunks that actually have an 11th space. If $str would contain only 5 spaces, the match fails; a split would still return something.
    Better would be (untested):
    @chunks = $str =~ /((?:[^ ]* ){10}[^ ]*|.+)/gs;
    but even that isn't quite split.