在 IO::CatHandle 中§

有关 方法 next-handle,请参见 上下文中的主要文档

method next-handle(IO::CatHandle:D: --> IO::Handle:D)

将活动源句柄切换到源句柄队列中的下一个句柄,该队列是 .new@handles 属性中给出的源。返回值是当前活动的源句柄,或者如果源句柄队列已用尽,则为 Nil

Cool 源“句柄”强制转换为 IO::Path;打开 IO::Path 和未打开的 IO::Handle 源句柄,以使用调用者的 $.nl-in$.chomp$.encoding 属性进行读取;已经打开的 IO::Handle 对象的那些相同属性将更改为调用者属性的值。

每当 CatHandle 的方法需要切换到下一个源句柄时,此方法都会自动调用,触发 .on-switch Callable 被调用,并且在 .new 调用期间调用一次。.on-switch 将在每次调用此方法时继续触发,即使在源句柄队列已用尽之后也是如此。请注意,通常达到当前活动源句柄的 EOF 不会触发 .next-handle 调用,而是需要更多数据的进一步读取操作会触发。

(my $f1 = 'foo'.IO).spurt: "a\nb";
(my $f2 = 'bar'.IO).spurt: "c\nd";
with IO::CatHandle.new: :on-switch{ say '▸ Switching' }$f1$f2 {
    say 'one';
    .next-handle.^name.say;
    say 'two';
    .next-handle.^name.say;
    say 'three';
    .next-handle.^name.say;
    # OUTPUT: 
    # ▸ Switching 
    # one 
    # ▸ Switching 
    # IO::Handle 
    # two 
    # ▸ Switching 
    # Nil 
    # three 
    # ▸ Switching 
    # Nil 
}