在 IO::Spec::Unix 中§

有关 方法 split 的更多信息,请参阅 上下文中的主要文档

method split(IO::Spec::Unix: Cool:D $path)

$path 创建一个 IO::Path::Parts,其 volume 属性的值为空字符串。

IO::Spec::Unix.split('C:/foo/bar.txt').raku.say;
# OUTPUT: «IO::Path::Parts.new("","C:/foo","bar.txt")␤» 
 
IO::Spec::Unix.split('/foo/').raku.say;
# OUTPUT: «IO::Path::Parts.new("","/","foo")␤» 
 
IO::Spec::Unix.split('///').raku.say;
# OUTPUT: «IO::Path::Parts.new("","/","/")␤» 
 
IO::Spec::Unix.split('./').raku.say;
# OUTPUT: «IO::Path::Parts.new("",".",".")␤» 
 
IO::Spec::Unix.split('.').raku.say;
# OUTPUT: «IO::Path::Parts.new("",".",".")␤» 
 
IO::Spec::Unix.split('').raku.say;
# OUTPUT: «IO::Path::Parts.new("","","")␤» 

注意:在 Rakudo 2020.06 版本之前,此方法将给定的 $path 拆分为“volume”、“dirname”和“basename”,并以 List 的形式返回结果,其中包含三个 Pair,按此顺序排列。

在 Cool 中§

有关 例程 split 的更多信息,请参阅 上下文中的主要文档

multi        split(  Str:D $delimiterStr(Cool$input$limit = Inf:$k:$v:$kv:$p:$skip-empty)
multi        split(Regex:D $delimiterStr(Cool$input$limit = Inf:$k:$v:$kv:$p:$skip-empty)
multi        split(@delimitersStr(Cool$input$limit = Inf:$k:$v:$kv:$p:$skip-empty)
multi method split(  Str:D $delimiter$limit = Inf:$k:$v:$kv:$p:$skip-empty)
multi method split(Regex:D $delimiter$limit = Inf:$k:$v:$kv:$p:$skip-empty)
multi method split(@delimiters$limit = Inf:$k:$v:$kv:$p:$skip-empty)

[1]

将调用者(或在子形式中,第二个参数)强制转换为 Str,根据字符串中找到的分隔符将其拆分为多个部分,并以 Seq 的形式返回结果。

如果 $delimiter 是一个字符串,则按字面意思搜索它,而不将其视为正则表达式。您还可以通过将它们指定为一个列表来提供多个分隔符,该列表可以混合 CoolRegex 对象。

say split(';'"a;b;c").raku;               # OUTPUT: «("a", "b", "c").Seq␤» 
say split(';'"a;b;c"2).raku;            # OUTPUT: «("a", "b;c").Seq␤» 
 
say split(';'"a;b;c,d").raku;             # OUTPUT: «("a", "b", "c,d").Seq␤» 
say split(/\;/"a;b;c,d").raku;            # OUTPUT: «("a", "b", "c,d").Seq␤» 
say split(/<[;,]>/"a;b;c,d").raku;        # OUTPUT: «("a", "b", "c", "d").Seq␤» 
 
say split(['a', /b+/4], '1a2bb345').raku# OUTPUT: «("1", "2", "3", "5").Seq␤»

默认情况下,split 会省略匹配项,并仅返回字符串中未匹配的部分的列表。指定 :k, :v, :kv, :p 其中一个副词会更改此行为。将匹配项视为与不匹配部分交错的列表。

:v 交错该列表的值,这些值将是 Match 对象(如果在拆分中将 Regex 用作匹配器)或 Str 对象(如果将 Cool 用作匹配器)。如果指定了多个分隔符,则将为所有分隔符生成 Match 对象,除非所有分隔符都是 Cool

say 'abc'.split(/b/:v);               # OUTPUT: «(a 「b」 c)␤» 
say 'abc'.split('b':v);               # OUTPUT: «(a b c)␤»

:k 交错键,即索引

say 'abc'.split(/b/:k);               # OUTPUT: «(a 0 c)␤»

:kv 添加索引和匹配项

say 'abc'.split(/b/:kv);               # OUTPUT: «(a 0 「b」 c)␤»

:p 将它们作为 Pair 添加,对值的类型使用与 :v 相同的类型

say 'abc'.split(/b/:p);               # OUTPUT: «(a 0 => 「b」 c)␤» 
say 'abc'.split('b':p);               # OUTPUT: «(a 0 => b c)␤»

您只能在对 split 的一次调用中使用 :k, :v, :kv, :p 中的一个副词。

请注意,不会从结果列表中删除空块。对于该行为,请使用 :skip-empty 命名参数

say ("f,,b,c,d".split: /","/             ).raku;  # OUTPUT: «("f", "", "b", "c", "d").Seq␤» 
say ("f,,b,c,d".split: /","/:skip-empty).raku;  # OUTPUT: «("f", "b", "c", "d").Seq␤»

在 Supply 中§

有关 方法 split 的更多信息,请参阅 上下文中的主要文档

multi method split(Supply:D: \delimiter)
multi method split(Supply:D: \delimiter, \limit)

此方法创建由对调用者收集的字符串调用 Str.split 方法返回的值的供应。有关 \delimiter 参数以及可用的额外命名参数的详细信息,请参阅 Str.split。创建的供应可以用 \limit 参数限制,请参阅 .head

my $words = Supply.from-list(<Hello World From Raku!>);
my $s = $words.split(/ <?upper> /2:skip-empty);
$s.tap(&say); # OUTPUT: «Hello␤World␤»

在 Allomorph 中§

有关 方法 split,请参阅 上下文中的主要文档

method split(Allomorph:D: |c)

在调用者的 Str 值上调用 Str.split

在 IO::Spec::Win32 中§

有关 方法 split,请参阅 上下文中的主要文档

method split(IO::Spec::Win32: Cool:D $path)

$path 创建 IO::Path::Parts

IO::Spec::Win32.split('C:/foo/bar.txt').raku.say;
# OUTPUT: «IO::Path::Parts.new("C:","/foo","bar.txt")␤» 
 
IO::Spec::Win32.split('/foo/').raku.say;
# OUTPUT: «IO::Path::Parts.new("","/","foo")␤» 
 
IO::Spec::Win32.split('///').raku.say;
# OUTPUT: «IO::Path::Parts.new("","/","\\")␤» 
 
IO::Spec::Win32.split('./').raku.say;
# OUTPUT: «IO::Path::Parts.new("",".",".")␤» 
 
IO::Spec::Win32.split('.').raku.say;
# OUTPUT: «IO::Path::Parts.new("",".",".")␤» 
 
IO::Spec::Win32.split('').raku.say;
# OUTPUT: «IO::Path::Parts.new("","","")␤» 

注意:在 Rakudo 2020.06 版本之前,此方法将给定的 $path 拆分为“volume”、“dirname”和“basename”,并以 List 的形式返回结果,其中包含三个 Pair,按此顺序排列。

在 IO::Spec::Cygwin 中§

有关 方法 split,请参阅 上下文中的主要文档

method split(IO::Spec::Cygwin: Cool:D $path)

IO::Spec::Win32.split 相同,除了它将最终结果的所有值中的反斜杠替换为斜杠。

在 IO::CatHandle 中§

有关 方法 split,请参阅 上下文中的主要文档

method split(IO::CatHandle:D: |args --> Seq:D)

读取句柄并以与 Str.split 相同的方式处理其内容,采用相同的参数。实现可能会在调用此方法时整体吸入所有源句柄的内容

(my $f1 = 'foo'.IO).spurt: 'foo';
(my $f2 = 'bar'.IO).spurt: 'bar';
IO::CatHandle.new($f1$f2).split(/o+/).raku.say;
# OUTPUT: «("f", "bar").Seq␤» 

在 IO::Handle 中§

有关 方法 split,请参阅 上下文中的主要文档

method split(IO::Handle:D: :$close|c)

吸入 句柄的内容,并在其上调用 Str.split,转发任何给定的参数。如果 :$close 命名参数设置为 True,将在吸入后 关闭 调用者。

当句柄 处于二进制模式 时尝试调用此方法将导致抛出 X::IO::BinaryMode 异常。

my $fh = 'path/to/file'.IO.open;
$fh.split: '':close# Returns file content split on ♥ 

在 IO::Path 中§

有关 方法 split,请参阅 上下文中的主要文档

method split(IO::Path:D: |args --> Seq:D)

打开文件并以与 Str.split 相同的方式处理其内容,采用相同的参数。实现可能会在调用此方法时整体吸入文件。

在 Str 中§

有关 例程 split,请参阅 上下文中的主要文档

multi        split(  Str:D $delimiterStr:D $input$limit = Inf,
  :$skip-empty:$v:$k:$kv:$p)
multi        split(Regex:D $delimiterStr:D $input$limit = Inf,
  :$skip-empty:$v:$k:$kv:$p)
multi        split(List:D $delimitersStr:D $input$limit = Inf,
  :$skip-empty:$v:$k:$kv:$p)
multi method split(Str:D:   Str:D $delimiter$limit = Inf,
  :$skip-empty:$v:$k:$kv:$p)
multi method split(Str:D: Regex:D $delimiter$limit = Inf,
  :$skip-empty:$v:$k:$kv:$p)
multi method split(Str:D: List:D $delimiters$limit = Inf,
  :$skip-empty:$v:$k:$kv:$p)

根据字符串中找到的分隔符将字符串拆分为多个部分。

如果 DELIMITER 是一个字符串,那么它将被逐字搜索,而不是被视为正则表达式。如果 DELIMITER 是空字符串,那么它实际上会将字符串的所有字符分别返回(外加开头和结尾的空字符串)。如果 PATTERN 是一个正则表达式,那么它将被用于分割字符串。如果 DELIMITERS 是一个列表,那么其所有元素都将被视为分隔字符串的分隔符(字符串或正则表达式)。

可选的 LIMIT 指示字符串应该被分割成多少个片段,如果可能的话。它的默认值为 Inf(或 *,无论你如何看待它),这意味着“尽可能多”。请注意,指定负限制不会产生任何有意义的结果。

可以指定许多可选的命名参数,它们会改变返回的结果。:v:k:kv:p 命名参数都对找到的分隔符执行特殊操作。

  • :skip-empty

如果指定,则不要在分隔符之前或之后返回空字符串。

  • :v

还返回分隔符。如果分隔符是正则表达式,那么这将是关联的 Match 对象。由于这会字符串化为找到的分隔符字符串,因此如果你对该特定匹配的更多信息不感兴趣,你可以始终假设它是分隔符字符串。

  • :k

还返回分隔符的索引。仅当指定了分隔符列表时才有意义:在所有其他情况下,这将是 0

  • :kv

还返回分隔符的索引以及分隔符。

  • :p

还返回分隔符的索引和分隔符作为 Pair

示例

say split(";""a;b;c").raku;           # OUTPUT: «("a", "b", "c").Seq␤» 
say split(";""a;b;c":v).raku;       # OUTPUT: «("a", ";", "b", ";", "c").Seq␤» 
say split(";""a;b;c"2).raku;        # OUTPUT: «("a", "b;c").Seq␤» 
say split(";""a;b;c"2:v).raku;    # OUTPUT: «("a", ";", "b;c").Seq␤» 
say split(";""a;b;c,d").raku;         # OUTPUT: «("a", "b", "c,d").Seq␤» 
say split(/\;/"a;b;c,d").raku;        # OUTPUT: «("a", "b", "c,d").Seq␤» 
say split(<; ,>"a;b;c,d").raku;       # OUTPUT: «("a", "b", "c", "d").Seq␤» 
say split(/<[;,]>/"a;b;c,d").raku;    # OUTPUT: «("a", "b", "c", "d").Seq␤» 
say split(<; ,>"a;b;c,d":k).raku;   # OUTPUT: «("a", 0, "b", 0, "c", 1, "d").Seq␤» 
say split(<; ,>"a;b;c,d":kv).raku;  # OUTPUT: «("a", 0, ";", "b", 0, ";", "c", 1, ",", "d").Seq␤» 
 
say "".split("x").raku;                 # OUTPUT: «("",).Seq␤» 
say "".split("x":skip-empty).raku;    # OUTPUT: «().Seq␤» 
 
say "abcde".split("").raku;             # OUTPUT: «("", "a", "b", "c", "d", "e", "").Seq␤» 
say "abcde".split("",:skip-empty).raku# OUTPUT: «("a", "b", "c", "d", "e").Seq␤»