in reply to Re: Re: Re: Re: expanding the functionality of split
in thread expanding the functionality of split
That is no a split then, that is a pattern match. The problem remains that a line like 'a::b:: c' will match according to your rules but the result will be 'a', ':b', 'c'. You can do this easily with recursion:
my @split_bits = qw( : :: \s+ ); my @result = wierd_split( 'foo:bar::baz boo:foo::bar::baz', \@split_b +its ); print "Got $_\n" for @result; sub wierd_split { my ( $str, $to_do, $got ) = @_; return (@$got, $str) unless @$to_do; my $next_split = shift @$to_do; print scalar @$to_do, " splitting '$str' on '$next_split'", "\n"; my ( $want, $next ) = $str =~ m/(.*?)$next_split(.*)/m; print "'$want' '$next'\n"; push @{$got}, $want; # and now for a little recursion wierd_split( $next, $to_do, $got ) if $want; } __DATA__ 2 splitting 'foo:bar::baz boo:foo::bar::baz' on ':' 'foo' 'bar::baz boo:foo::bar::baz' 1 splitting 'bar::baz boo:foo::bar::baz' on '::' 'bar' 'baz boo:foo::bar::baz' 0 splitting 'baz boo:foo::bar::baz' on '\s+' 'baz' 'boo:foo::bar::baz' Got foo Got bar Got baz Got boo:foo::bar::baz
tachyon
s&&rsenoyhcatreve&&&s&n.+t&"$'$`$\"$\&"&ee&&y&srve&&d&&print
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: expanding the functionality of split
by Abigail-II (Bishop) on Dec 10, 2002 at 17:03 UTC | |
by tachyon (Chancellor) on Dec 10, 2002 at 20:24 UTC |