[첫화면으로]Perl/Java프로그래머를위한Perl소개

마지막으로 [b]

막상 읽다보니 예제로 든 펄 코드들이 상당히 구식 스타일이라서... 내용 전체가 전반적으로 현대의 펄과 맞지 않는 듯 하여서 마저 번역할까 말까 고민 중. 일단 쓴 게 아까워서 페이지는 놔둠

1. 개요

Perl과 자바는 많은 부분이 비슷하고, 많은 부분이 다르다. 둘 다 절차적이고, 비슷한 키워드와 구조를 가지고 있고, 기능은 서브루틴(메쏘드,함수)으로 분리되고, 객체지향과 예외처리, 패키지를 지원한다. 반면 펄은 문법이 매우 유동적이고, 기본 언어의 기능이 자바보다 훨씬 많다.

유동적인 문법이란 말은 펄은 같은 일을 하는 데 여러 가지 다른 방법을 지원한다는 뜻이다. 다음과 같은 자바 코드가 있다면,

if (!test)
  {
  throw new Exception ("aargh");
  }
펄에서는 똑같이 다음과 같이 쓸 수 있다:
if (!test)
  {
  die ("aargh");
  }
이것은 자바 버전과 매우 유사하다. 하지만 이것은 다음과 같이 쓸 수도 있다:
unless (test)
  {
  die ("aargh");
  }
unless는 '~가 아니라면'의 뜻이다. 그러나 더 보편적으로, 숙련된 펄 해커들은 다음과 같은 식으로 쓸 것이다:
test or die ("aargh");

왜 자바로는 똑같이 압축된 형태로 쓸 수 없는가? 자바는 문법 구조가 매우 경직되어 있다. 첫째로 논리 연산자 AND(&&)나 OR(||)는 불리언 타입을 갖는 피연산자에만 쑬 수 있다. test는 여기 해당된다고 가정해도 throw에서는 값을 얻을 수 없어서 논리값 비교에 쓸 수 없다. 두번째로 논리 연산자들로 구성된 구문은 그 자체가 불리언 타입을 반환해야 한다. 셋째로 논리 비교식은 독립적인 구문으로 존재할 수 없다. if (x || y) {};는 괜찮지만 x || y;는 불가능하다.

펄의 이러한 문법의 유연함이 더 좋은지 나쁜지는 스스로 판단할 문제이다. 펄의 문법은 매우 빈번한 연산을 짧은 형태로 표현할 수 있게 해 주는 반면 종종 펄 프로그래머가 아닌 사람들이 읽을 수 없게 된다.

기본 언어의 기능을 비교하면 펄이 자바보다 훨씬 풍부하다. 이것은 펄이 더 많은 일을 할 수 있다는 뜻이 아니라, 단지 기본 언어가 더 많은 일을 할 수 있다는 뜻이다. 자바의 철학은 언어 중추는 매우 간단하게 유지하고 다른 모든 기능을 표준 클래스 라이브러리에 넣는 것이었다. 따라서, 예를 들어, 펄은 연관 배열1을 언어의 일부로서 지원한다. 자바는 java.util 패키지에 있는 클래스들을 통하여 지원한다. 펄은 정규표현식을 프로그램 구문에 직접 적을 수 있는 반면 자바는 정규식이 클래스에 캡슐화되어 있을 것을 기대한다. 어느 쪽이 더 좋고 나쁜 건 아니며 그저 다를 뿐이다.

2. 기본 요소

2.1. 프로그램 구조와 철학

2.2. 컴파일과 실행

javac Test.java
java Test

perl Test.pl

#!/usr/bin/perl
그 다음 커맨드 라인에서 직접 실행하는 것이다.
Test.pl

2.3. 실행 순서

자바 프로그램의 실행은 특정 클래스의 main()메쏘드에서 시작한다. 모든 코드와 데이타는 이런 저런 클래스의 이런 저런 메쏘드 안에 있어야 한다. 펄에서는 실행 순서는 (대부분) 특정 파일의 위에서 아래 방향으로 이뤄진다. 함수 정의를 제외한 나머지 구문들은 나타나면 바로 실행된다. 파일의 끝에 다다르면 실행이 끝난다.

따라서 다음은 올바르게 동작하는 완전한 펄 프로그램이다.

print "Hello, world!\n"

위에서 아래로 규칙에 몇가지 예외가 있다. 첫째로 완전한 펄 프로그램을 다른 펄 프로그램 내에서 실행할 수 있다. 이렇게 해서 펄 프로그램이 별개의 '모듈'들로부터 만들어질 수 있다(자바와 같다). 둘째로 모듈들은 생성자와 소멸자가 있을 수 있고(어느정도 자바와 비슷), 'autoload' 기능이 있다(자바와 전혀 비슷하지 않음). 펄에서 AUTOLOAD라는 함수는 존재하지 않는 함수에 대해 참조가 발생하면 불리게 되며 함수를 동적으로 만들어내는 데 사용된다.

실행은 파일의 끝에 다다르기 전에 die 함수를 쓰거나(이 때는 예외가 발생한다) exit()함수를 쓰거나(자바의 System.exit()와 유사) 몇 가지 다른 구조를 써서 종료할 수 있다. 이런 구조들 중에는 __DATA__ 지시자가 있는데, 이것은 이 뒤에 오는 모든 것이 실행 코드가 아니라 데이타라는 것을 의미한다. 프로그램은 이 데이타를 미리 정의된 파일핸들을 써서 읽을 수 있다. 이런 것은 자바에는 존재하지 않는다.

2.4. 패키지와 모듈

3. 리터럴, 변수, 식별자

3.1. 렉시컬 심볼과 토큰들

3.2. 치환

3.3. 데이타 타입과 타입 체크

3.4. 리스트와 배열

3.5. 해시

3.6. 레퍼런스

4. 연산자들

4.1. 비교

4.2. 논리

4.3. 파일 테스트

4.4. 산술

4.5. 연산자 오버로딩

5. 조건문과 루프

5.1. 참과 거짓

5.2. 조건

5.3. 루프

6. 함수

6.1. 함수 호출

6.2. 함수 정의

7. 문맥

8. 파일 입출력

8.1. 파일 열기

8.2. 파일에 쓰기

8.3. 파일 읽기

9. 객체 지향 펄

9.1. 클래스와 패키지

9.2. 인스턴스

9.3. 생성자

9.4. 인스턴스 상태 관리

9.5. 상속

9.6. 비교

10. 정규 표현식

11. 예외 처리

12. 요약

이름:  
Homepage:
내용:
 

기타분류
각주:
1. 해시

마지막 편집일: 2013-11-8 9:42 pm (변경사항 [d])
1473 hits | Permalink | 변경내역 보기 [h] | 페이지 소스 보기