При попытке для чтения многострочного ввода из командной строки:
# change line separator
$/ = 'END'
answer = gets
pp answer
Однако я получаю странное поведение от STDIN#gets
, когда пытаюсь изменить $/
обратно:
# put it back to normal
$/ = "\n"
answer = gets
pp answer
pp 'magic'
Это приводит к такому выводу при выполнении с Ruby:
$ ruby multiline_input_test.rb this is a multiline awesome input string FTW!! END "this is\n\ta multiline\n awesome input string\n \t\tFTW!!\t\nEND" "\n" "magic"
(Я ввожу до END
, а остальное выводится программой, затем программа завершает работу.)
Он не останавливается, чтобы получить ввод от пользователя после того, как я изменю $/
обратно на "\n"
. Итак, мой вопрос прост: почему?
В рамках более крупного (но все же небольшого) приложения я пытаюсь разработать способ записи заметок; как бы то ни было, это странное поведение потенциально разрушительно, так как остальная часть моей программы не сможет работать должным образом, если я не смогу сбросить разделитель строк. Я пробовал все способы использования двойных и одинарных кавычек, но, похоже, это не проблема. Любые идеи?
gets
из моего кода. - person Daniel Brady   schedule 05.07.2013gets
просто возвращает новую строку, которую я никогда не вводил - person Daniel Brady   schedule 05.07.2013