in reply to backward split
How about...
#!/usr/bin/perl -w use strict; my $string = "foo.bar.blah.di.doh"; print "string: $string\n"; my @string; @string = rev_split('.',$string,2); print join(', ',@string)."\n"; @string = rev_split('.',$string,3); print join(', ',@string)."\n"; @string = rev_split('.',$string,4); print join(', ',@string)."\n"; $string = "foo:bar:blah:di:doh"; print "string: $string\n"; @string = rev_split(':',$string,3); print join(', ',@string)."\n"; sub rev_split{ my ($sep,$string,$cnt) = @_; $cnt--; my @string = split(/\Q$sep\E/,$string); $cnt = $#string if $#string < $cnt; my @array = ( join("$sep",@string[0..$#string-$cnt]), (@string[$#str +ing-$cnt+1..$#string]) ); } __END__ prints: string: foo.bar.blah.di.doh foo.bar.blah.di, doh foo.bar.blah, di, doh foo.bar, blah, di, doh string: foo:bar:blah:di:doh foo:bar:blah, di, doh
Update: modified so join pays attention to the separator..
Update2: added check to prevent returning more elements than we have.. thanks Enlil
Of course, with this implementation we can't use a regex as the split separator as join won't know what to join with..
cheers,
J
|
|---|