Ruby는 다영한 I/O 라이브러리를 제공합니다. 하지만 이 책에서는 간단한 메소드 몇개 만을 사용합니다. 그 중에 두 개를 이미 보셨을 것입니다. puts와 print입니다. puts는 puts 뒤에 오는 아규먼트들을 각 각 newline(자바에서는 \n)을 추가하여 화면에 출력하며, print는 newline 문자 없이 아규먼트들을 출력해 줍니다. 또하나 자주 사용되는 것은 printf입니다. 이것은 형식 문자열로 아규먼트를 제어하는 형식입니다.(C나 Perl에 처럼)

printf "Number: %5.2f, String: %s", 1.23, "hello"

이렇게 입력을 하면

Number:  1.23, String: hello=> nil

이렇게 출력됩니다. %f는 실수를 출력할 것이고 %s는 문자열을 출력할 것이라는 것입니다. %와 f사이의 숫자는 (allowing five characters in total, with two after the decimal point) 이렇습니다. 즉 앞에 . 앞에 있는 숫자는 총 숫자를 말하고 . 뒤에 있는 숫자는 소숫점을 말한다고 합니다. 그래서 출력 실험을 해봤습니다.

irb(main):017:0> printf "%6.3f, %s", 123456789.1234567, "test"
123456789.123, test=> nil
irb(main):018:0> printf "%6.4f, %s", 123456789.1234567, "test"
123456789.1235, test=> nil
irb(main):019:0> printf "%1.4f, %s", 123456789.1234567, "test"
123456789.1235, test=> nil

. 뒤에 있는 숫자를 변경 해보니 결과물의 소숫점의 자릿수가 바뀌는 것을 확인 할 수 있습니다. 하지만 . 앞의 숫자에 어떤 영향을 받고 있는 것인지는 확인 할 수 없었습니다.

프로그램에 값을 입력시키는 방법도 여러가지가 있습니다. 그 중에 가장 전통적인 방법으로 gets를 사용합니다.

irb(main):022:0> line = gets
hi
=> "hi\n"
irb(main):023:0> print line
hi
=> nil
irb(main):024:0>

gets는 방금 읽어들인 문장을 리턴하는데 그 때 리턴되는 것을 전역 변수인 $_ 안에 저장합니다. 이 변수는 많은 경우에 기본으로 사용되는 특별한 변수 입니다. print를 아규먼트 없이 호출하면 &_ 안에 있는 것을 호출하게 됩니다. if 나 while문을 정규 표현식과 사용한다면 그 표현식은 $_ 변수에 대응하여 작동합니다. 예를 들어 다음 프로그램은 "Ruby"라는 단어간 들어간 모든 줄을 출력합니다.

while gets           # assigns line to $_
 if /Ruby/          # matches against $_
   print            # prints $_
 end

이 것을 저번 글에서 배웠던 이터레이터를 사용하여 다음과 같이 나타낼 수도 있습니다.

ARGF.each { |line|  print line  if line =~ /Ruby/ }