скажи без перевода строки в раку - PullRequest
4 голосов
/ 27 февраля 2020

Я хочу напечатать четные числа подряд, но не могу.

use Terminal::ANSIColor;
# Wanna print even numbers in red
for <1 2 3 4>
{ $_ %2 == 0 ?? say color('red'),$_,color('reset') !! say $_ }

printf, похоже, не работает с директивами Terminal::ANSIColor, а put - нет работать либо.

Есть ли какой-либо переключатель на say, который заставляет его печатать без перевода строки? Как распечатать эти Terminal::ANSIColor отформатированные секции подряд?

1 Ответ

7 голосов
/ 27 февраля 2020

say в основном определяется как:

sub say ( +@_ ) {
    for @_ {
        $*OUT.print( $_.gist )
    }

    $*OUT.print( $*OUT.nl-out );
}

Если вы не хотите перевод строки, вы можете либо изменить значение $*OUT.nl-out, либо использовать print и gist.

say $_;

print $_.gist;

Во многих случаях результат вызова .gist совпадает с .Str. Это означает, что вам даже не нужно звонить .gist.

use Terminal::ANSIColor;
# Wanna print even numbers in red
for <1 2 3 4> {
    $_ %% 2 ?? print color('red'), $_, color('reset') !! print $_
}

(обратите внимание, что я использовал равномерно делимое на оператор %%.)


say предназначен для людей, поэтому он использует .gist и добавляет новую строку.

Если вы хотите более детальный контроль, не используйте say. Вместо этого используйте print или put.

...