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;
는 불가능하다.
기타분류