Perl에서 Ruby로

Perl은 굉장합니다. Perl의 문서도 굉장합니다. Perl 커뮤니티도… 굉장합니다. 처음부터 내장된 우아한 객체 지향 기능을 갈망하는 Perler에게는 Ruby가 적합할 수 있습니다.

비슷한 점

Perl처럼, Ruby에서도…

  • CPAN과 다소 유사한 패키지 관리 시스템이 있습니다(RubyGems라고 함).
  • 정규식 라이브러리는 내장되어 있습니다. 보나페티!
  • 일반적으로 사용되는 내장 기능이 상당히 많습니다.
  • 괄호는 종종 생략할 수 있습니다.
  • 문자열은 기본적으로 동일하게 작동합니다.
  • 일반 구분 문자열 및 Perl과 유사한 정규식 인용 구문이 있습니다. %q{this}(작은따옴표) 또는 %Q{this}(큰따옴표) 및 %w{작은따옴표 단어 목록의 경우}처럼 보입니다. 원하는 경우 %Q|can| %Q(use) %Q^other^ 구분 기호를 사용할 수 있습니다.
  • "#{like} this"처럼 보이지만 큰따옴표 변수 보간이 있습니다(그리고 #{} 안에 원하는 Ruby 코드를 넣을 수 있습니다).
  • 셸 명령 확장은 `backticks`를 사용합니다.
  • 내장된 문서 도구가 있습니다(Ruby는 rdoc이라고 함).

다른 점

Perl과는 다르게, Ruby에서는…

  • Perl과 같은 상황에 따른 규칙이 없습니다.
  • 변수는 참조하는 객체와 동일하지 않습니다. 대신 항상 객체에 대한 참조일 뿐입니다.
  • $@는 변수 이름의 첫 번째 문자로 사용되는 경우가 있지만 타입을 나타내는 것이 아니라 범위를 나타냅니다.($는 전역, @는 객체 인스턴스, @@는 클래스 속성을 나타냅니다)
  • 배열 리터럴은 괄호 대신 대괄호 안에 들어갑니다.
  • 배열의 하위 배열을 작성해도 하나의 큰 배열로 병합되지 않습니다. 대신 배열의 배열을 얻습니다.
  • sub가 아니라 def를 사용합니다.
  • 각 줄의 끝에는 세미콜론이 필요하지 않습니다. 여기에 더해 함수 정의, 클래스 정의 및 case 문과 같은 것을 end 키워드로 끝냅니다.
  • 객체는 강 타입입니다. 타입 간 변환이 필요한 경우 foo.to_i, foo.to_s 등을 직접 호출해야 합니다.
  • eq, ne, lt, gt, ge, le는 없습니다.
  • 다이아몬드 연산자(<>)가 없습니다. 일반적으로 IO.some_method를 대신 사용합니다.
  • 두꺼운 쉼표 =>는 해시 리터럴에만 사용됩니다.
  • undef가 없습니다. Ruby에는 nil이 있습니다. (Ruby의 다른 것처럼) nil은 객체입니다. 정의되지 않은 변수와는 다릅니다. 불처럼 취급하면 false로 평가됩니다.
  • 참 거짓을 평가할 때 falsenil만 거짓 값으로 평가됩니다. 다른 모든 것은 참입니다(0, 0.0, "0" 포함).
  • PerlMonks는 없습니다. ruby-talk 메일링 리스트는 매우 유용한 곳입니다.