-
Notifications
You must be signed in to change notification settings - Fork 0
split
James E Keenan edited this page Feb 14, 2016
·
5 revisions
my ($str, @rv);
$str = 'This is a string to be split';
say q|$str: |, $str;
say '';
say "split on single-character delimiter found in string:";
@rv = split('t', $str); print "<$_>" for @rv; print "\n";
say '';
say "split on single-character delimiter found in string; method notation:";
@rv = $str.split('t'); print "<$_>" for @rv; print "\n";
say '';
say "split on multiple-character delimiter found in string:";
@rv = split('tr', $str); print "<$_>" for @rv; print "\n";
say '';
say "split on single-character delimiter NOT found in string:";
@rv = split('x', $str); print "<$_>" for @rv; print "\n";
say '';
say "split on empty string:";
@rv = split('', $str); print "<$_>" for @rv; print "\n";
say '';
say "split on single-character delimiter found in string with limit on number of elements returned:";
@rv = split('t', $str, 2); print "<$_>" for @rv; print "\n";
say '';
say "split on any of a list of delimiters found in string; use < > to denote list:";
@rv = split(<t i>, $str); print "<$_>" for @rv; print "\n";
say '';
say "split on any of a list of delimiters found in string; use < > to denote list:";
@rv = split(<is g>, $str); print "<$_>" for @rv; print "\n";
say '';
say "split on a pattern:";
@rv = $str.split(/<[tri]>/); print "<$_>" for @rv; print "\n";
Output:
$ perl6 split.pl6
$str: This is a string to be split
split on single-character delimiter found in string:
<This is a s><ring ><o be spli><>
split on single-character delimiter found in string; method notation:
<This is a s><ring ><o be spli><>
split on multiple-character delimiter found in string:
<This is a s><ing to be split>
split on single-character delimiter NOT found in string:
<This is a string to be split>
split on empty string:
<><T><h><i><s>< ><i><s>< ><a>< ><s><t><r><i><n><g>< ><t><o>< ><b><e>< ><s><p><l><i><t><>
split on single-character delimiter found in string with limit on number of elements returned:
<This is a s><ring to be split>
split on any of a list of delimiters found in string; use < > to denote list:
<Th><s ><s a s><r><ng ><o be spl><><>
split on any of a list of delimiters found in string; use < > to denote list:
<Th>< >< a strin>< to be split>
split on a pattern:
<Th><s ><s a s><><><ng ><o be spl><><>
Note the following difference between Perl 5 and Perl 6. Take a simple program written the same way in each language.
my ($str, @rv);
$str = 'This is a string to be split';
@rv = split(/<[tri]>/, $str);
print "<$_>" for @rv; print "\n";
@rv = split(/[tri]/, $str);
print "<$_>" for @rv; print "\n";
Run it first in Perl 5:
perl split_char_class_delimiter.pl
<This is a string to be split>
<Th><s ><s a s><><><ng ><o be spl>
Now run it in Perl 6:
$ perl6 split_char_class_delimiter.pl
<Th><s ><s a s><><><ng ><o be spl><><>
<This is a s><ng to be split>
Explanation?
Optional Named Parameters
say "split on a pattern; :skip-empty:";
@rv = $str.split(/<[tri]>/, :skip-empty); print "<$_>" for @rv; print "\n";
say '';
say "split on the empty string; :skip-empty:";
@rv = $str.split('', :skip-empty); print "<$_>" for @rv; print "\n";
say '';
say "split on single-character delimiter found in string; also return the delimiter via ':v':";
@rv = split('t', $str, :v); print "<$_>" for @rv; print "\n";
say '';
say "split on a pattern; also return the delimiter via ':v':";
@rv = $str.split(/<[tri]>/, :v); print "<$_>" for @rv; print "\n";
say '';
say "split on any of a list of delimiters found in string; use < > to denote list";
say "also return index of delimiter via ':k':";
@rv = split(<t i>, $str, :k); print "<$_>" for @rv; print "\n";
say '';
say "split on any of a list of delimiters found in string; use < > to denote list";
say "also return both index of delimiter and delimiter via ':kv':";
@rv = split(<t i>, $str, :kv); print "<$_>" for @rv; print "\n";
say '';
say "split on any of a list of delimiters found in string; use < > to denote list";
say "also return both index of delimiter and delimiter as a Pair via ':p':";
@rv = split(<t i>, $str, :p); print "<$_>" for @rv; print "\n";
Output:
split on a pattern; :skip-empty:
<Th><s ><s a s><ng ><o be spl>
split on the empty string; :skip-empty:
<T><h><i><s>< ><i><s>< ><a>< ><s><t><r><i><n><g>< ><t><o>< ><b><e>< ><s><p><l><i><t>
split on single-character delimiter found in string; also return the delimiter via ':v':
<This is a s><t><ring ><t><o be spli><t><>
split on a pattern; also return the delimiter via ':v':
<Th><i><s ><i><s a s><t><><r><><i><ng ><t><o be spl><i><><t><>
split on any of a list of delimiters found in string; use < > to denote list
also return index of delimiter via ':k':
<Th><1><s ><1><s a s><0><r><1><ng ><0><o be spl><1><><0><>
split on any of a list of delimiters found in string; use < > to denote list
also return both index of delimiter and delimiter via ':kv':
<Th><1><i><s ><1><i><s a s><0><t><r><1><i><ng ><0><t><o be spl><1><i><><0><t><>
split on any of a list of delimiters found in string; use < > to denote list
also return both index of delimiter and delimiter as a Pair via ':p':
<Th><1 i><s ><1 i><s a s><0 t><r><1 i><ng ><0 t><o be spl><1 i><><0 t><>