Как заставить скрипт Perl 6 выйти при вводе Ctrl+D?

loop {
  my $word = prompt '> ' ;
  say $word;
}

Как правильно сделать exit, если/когда вместо вывода слова я нажму Ctrl+D?


person Eugene Barsky    schedule 12.12.2017    source источник


Ответы (2)


Я меньше знаком с Perl 6, чем с Perl 5, но метод Perl 5, кажется, работает:

loop {
  my $word = prompt '> ' ; 
  last if not defined $word;
  say $word;
}

Это может быть более идиоматично:

while (defined my $word = prompt '> ') {
    say $word;
}

(Без оператора defined цикл завершится на пустом вводе.)

person Keith Thompson    schedule 12.12.2017
comment
Конечно, unless defined эквивалентно if not defined. Лично мне форма if not кажется более понятной. - person Keith Thompson; 12.12.2017

С небольшим помощником:

sub not-done(\value) {
    value but True if value.defined
}

Затем вы можете просто написать свой цикл как:

while not-done prompt("> ") -> $word {
    say $word
}
person Elizabeth Mattijsen    schedule 12.12.2017