Следвах съвета от този въпрос, когато опитвах за четене на многоредов вход от командния ред:
# 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