검수요청.png검수요청.png

"펄"의 두 판 사이의 차이

위키원
이동: 둘러보기, 검색
잔글
(특징)
 
(사용자 3명의 중간 판 82개는 보이지 않습니다)
1번째 줄: 1번째 줄:
[[파일:펄낙타.jpg|썸네일|200픽셀|'''펄'''(Perl) 로고와 글자]]
+
[[파일:펄 로고.png|썸네일|200픽셀|'''펄'''(Perl)]]
[[파일:Perl.png|썸네일|200픽셀|'''펄'''(Perl) 로고와 글자]]
+
[[파일:펄 글자.png|썸네일|300픽셀|'''펄'''(Perl)]]
  
 
'''펄'''(Perl)이란 Practical Extraction and Report Language의 약자로서, [[유닉스]] 계열의 운영체제에서 사용하는 [[스크립트 언어|스크립트]] [[프로그래밍 언어]]이다. 1987년 [[래리 월]](Larry Wall)이 개발하였다. 펄의 마스코트는 낙타이다.
 
'''펄'''(Perl)이란 Practical Extraction and Report Language의 약자로서, [[유닉스]] 계열의 운영체제에서 사용하는 [[스크립트 언어|스크립트]] [[프로그래밍 언어]]이다. 1987년 [[래리 월]](Larry Wall)이 개발하였다. 펄의 마스코트는 낙타이다.
  
 
== 개요 ==
 
== 개요 ==
펄(Perl)은 [[래리 월]](Larry Wall)이 개발한 [[프로그래밍 언어]]로 파일로부터 데이타의 추출과 변환을 쉽게 구현할 수 있는 [[C]], [[ask]], [[sed]], [[sh]]의 장점들을 취한 [[프로그래밍 언어]]이다. 현재 5.26버전까지 출시되었으며, 다양한 [[운영체제]]에서 사용가능하다.
+
펄(Perl)은 [[래리 월]](Larry Wall)이 개발한 [[프로그래밍 언어]]로 파일로부터 데이타의 추출과 변환을 쉽게 구현할 수 있는 [[C]], [[ask]], [[sed]], [[sh]]의 장점들을 취한 [[프로그래밍 언어]]이다. 1987년에 발표되어 2019년 현재 32년 된 언어이다. 만든 이는 래리 월(Larry Wall)이다. 이름 자체는 Practical Extraction and Reporting Language(실용적인 데이터 취득 및 리포트 작성 언어)의 약자이다. 본래는 붙일만한 이름을 찾을 수 없었던 제작자가 성서에서 아무 단어나 따와서 붙인 이름의 Pearl(진주)라는 이름을 붙이고 싶어했지만, 이미 그런 이름을 가진 프로그래밍 언어가 있었기에 철자만 바꿔서 Perl이라는 이름을 붙였다. 약자는 나중에 가져다 붙인 것이다. 펀 언어는 실용성을 모토로 하고 있으며, 동시대의 유닉스 명령 도구들이 지닌 불특정한 데이터 길이의 제약 없이 강력한 문자열 처리 기능을 제공한다. 이를 통해 텍스트 파일의 조작을 용이하게 만들어 줄 수 있다. 펄 5는 부분적인 이유로는 타의 추종을 불허하는 정규 표현식, 문자열 구문 분석 기능 덕분에 1990년대 말 들어 인기를 끌기 시작했다.<ref>〈[https://ko.wikipedia.org/wiki/%ED%8E%84#%ED%8A%B9%EC%A7%95 펄]〉, 《위키백과》</ref>
  
 
== 역사 ==
 
== 역사 ==
1987년 [[래리 월]]은 펄에 대한 작업을 시작하였으며, 1987년 12월 18일 버전1.0을 뉴스그룹에 공개하였다. <ref>뉴스그룹 보도, <[https://groups.google.com/forum/#!topicsearchin/comp.sources.unix/after$3A1988$2F02$2F01$20before$3A1988$2F02$2F29  “v13i001: Perl, a "replacement" for awk and sed, Part01/10”]> , 《뉴스그룹》 , 2011-01-13</ref> 그 뒤로 펄은 급격히 발전하였다. 1988년에는 개선된 엔진을포함한 펄 2가 공개되었고, 펄 3는 1989년에 출시되었다. 그에 이어 펄 4 는 1933년 유지 보수판으로 출시되었고, 당시 [[래리 월]]은 펄 4를 버리고 펄 5에대한 작업을 시작하였다. 펄 5의 초기설계는 1995년 계속되었고, 1994년 5월에 펄 5를 다른 플랫폼으로 이식하는 협업이 시작되었다.
+
* 1987년 : 랠리 월은 유니시스에서 프로그래머로 펄에 대한 작업 시작
  
== 특징 ==
+
<table border="1" bgcolor="FFFFD4" align="right">
펄은 범용언어로 주로 방대한 문자열을 처리하는 데 사용된다.
+
<tr bgcolor="F15F5F">
 +
<td><font size=3><b>주요 버전</b></font></td><td align="center"><font size=3><b>출시</b></font></td>
 +
</tr>
 +
<tr>
 +
<td>5.5</td><td>1998-07-22</td>
 +
</tr>
 +
<tr>
 +
<td>5.6</td><td>2000-03-22</td>
 +
</tr>
 +
<tr>
 +
<td>5.8</td><td>2002-07-18</td>
 +
</tr>
 +
<tr>
 +
<td>5.10</td><td>2007-12-18</td>
 +
</tr>
 +
<tr>
 +
<td>5.12</td><td>2010-04-12</td>
 +
</tr>
 +
<tr>
 +
<td>5.14</td><td>2011-05-14</td>
 +
</tr>
 +
<tr>
 +
<td>5.16</td><td>2012-05-20</td>
 +
</tr>
 +
<tr>
 +
<td>5.18</td><td>2013-05-18</td>
 +
</tr>
 +
<tr>
 +
<td>5.20</td><td>2014-05-27</td>
 +
</tr>
 +
<tr>
 +
<td>5.22</td><td>2015-06-01</td>
 +
</tr>
 +
<tr>
 +
<td>5.24</td><td>2016-05-09</td>
 +
</tr>
 +
<tr>
 +
<td>5.26</td><td>2017-05-30</td>
 +
</tr>
 +
<tr>
 +
<td>5.28</td><td>2018-06-23</td>
 +
</tr>
 +
<tr>
 +
<td>5.30</td><td>2019-05-22</td>
 +
</tr>
 +
<tr>
 +
<td>5.31003.0</td><td>2019-08-20</td>
 +
</tr>
 +
</table>
  
펄은 [[정규표현식]]의 대부이다. 긴 문자열을 분석해 어떤 의미를 추출할 때 펄은 최적의 언어이다.
+
* 1987년 12월 18일 : 버전 1.0을 comp.sources.misc 뉴스그룹에 공개
 +
* 1988년 : 개선된 정규 표현식 엔진을 포함한 펄 2 공개
 +
* 1989년 : 펄 3의 출시로 이진 데이터 스트림 지원 추가
 +
* 1991년 : 《프로그래밍 펄》이라는 제목의 책 출판과 펄 버전4 출시
 +
* 1993년 : 펄 4는 4.036에 이르며 일련의 유지 보수판으로 출시
 +
* 1994년 4월 : perl-porters 메이링 리스트가 개설되어 펄 5를 다른 플랫폼으로 이식하여 협업 시작
 +
* 1994년 10월 17일 : 펄 5.000의 공개로 객체, 레퍼런스, 렉시컬 변수, 모듈 등의 추가와 인프리터 수정 없이도 모듈이 언어의 확장을 위한 매커니즘 제공
 +
* 1995년 : 펄 5의 초기 설계
 +
* 1995년 3월 13일 : 펄 5.001의 공개
 +
* 1996년 2월 29일 : 펄 5.002와 새로운 프로토타입 기능 더불어 공개
 +
* 1996년 6월 25일 : 펄 5.003의 보안 문제 수정
 +
* 1997년 5월 15일 : 펄 5.004의 공개와 여러 기능들 가운데 유니퍼설 패키지 기능 포함
 +
* 1998년 7월 22일 : 펄 5.005로 regex 엔진에 여러 기능이 강화와 B::* 모듈을 통한 백엔드로의 새로운 후킹, ar// 정규 표현식 인용 연산자, 기타 수많은 코어 모듈과 BeOS를 포함한 더 많은 운영 체제 지원
 +
* 2000년 3월 22일 : 펄 5.6과 64비트 지원, 유니코드 문자열 표현, 대용량 파일 지원 "our" 키워드 포함<ref>〈[https://perldoc.perl.org/perl56delta.html Perl 5 version 30.0 documentation perl56delta]〉, 《펄 공식 사이트》</ref>
 +
* 2001년 : 변경 요청 사항들을 요약하고 다음 세대의 펄의 설계를 나타내는 일련의 문서들인 펄 6의 계시록을 위한 작업 시작
 +
* 2002년 7월 18일 : 펄 5.8의 공개와 유니코드 지원을 개선하고 새로운 입출력과 새로운 스레드를 구현하였으며, 수치 정확도를 개선하고 새로운 모듈 몇 개 더 추가
 +
* 2007년 12월 18일 : 펄 5.10 공개, 펄 6에 가까운 새로운 기능들이 포함, Switch 문, 정규 표현식 업데이트, 스마트 매치 연산자 "~~" 포함
 +
* 2010년 4월 12일 : 펄 5.12 공개, 새로운 package NAME VERSION 문법, 야다 야다 연산자, 암묵적 제한, 완전한 2038년 문제 대응, 정규 표현식 변환 오버로딩, DTrace 지원, 유니코드 5.2 지원
 +
* 2011년 1월 21일 : 펄 5.12.3 공개로 업데이트된 모듈과 일부 문서 변경 사항 포함<ref>〈[https://perldoc.perl.org/perl5123delta.html Perl 5 version 30.0 documentation perl5123delta]〉, 《펄 공식 사이트》</ref>
 +
* 2011년 5월 14일 : 펄 5.14 공개
 +
* 2011년 6월 20일 : 펄 5.12.4 공개
 +
* 2011년 9월 26일 : 펄 5.14.2 공개, [[JSON]] 지원
 +
* 2012년 5월 20일 : 펄 5.16공개, 가상으로 구현하려는 펄의 버전을 지정할 수 있는 기능을 들 수 있으며 이로써 사용자가 펄 버전을 업그레이드하더라도 일반적으로 비호환되는 오래된 스크립트를 실행할 수 있게 됨
 +
* 2012년 11월 10일 : 펄 5.15.5 공개
 +
* 2013년 5월 18일 : 펄 5.18 공개, dtrace 후킹, 렉시컬 함수, 더 많은 CORE:: 함수, 보안적인 이유로 인한 해시의 점검, 유니코드 6.2 지원
 +
* 2013년 10월 10일 : 펄 5.14.4 공개
 +
* 2014년 5월 27일 : 펄 5.20 공개, 서브루틴 서명, 해시 슬라이스/새로운 슬라이스 문법, 후위 역참조, 유니코드 6.3, 일관된 난수 발생기를 사용하는 rand() 추가
 +
=== 포니 ===
 +
PONIE는 Perl On New Internal Engine의 준말이다. PONIE 프로젝트는 2003년부터 2006년까지 존재해쓰며, 펄 5와 펄 6 간의 연결 다리 역할을 하기로 되어 있다. 펄 5 인터프리터를 다시 작성함으로 펄 6 가상 머신인 패럿에서 실행할 수 있게 하려는 노력이 있다. 목적은 전 세계 수천 개의 회사에 쑤이는 수백만 줄의 펄 5 코드의 미래를 보장하기 위해서였다. PONIE 프로젝트는 2006년에 끝났으며, 더 이상 개발되고 있지 않다. PONIE의 일부로서 펄 5 인터프리터에 적용된 개선 사항들 중 일부분은 해당 프로젝트에 추가되었다.
  
* 상대적으로 배우기 쉽다
+
== 특징 ==
* [[C]]와 비슷하지만 해석형 언어. 그렇기 때문에 코드실행이 쉽다.
+
C언어와 비슷한 구문에 sed,AWK, 셸 스크립트 등과 같은 여러 유명한 유닉스 기능을 포함하고 있으며 언어 자체의 자유도가 높고 표현력도 뛰어나며 코딩도 쉽다. 특히 텍스트를 처리하는 기능이 최강점으로 꼽힌다. Perl은 텍스트를 처리하는 기능이나 문자열의 일치 여부 검색 및 치환등을 매우 짧은 코드로 처리 가능하고 성능도 매우 뛰어나다. 보간 처리에 있어서는 스크립트 언어 뿐만 아니라 전체 언저 중에서 성능, 기능상 탁월하다. 그런 장점 덕분에 언어학 전공자들이 많이 이용하고 Perl 관련 책을 보더라도 언어학 관련 책들이 더 많다.<ref>〈[https://namu.wiki/w/Perl Perl]〉, 《나무위키》</ref> 모든 버전의 펄은 자동 데이터 타이핑 및 자동 메모리 관리 기능을 수행한다. 인터프리터는 프로그램 안의 모든 데이터마다 지니고 있는 자료형과 필요한 기억 공간을 알고 있다. 참조 횟수 계산 방식을 이용하여 필요한 만큼 기억 공간을 할당하고 해제한다. 숫자에서 문자열로의 변환과 같은 유효한 형 변환은 런타임 도중에 자동으로 수행되며 잘못된 형 변환은 치명적인 오류로 간주한다.<ref>〈[https://ko.wikipedia.org/wiki/%ED%8E%84#%ED%8A%B9%EC%A7%95 펄]〉, 《위키백과》</ref>
* 동적언어이다.
 
* 펄 개발자를 채용도 하지만, [[파이썬]]과 [[루비]]는 배우는 것도 좋다.
 
  
== 펄 언어의 장점 ==
+
=== 장점 ===
*'''많은 [[운영체제]]에 포팅되었음''' : 처음에는 [[유닉스]]를 위해 만들어졌지만,Perl로 씌여진 [[프로그램]]들은 서로 다른 [[운영체제]]에서 소스를 수정하지 않고도, (혹은 아주 약간만 수정하고도) 같이 사용할 수 있다. 결국, 지금은 거의 모든 [[운영체제]]에서 Perl을 사용할 수 있게 되었다.<br>
+
* 많은 운영체제에 포팅되었음 : 처음에는 [[유닉스]]를 위해 만들어졌지만,Perl로 씌여진 [[프로그램]]들은 서로 다른 [[운영체제]]에서 소스를 수정하지 않고도, (혹은 아주 약간만 수정하고도) 같이 사용할 수 있다. 결국, 지금은 거의 모든 [[운영체제]]에서 Perl을 사용할 수 있게 되었다.<br>
*'''무료로 사용이 가능함''' : 우리는 인터넷상에서 다양한 배포장소를 찾을 수 있고, 언제든 다운로드 받아서 여러분의 시스템에 설치할 수 있다.<br>
+
* 무료로 사용이 가능함 : 우리는 인터넷상에서 다양한 배포장소를 찾을 수 있고, 언제든 다운로드 받아서 여러분의 시스템에 설치할 수 있다.<br>
*'''실용적임''' : Perl이 실용적인 것은 Perl의 세가지 지향점인 완전한(Complete) 언어, 사용하기 쉬운 언어(Easy to learn), 효율적인 언어(Efficiency)를 달성했기 때문이다.<br>
+
* 실용적임 : Perl이 실용적인 것은 Perl의 세가지 지향점인 완전한(Complete) 언어, 사용하기 쉬운 언어(Easy to learn), 효율적인 언어(Efficiency)를 달성했기 때문이다.<br>
*'''효율적임''' : 효율은 구현에 투입된 비용(시간, 인력)에 비례한 생산물의 가치라고 볼 때, Perl은 매우 효율적이다.텍스트, 네트웍, 데이터처리 등에 관한 다양한 처리능력을 갖추고 있으며, 사용자는 이러한 능력을 쉽게 이끌어 내 사용할 수 있다. 즉, 적은 시간에 적은 인역으로도 구현하고도, 다양한 능력을 활용하여 문제를 처리할 수 있다.
+
* 효율적임 : 효율은 구현에 투입된 비용(시간, 인력)에 비례한 생산물의 가치라고 볼 때, Perl은 매우 효율적이다.텍스트, 네트웍, 데이터처리 등에 관한 다양한 처리능력을 갖추고 있으며, 사용자는 이러한 능력을 쉽게 이끌어 내 사용할 수 있다. 즉, 적은 시간에 적은 인역으로도 구현하고도, 다양한 능력을 활용하여 문제를 처리할 수 있다.
 +
* 언프리팅 언어 : 개발사이클을 짧게 만드는 특성이 되기 때문에 전체 개발과정 역시 짧다. 어떠한 시급한 업무를 처리하는 데 있어서 강력한 장점이 될 수 있다. 또한, 네트워크 관련 작업처럼 복잡하고 기술적으로 어려운 일에서는 먼저 Perl언어로 구현해 보고, 성공이 될 시, C언어로 코드를 다시 작성하는 표본언어(prototyping language)로 사용할 수 있다.<ref>Perl in Action, 〈[http://www.perl.or.kr/aboutperl/perl_benefit Perl의 장점]〉</ref>
 +
* 텍스트 데이터에 최적화 : Perl은 초기에 유닉스 운영체제를 위한 도우미 언어(glue language)로 고안되었다. 대부분의 유닉스 설정파일이나 로그 파일들은 텍스트로 씌여져 있는 만큼 Perl은 테스트 데이터 처리에 최적화 될 수 밖에 없다. 지금도 Perl은 유닉스 계열에서 다양한 시스템 관리에 활용되고 있다. 또한, [[PHP]]와 같은 웹 전용 스크립트가 쟁기기 전에는 CGI를 구현하기 위해 많이 이용되었던 것도 Perl이 갖는 텍스트 처리 능력 때문이다.
 +
* C언어 삽입 : Perl은 C언어에 내장할 수 있고, C코드와 Perl 스크립트가 데이터를 교환할 수 있는 메카니즘을 갖고 있다.
 +
* C언어 이용한 확장성 : Perl은 C언어로 작성된 만큼, 확장 역시 C 언어로 할 수 있다. 객체지향적인 특성을 활용한 확장모듈의 작성방법은 많은 프로그래머들이 Perl의 확장에 쉽게 참여할 수 있고, 또 많은 사용자 들이 이 모듈을 쉽게 설치하여 사용하게 함으로써 Perl의 사용확대를 가속화하였다.
 +
* TCP/IP 네트워크 : TCP/IP에 대한 지원은 특히 유닉스계열에서 다양한 네트워크 관련 직업을 쉽게 할 수 있다. 인터넷 환경에서는 이러한 지원이 필수적이며, Perl로 직접 웹서버를 만들 수도 있다.
 +
* 내장된 디버깅 환경 : Perl은 [[디버거]]를 내장하고 있다. 브레이크 포인트를 설정하고, 코드를 실행시키며, 변수의 값을 보면서 프로그램의 오류를 찾아낼 수 있다.
  
== 펄 언어의 단점 ==
+
=== 단점 ===
*'''특정 부분을 조작할때는 매우 느림''' : 문자열 조각 이외의 작업을 할 때는 속도가 매우 느린편이다. 단, C코드로 이루어진 펄 모듈을 사용한다면 C와 견줄 속도를 낸다.<br>
+
* 특정 부분을 조작할때는 매우 느림 : 문자열 조각 이외의 작업을 할 때는 속도가 매우 느린편이다. 단, C코드로 이루어진 펄 모듈을 사용한다면 C와 견줄 속도를 낸다.<br>
*'''이진수 파일을 다룰 시 불리함''' : 펄 언어는 기본적으로 문자열 단위로 입출력하기에 바이트 단위로 다루는 데에는 미숙하다.<br>
+
* 이진수 파일을 다룰 시 불리함 : 펄 언어는 기본적으로 문자열 단위로 입출력하기에 바이트 단위로 다루는 데에는 미숙하다.<br>
*'''독립적인 실행파일''' : 펄 만에 독립적인 실행파일이 있기에 펄 이 설치되어 있지 않은 컴퓨터에서는 실행이 되지 않는다.( 펄 [[소스]]를 exe로 [[컴파일]] 해주는 [[프로그램]]이 있긴 하나 상용이고 완벽하지 않다.)
+
* 독립적인 실행파일 : 펄 만에 독립적인 실행파일이 있기에 펄 이 설치되어 있지 않은 컴퓨터에서는 실행이 되지 않는다.( 펄 소스를 exe로 [[컴파일]] 해주는 [[프로그램]]이 있긴 하나 상용이고 완벽하지 않다.)
 +
* 메모리 요구량 많음 : Perl은 쉘 프로그램보다 크기가 커서 메모리 요구량이 매우 많다. 따라서 자주 수행되는 간단한 프로그램은 쉘 스크립트로 작성하는 것이 바람직하다. Perl은 프로그램을 이진 파일로 컴파일하지 않은 인터르피터 언어이므로 소스 코드가 자연히 공개되어져 상업용 프로그램에는 적합하지 않다.
  
== 펄 언어의 평가 ==
+
== 평가 ==
*'''개발자 기피 1호 언어 펄''' : 펄은 2000년대 초반까지만 해도 개발자들에겐 만능 같은 존재였다. 하지만 불과 15년 만에 펄은 천덕꾸러기로 전락했다. 촉망받던 언어 '펄'이 현재에는 개발자들이 기피하는 언어로 평가된다. 이러한 평가가 나온 이유는 '스택오버플로' 때문이다. 최근 개발자들 사이에서 '선호하지 않는 기술' 태그로 분석할 수 있었다. 그 분석결과가 '선호하지 않는 기술' 안에 '펄'이 가장 많이 태그되었다.<ref>임유경 기자, 〈[http://www.zdnet.co.kr/view/?no=20171107145908&re=R_20181116170118 개발자 기피 1호언어 펄…"야후 닮았다"]〉, 《지디넷코리아》, 2017-11-07</ref>
+
펄은 2000년대 초반까지만 해도 개발자들에겐 만능 같은 존재였다. 하지만 불과 15년 만에 펄은 천덕꾸러기로 전락했다. 촉망받던 언어 '펄'이 현재에는 개발자들이 기피하는 언어로 평가된다. 이러한 평가가 나온 이유는 '스택오버플로' 때문이다. 최근 개발자들 사이에서 '선호하지 않는 기술' 태그로 분석할 수 있었다. 그 분석결과가 '선호하지 않는 기술' 안에 '펄'이 가장 많이 태그되었다.<ref>임유경 기자, 〈[http://www.zdnet.co.kr/view/?no=20171107145908&re=R_20181116170118 개발자 기피 1호언어 펄…"야후 닮았다"]〉, 《지디넷코리아》, 2017-11-07</ref>
  
 
{{각주}}
 
{{각주}}
38번째 줄: 119번째 줄:
 
== 참고자료 ==
 
== 참고자료 ==
 
* 뉴스그룹 보도, 〈[https://groups.google.com/forum/#!topicsearchin/comp.sources.unix/after$3A1988$2F02$2F01$20before$3A1988$2F02$2F29  “v13i001: Perl, a "replacement" for awk and sed, Part01/10”]〉, 《뉴스그룹》, 2011-01-13
 
* 뉴스그룹 보도, 〈[https://groups.google.com/forum/#!topicsearchin/comp.sources.unix/after$3A1988$2F02$2F01$20before$3A1988$2F02$2F29  “v13i001: Perl, a "replacement" for awk and sed, Part01/10”]〉, 《뉴스그룹》, 2011-01-13
* 〈[https://namu.wiki/w/Perl 펄의 역사]〉, 《니무위키》
+
* 〈[https://namu.wiki/w/Perl 펄의 역사]〉, 《나무위키》
 
* 한국 펄 사용자 모임, 〈[http://www.perl.or.kr/aboutperl/perl_benefit Perl의 장점]〉, 《구글 사이트 도구》
 
* 한국 펄 사용자 모임, 〈[http://www.perl.or.kr/aboutperl/perl_benefit Perl의 장점]〉, 《구글 사이트 도구》
 
* mwultong, 〈[http://mwultong.blogspot.com/2006/10/perl.html 펄(Perl)의 장단점]〉, 《개인블로그》, 2006-10-18
 
* mwultong, 〈[http://mwultong.blogspot.com/2006/10/perl.html 펄(Perl)의 장단점]〉, 《개인블로그》, 2006-10-18
 
* 임유경 기자, 〈[http://www.zdnet.co.kr/view/?no=20171107145908&re=R_20181116170118 개발자 기피 1호언어 펄…"야후 닮았다"]〉, 《지디넷코리아》, 2017-11-07
 
* 임유경 기자, 〈[http://www.zdnet.co.kr/view/?no=20171107145908&re=R_20181116170118 개발자 기피 1호언어 펄…"야후 닮았다"]〉, 《지디넷코리아》, 2017-11-07
 +
* 〈[https://ko.wikipedia.org/wiki/%ED%8E%84#cite_note-41 펄]〉, 《위키백과》
 +
* Perl in Action, 〈[http://www.perl.or.kr/aboutperl/perl_benefit Perl의 장점]〉
 +
* 베리굳, 〈[https://m.blog.naver.com/PostView.nhn?blogId=yyj1854&logNo=40017350458&proxyReferer=https%3A%2F%2Fwww.google.com%2F perl 이란]〉, 2005-09-09
 +
* 〈[http://www.cpan.org/src/ 펄 소스]〉, 《스팬》
 +
* Andrew C. Oliver, 〈[http://www.itworld.co.kr/news/108698?page=0,1 "미래를 생각하는 개발자를 위한" 지금 배워야 하는 프로그래밍 언어]〉, 《아이티월드》, 2018-03-27
  
 
== 같이 보기 ==
 
== 같이 보기 ==
47번째 줄: 133번째 줄:
 
* [[스크립트 언어]]
 
* [[스크립트 언어]]
  
{{프로그래밍 언어|토막글}}
+
{{프로그래밍 언어|검토 필요}}

2020년 11월 18일 (수) 17:22 기준 최신판

(Perl)
(Perl)

(Perl)이란 Practical Extraction and Report Language의 약자로서, 유닉스 계열의 운영체제에서 사용하는 스크립트 프로그래밍 언어이다. 1987년 래리 월(Larry Wall)이 개발하였다. 펄의 마스코트는 낙타이다.

개요[편집]

펄(Perl)은 래리 월(Larry Wall)이 개발한 프로그래밍 언어로 파일로부터 데이타의 추출과 변환을 쉽게 구현할 수 있는 C, ask, sed, sh의 장점들을 취한 프로그래밍 언어이다. 1987년에 발표되어 2019년 현재 32년 된 언어이다. 만든 이는 래리 월(Larry Wall)이다. 이름 자체는 Practical Extraction and Reporting Language(실용적인 데이터 취득 및 리포트 작성 언어)의 약자이다. 본래는 붙일만한 이름을 찾을 수 없었던 제작자가 성서에서 아무 단어나 따와서 붙인 이름의 Pearl(진주)라는 이름을 붙이고 싶어했지만, 이미 그런 이름을 가진 프로그래밍 언어가 있었기에 철자만 바꿔서 Perl이라는 이름을 붙였다. 약자는 나중에 가져다 붙인 것이다. 펀 언어는 실용성을 모토로 하고 있으며, 동시대의 유닉스 명령 도구들이 지닌 불특정한 데이터 길이의 제약 없이 강력한 문자열 처리 기능을 제공한다. 이를 통해 텍스트 파일의 조작을 용이하게 만들어 줄 수 있다. 펄 5는 부분적인 이유로는 타의 추종을 불허하는 정규 표현식, 문자열 구문 분석 기능 덕분에 1990년대 말 들어 인기를 끌기 시작했다.[1]

역사[편집]

  • 1987년 : 랠리 월은 유니시스에서 프로그래머로 펄에 대한 작업 시작
주요 버전출시
5.51998-07-22
5.62000-03-22
5.82002-07-18
5.102007-12-18
5.122010-04-12
5.142011-05-14
5.162012-05-20
5.182013-05-18
5.202014-05-27
5.222015-06-01
5.242016-05-09
5.262017-05-30
5.282018-06-23
5.302019-05-22
5.31003.02019-08-20
  • 1987년 12월 18일 : 버전 1.0을 comp.sources.misc 뉴스그룹에 공개
  • 1988년 : 개선된 정규 표현식 엔진을 포함한 펄 2 공개
  • 1989년 : 펄 3의 출시로 이진 데이터 스트림 지원 추가
  • 1991년 : 《프로그래밍 펄》이라는 제목의 책 출판과 펄 버전4 출시
  • 1993년 : 펄 4는 4.036에 이르며 일련의 유지 보수판으로 출시
  • 1994년 4월 : perl-porters 메이링 리스트가 개설되어 펄 5를 다른 플랫폼으로 이식하여 협업 시작
  • 1994년 10월 17일 : 펄 5.000의 공개로 객체, 레퍼런스, 렉시컬 변수, 모듈 등의 추가와 인프리터 수정 없이도 모듈이 언어의 확장을 위한 매커니즘 제공
  • 1995년 : 펄 5의 초기 설계
  • 1995년 3월 13일 : 펄 5.001의 공개
  • 1996년 2월 29일 : 펄 5.002와 새로운 프로토타입 기능 더불어 공개
  • 1996년 6월 25일 : 펄 5.003의 보안 문제 수정
  • 1997년 5월 15일 : 펄 5.004의 공개와 여러 기능들 가운데 유니퍼설 패키지 기능 포함
  • 1998년 7월 22일 : 펄 5.005로 regex 엔진에 여러 기능이 강화와 B::* 모듈을 통한 백엔드로의 새로운 후킹, ar// 정규 표현식 인용 연산자, 기타 수많은 코어 모듈과 BeOS를 포함한 더 많은 운영 체제 지원
  • 2000년 3월 22일 : 펄 5.6과 64비트 지원, 유니코드 문자열 표현, 대용량 파일 지원 "our" 키워드 포함[2]
  • 2001년 : 변경 요청 사항들을 요약하고 다음 세대의 펄의 설계를 나타내는 일련의 문서들인 펄 6의 계시록을 위한 작업 시작
  • 2002년 7월 18일 : 펄 5.8의 공개와 유니코드 지원을 개선하고 새로운 입출력과 새로운 스레드를 구현하였으며, 수치 정확도를 개선하고 새로운 모듈 몇 개 더 추가
  • 2007년 12월 18일 : 펄 5.10 공개, 펄 6에 가까운 새로운 기능들이 포함, Switch 문, 정규 표현식 업데이트, 스마트 매치 연산자 "~~" 포함
  • 2010년 4월 12일 : 펄 5.12 공개, 새로운 package NAME VERSION 문법, 야다 야다 연산자, 암묵적 제한, 완전한 2038년 문제 대응, 정규 표현식 변환 오버로딩, DTrace 지원, 유니코드 5.2 지원
  • 2011년 1월 21일 : 펄 5.12.3 공개로 업데이트된 모듈과 일부 문서 변경 사항 포함[3]
  • 2011년 5월 14일 : 펄 5.14 공개
  • 2011년 6월 20일 : 펄 5.12.4 공개
  • 2011년 9월 26일 : 펄 5.14.2 공개, JSON 지원
  • 2012년 5월 20일 : 펄 5.16공개, 가상으로 구현하려는 펄의 버전을 지정할 수 있는 기능을 들 수 있으며 이로써 사용자가 펄 버전을 업그레이드하더라도 일반적으로 비호환되는 오래된 스크립트를 실행할 수 있게 됨
  • 2012년 11월 10일 : 펄 5.15.5 공개
  • 2013년 5월 18일 : 펄 5.18 공개, dtrace 후킹, 렉시컬 함수, 더 많은 CORE:: 함수, 보안적인 이유로 인한 해시의 점검, 유니코드 6.2 지원
  • 2013년 10월 10일 : 펄 5.14.4 공개
  • 2014년 5월 27일 : 펄 5.20 공개, 서브루틴 서명, 해시 슬라이스/새로운 슬라이스 문법, 후위 역참조, 유니코드 6.3, 일관된 난수 발생기를 사용하는 rand() 추가

포니[편집]

PONIE는 Perl On New Internal Engine의 준말이다. PONIE 프로젝트는 2003년부터 2006년까지 존재해쓰며, 펄 5와 펄 6 간의 연결 다리 역할을 하기로 되어 있다. 펄 5 인터프리터를 다시 작성함으로 펄 6 가상 머신인 패럿에서 실행할 수 있게 하려는 노력이 있다. 목적은 전 세계 수천 개의 회사에 쑤이는 수백만 줄의 펄 5 코드의 미래를 보장하기 위해서였다. PONIE 프로젝트는 2006년에 끝났으며, 더 이상 개발되고 있지 않다. PONIE의 일부로서 펄 5 인터프리터에 적용된 개선 사항들 중 일부분은 해당 프로젝트에 추가되었다.

특징[편집]

C언어와 비슷한 구문에 sed,AWK, 셸 스크립트 등과 같은 여러 유명한 유닉스 기능을 포함하고 있으며 언어 자체의 자유도가 높고 표현력도 뛰어나며 코딩도 쉽다. 특히 텍스트를 처리하는 기능이 최강점으로 꼽힌다. Perl은 텍스트를 처리하는 기능이나 문자열의 일치 여부 검색 및 치환등을 매우 짧은 코드로 처리 가능하고 성능도 매우 뛰어나다. 보간 처리에 있어서는 스크립트 언어 뿐만 아니라 전체 언저 중에서 성능, 기능상 탁월하다. 그런 장점 덕분에 언어학 전공자들이 많이 이용하고 Perl 관련 책을 보더라도 언어학 관련 책들이 더 많다.[4] 모든 버전의 펄은 자동 데이터 타이핑 및 자동 메모리 관리 기능을 수행한다. 인터프리터는 프로그램 안의 모든 데이터마다 지니고 있는 자료형과 필요한 기억 공간을 알고 있다. 참조 횟수 계산 방식을 이용하여 필요한 만큼 기억 공간을 할당하고 해제한다. 숫자에서 문자열로의 변환과 같은 유효한 형 변환은 런타임 도중에 자동으로 수행되며 잘못된 형 변환은 치명적인 오류로 간주한다.[5]

장점[편집]

  • 많은 운영체제에 포팅되었음 : 처음에는 유닉스를 위해 만들어졌지만,Perl로 씌여진 프로그램들은 서로 다른 운영체제에서 소스를 수정하지 않고도, (혹은 아주 약간만 수정하고도) 같이 사용할 수 있다. 결국, 지금은 거의 모든 운영체제에서 Perl을 사용할 수 있게 되었다.
  • 무료로 사용이 가능함 : 우리는 인터넷상에서 다양한 배포장소를 찾을 수 있고, 언제든 다운로드 받아서 여러분의 시스템에 설치할 수 있다.
  • 실용적임 : Perl이 실용적인 것은 Perl의 세가지 지향점인 완전한(Complete) 언어, 사용하기 쉬운 언어(Easy to learn), 효율적인 언어(Efficiency)를 달성했기 때문이다.
  • 효율적임 : 효율은 구현에 투입된 비용(시간, 인력)에 비례한 생산물의 가치라고 볼 때, Perl은 매우 효율적이다.텍스트, 네트웍, 데이터처리 등에 관한 다양한 처리능력을 갖추고 있으며, 사용자는 이러한 능력을 쉽게 이끌어 내 사용할 수 있다. 즉, 적은 시간에 적은 인역으로도 구현하고도, 다양한 능력을 활용하여 문제를 처리할 수 있다.
  • 언프리팅 언어 : 개발사이클을 짧게 만드는 특성이 되기 때문에 전체 개발과정 역시 짧다. 어떠한 시급한 업무를 처리하는 데 있어서 강력한 장점이 될 수 있다. 또한, 네트워크 관련 작업처럼 복잡하고 기술적으로 어려운 일에서는 먼저 Perl언어로 구현해 보고, 성공이 될 시, C언어로 코드를 다시 작성하는 표본언어(prototyping language)로 사용할 수 있다.[6]
  • 텍스트 데이터에 최적화 : Perl은 초기에 유닉스 운영체제를 위한 도우미 언어(glue language)로 고안되었다. 대부분의 유닉스 설정파일이나 로그 파일들은 텍스트로 씌여져 있는 만큼 Perl은 테스트 데이터 처리에 최적화 될 수 밖에 없다. 지금도 Perl은 유닉스 계열에서 다양한 시스템 관리에 활용되고 있다. 또한, PHP와 같은 웹 전용 스크립트가 쟁기기 전에는 CGI를 구현하기 위해 많이 이용되었던 것도 Perl이 갖는 텍스트 처리 능력 때문이다.
  • C언어 삽입 : Perl은 C언어에 내장할 수 있고, C코드와 Perl 스크립트가 데이터를 교환할 수 있는 메카니즘을 갖고 있다.
  • C언어 이용한 확장성 : Perl은 C언어로 작성된 만큼, 확장 역시 C 언어로 할 수 있다. 객체지향적인 특성을 활용한 확장모듈의 작성방법은 많은 프로그래머들이 Perl의 확장에 쉽게 참여할 수 있고, 또 많은 사용자 들이 이 모듈을 쉽게 설치하여 사용하게 함으로써 Perl의 사용확대를 가속화하였다.
  • TCP/IP 네트워크 : TCP/IP에 대한 지원은 특히 유닉스계열에서 다양한 네트워크 관련 직업을 쉽게 할 수 있다. 인터넷 환경에서는 이러한 지원이 필수적이며, Perl로 직접 웹서버를 만들 수도 있다.
  • 내장된 디버깅 환경 : Perl은 디버거를 내장하고 있다. 브레이크 포인트를 설정하고, 코드를 실행시키며, 변수의 값을 보면서 프로그램의 오류를 찾아낼 수 있다.

단점[편집]

  • 특정 부분을 조작할때는 매우 느림 : 문자열 조각 이외의 작업을 할 때는 속도가 매우 느린편이다. 단, C코드로 이루어진 펄 모듈을 사용한다면 C와 견줄 속도를 낸다.
  • 이진수 파일을 다룰 시 불리함 : 펄 언어는 기본적으로 문자열 단위로 입출력하기에 바이트 단위로 다루는 데에는 미숙하다.
  • 독립적인 실행파일 : 펄 만에 독립적인 실행파일이 있기에 펄 이 설치되어 있지 않은 컴퓨터에서는 실행이 되지 않는다.( 펄 소스를 exe로 컴파일 해주는 프로그램이 있긴 하나 상용이고 완벽하지 않다.)
  • 메모리 요구량 많음 : Perl은 쉘 프로그램보다 크기가 커서 메모리 요구량이 매우 많다. 따라서 자주 수행되는 간단한 프로그램은 쉘 스크립트로 작성하는 것이 바람직하다. Perl은 프로그램을 이진 파일로 컴파일하지 않은 인터르피터 언어이므로 소스 코드가 자연히 공개되어져 상업용 프로그램에는 적합하지 않다.

평가[편집]

펄은 2000년대 초반까지만 해도 개발자들에겐 만능 같은 존재였다. 하지만 불과 15년 만에 펄은 천덕꾸러기로 전락했다. 촉망받던 언어 '펄'이 현재에는 개발자들이 기피하는 언어로 평가된다. 이러한 평가가 나온 이유는 '스택오버플로' 때문이다. 최근 개발자들 사이에서 '선호하지 않는 기술' 태그로 분석할 수 있었다. 그 분석결과가 '선호하지 않는 기술' 안에 '펄'이 가장 많이 태그되었다.[7]

각주[편집]

  1. 〉, 《위키백과》
  2. Perl 5 version 30.0 documentation perl56delta〉, 《펄 공식 사이트》
  3. Perl 5 version 30.0 documentation perl5123delta〉, 《펄 공식 사이트》
  4. Perl〉, 《나무위키》
  5. 〉, 《위키백과》
  6. Perl in Action, 〈Perl의 장점
  7. 임유경 기자, 〈개발자 기피 1호언어 펄…"야후 닮았다"〉, 《지디넷코리아》, 2017-11-07

참고자료[편집]

같이 보기[편집]


  검수요청.png검수요청.png 이 펄 문서는 프로그래밍에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.