Perl
패러다임다중패러다임
설계자 :래리 월
디벨로퍼래리 월
첫 등장1987년 12월 18일; 35년 전 (1987-12-18)[1]
안정적 해제
  • 5.38.0[2] / 2023년 7월 2일; 2개월(2023-07-02)
  • 5.36.1[3] / 2023년 4월 23일; 4개월 전 (2023-04-23)
프리뷰 릴리즈
5.39.1[4] / 2023년 7월 20일; 44일 전 (2023-07-20)
타이핑규율역학
구현언어C
OS크로스 플랫폼
면허증.Artistic License 1.0[5][6] 또는 GNU General Public License 버전 1 또는 이후 버전[7]
파일 확장명.plx, .pl, .pm, .t, .pod, .cgi
웹사이트perl.org
영향을 받음
AWK, BASIC, C, C++, 리스프, sed, 유닉스[8]
영향받은
CoffeeScript,[citation needed] Groovy,[citation needed] JavaScript, Julia, LPC, PHP, Python, Raku, Ruby, PowerShell

(Perl)은 높은 수준의 범용, 해석, 동적 프로그래밍 언어입니다.Perl은 공식적으로 [9]두문자어는 아니지만, Practical Extraction and Reporting [10]Language를 포함하여 다양한 백로닉이 사용되고 있습니다.

펄은 보고서 처리를 더 [12][11][13]쉽게 하기 위해 범용 유닉스 스크립트 언어로 1987년 래리[11] 월에 의해 개발되었습니다.이후 많은 변화와 수정을 거쳤습니다.펄은 원래 대문자가 아니었고 이름은 펄 4가 [13]출시될 때까지 대문자로 변경되었습니다.가장 최근 출시된 것은 1994년에 처음 출시된 펄 5입니다.2000년부터 2019년 10월까지 펄의 6번째 버전이 개발 중이었으며, 이후 이름이 라쿠로 [14][15]공식적으로 변경되었습니다.두 언어는 서로 다른 개발팀에 의해 독립적으로 계속 개발되고 서로의 아이디어를 자유롭게 차용하고 있습니다.

펄은 C, sh, AWK, [1]sed포함한 다른 프로그래밍 언어에서 기능을 차용합니다.이들은 많은 현대 유닉스 명령줄 [16]도구의 임의의 데이터 길이 제한 없이 텍스트 처리 기능을 제공합니다.펄은 매우 표현력이 뛰어난 프로그래밍 언어입니다. 주어진 알고리즘의 소스 코드는 짧고 압축성이 [17][18]높을 수 있습니다.

펄은 1990년대 중반에 CGI 스크립트 언어로 널리 인기를 얻었는데, 이는 부분적으로 강력한 정규 표현식과 문자열 구문 분석 [19][20][21][22]기능 덕분이었습니다.CGI 외에도 Perl 5는 시스템 관리, 네트워크 프로그래밍, 금융, 생물정보학, 그리고 GUI와 같은 기타 응용 프로그램에 사용됩니다.그것은 유연성과 [23]힘 때문에 "스크립트 언어의 스위스 육군 전기톱"이라는 별명을 얻었습니다.1998년에, 그것은 접착제 언어로서의 유비쿼터스 사용과 인식된 [24]우아함 둘 다를 지칭하여 "인터넷을 하나로 묶는 덕트 테이프"라고도 불렸습니다.

이름 및 로고

오라일리 미디어가 사용하는 낙타 기호
펄 재단에서 사용하는 양파 로고
얼터너티브 펄 5 로고

펄의 이름은 원래 펄(Pearl)이었습니다.월은 그 언어에 긍정적인 의미를 가진 짧은 이름을 지어주고 싶었습니다.마태오 [11][25]복음서에 나오는 진주의 비유에 대한 기독교적 언급이기도 합니다.그러나 월은 펄의 정식 출시 이전에 기존 펄 프로그래밍 언어를 발견하고 이름의 철자를 바꾸고 [26][11]이름에서 "a"를 삭제했습니다.

이름은 때때로 백로닉(backronym)으로 확장되기도 합니다.실용적 추출보고[27] 언어와 [28]매뉴얼 페이지에 있는 월만의 병리학적으로 절충적인 쓰레기 리스터.

오라일리 미디어가 출판한 프로그래밍 펄은 표지에 단봉낙타 그림이 그려져 있으며 흔히 "낙타 책"[29]이라고 불립니다.이 이미지는 펄의 비공식적인 상징이자 일반 해커 엠블럼이 되어 티셔츠와 다른 [citation needed]의류에 나타납니다.오라일리는 이 이미지를 상표로 소유하고 있지만 비상업적 용도로 사용할 수 있도록 라이센스를 부여하고 있으며, 승인 및 www.perl.com 에 대한 링크만 필요합니다.상업용 허가는 건별로 [30]결정됩니다.오라일리는 비상업적인 사이트를 위한 "Programming Republic of Perl" 로고와 펄을 [30]사용하는 모든 사이트를 위한 "Power by Perl" 버튼도 제공합니다.

Perl Foundation은 자회사인 Perl Mongers, PerlMonks, Perl.org기타 업체에 라이센스를 부여하는 양파라는 대체 기호를 소유하고 있습니다.그 상징은 진주 [32]양파에 대한 시각적인 말장난입니다.

모졸리셔스의 제작자인 세바스찬 리델(Sebastian Riedel)은 CC-SA 라이센스 버전 4.0으로 [33]이용 가능한 랩터 공룡을 묘사하는 로고를 만들었습니다.랩터의 아날로그는 [34]2010년부터 매트 S 트라우트가 제공한 일련의 강연에서 따왔습니다.

역사

초기 버전

래리 월(Larry [16]Wall)은 유니시스에서 프로그래머로 일하는 동안 1987년 펄에 대한 작업을 시작했습니다.[1]

[11] Wall이 이를 바탕으로 만든 Perl의 초기 언어는 텍스트 [11]조작을 도와주는 기존 언어를 사용하는 것이었습니다.

1988년 [35][36]6월에 출시된 펄 2는 더 나은 정규 표현 엔진을 특징으로 합니다.1989년 [35]10월에 출시된 펄 3은 이진 데이터 [37]스트림에 대한 지원을 추가했습니다.

1990년대

원래 펄에 대한 유일한 문서는 긴 맨 페이지 하나뿐이었습니다.1991년, 많은 펄 프로그래머들에게 표지 때문에 "카멜북"으로 알려진 프로그래밍 펄이 출판되었고 언어에 [38]대한 사실상의 참조가 되었습니다.동시에 Perl 버전 번호가 4로 부딪혔는데, 이는 언어의 주요한 변화를 표시하는 것이 아니라 [39]책에 잘 기록된 버전을 식별하기 위함입니다.펄 4는 1991년 [35]3월에 출시되었습니다.

Perl 4는 일련의 유지보수 릴리스를 거쳤으며 1993년 Perl 4.036으로 정점을 찍었고, 이에 따라 Wall은 Perl 4를 포기하고 Perl 5에 대한 작업을 시작했습니다.펄 5의 초기 설계는 1994년까지 계속되었습니다.Perl5-ports 메일링 리스트는 Perl5를 다른 플랫폼으로 포팅하는 작업을 조정하기 위해 1994년 5월에 설립되었습니다.Perl [40]5의 개발, 유지보수 및 포팅을 위한 주요 포럼으로 남아있습니다.

Perl 5.000은 1994년 [41]10월 17일에 출시되었습니다.이는 거의 완벽한 인터프리터의 재작성이며, 객체, 참조, 어휘(나의) 변수, 모듈 을 포함한 많은 새로운 기능을 언어에 추가했습니다.중요한 것은 모듈이 통역사를 수정하지 않고 언어를 확장할 수 있는 메커니즘을 제공했다는 것입니다.이를 통해 일반 펄 프로그래머가 새로운 언어 기능을 추가할 수 있게 되었음에도 불구하고 코어 인터프리터가 안정화될 수 있었습니다.Perl 5는 그 이후로 활발한 개발이 진행되고 있습니다.

Perl 5.001은 1995년 3월 13일에 출시되었습니다.Perl 5.002는 새로운 프로토타입 기능과 함께 1996년 2월 29일에 출시되었습니다.이를 통해 모듈 작성자는 Perl 내장된 것처럼 동작하는 서브루틴을 만들 수 있었습니다.Perl 5.003은 1996년 6월 25일 보안 릴리스로 [42]출시되었습니다.

Perl 5 역사상 가장 중요한 사건 중 하나는 적절한 언어 밖에서 발생했으며 모듈 지원의 결과였습니다.1995년 10월 26일, CPAN(Comprehensive Perl Archive Network)이 Perl 언어 및 Perl 모듈의 저장소로 설립되었으며, 2022년 12월 현재 14,324명 이상의 저자가 작성한 43,865개 배포판에 211,850개 이상의 모듈을 전달하고 있으며, 245개 이상의 [43]위치에서 전 세계적으로 미러링되고 있습니다.

Perl 5.004는 1997년 5월 15일에 출시되었으며 UNIVERSAL 패키지를 포함하여 모든 클래스가 자동으로 파생되는 기본 개체와 모듈 버전을 필요로 하는 기능을 제공했습니다.또 다른 중요한 발전은 CGI.pm 모듈을 포함한 것인데, 이 모듈은 Perl이 CGI 스크립트 언어로 인기를 얻는데 기여했습니다.

Perl 5.004는 Microsoft Windows, Plan 9, QNXAmiga대한 지원을 추가했습니다.OS.[44]

Perl 5.005는 1998년 7월 22일에 출시되었습니다.이 릴리스에는 regex 엔진에 대한 몇 가지 향상된 기능과 백엔드에 대한 새로운 후크가 포함되어 있습니다.B::*모듈,qr//regex quote operator, 기타 새로운 핵심 모듈의 대규모 선택, BeOS[46]포함한 여러 운영 체제에 대한 지원 추가.

2000–2020

메이저[41] 버전 최신[47] 업데이트
이전 버전, 이상 유지되지 않음: 5.4 1999-04-29
이전 버전, 이상 유지되지 않음: 5.5 2004-02-23
이전 버전, 이상 유지되지 않음: 5.6 2003-11-15
이전 버전, 이상 유지되지 않음: 5.8 2008-12-14
이전 버전, 이상 유지되지 않음: 5.10 2009-08-22
이전 버전, 이상 유지되지 않음: 5.12 2012-11-10
이전 버전, 이상 유지되지 않음: 5.14 2013-03-10
이전 버전, 이상 유지되지 않음: 5.16 2013-03-11
이전 버전, 이상 유지되지 않음: 5.18 2014-10-01
이전 버전, 이상 유지되지 않음: 5.20 2015-09-12
이전 버전, 이상 유지되지 않음: 5.22 2017-07-15
이전 버전, 이상 유지되지 않음: 5.24 2018-04-14
이전 버전, 이상 유지되지 않음: 5.26 2018-11-29
이전 버전, 이상 유지되지 않음: 5.28 2020-06-01
이전 버전, 이상 유지되지 않음: 5.30 2020-06-01
이전 버전, 이상 유지되지 않음: 5.32 2021-01-23
이전 버전, 이상 유지되지 않음: 5.34 2022-03-13
이전 버전이지만 여전히 유지됨: 5.36 2023-04-23
현재 안정 버전: 5.38 2023-07-02
범례:
구본
이전 버전, 여전히 유지됨
현재 안정 버전
최신 미리보기 버전
향후 출시

펄 5.6은 2000년 3월 22일에 출시되었습니다.주요 변경 사항으로는 64비트 지원, 유니코드 문자열 표현, 2 GiB 이상의 파일 지원, "우리의" [48][49]키워드 등이 있습니다.Perl 5.6을 개발할 때, 다른 오픈 소스 프로젝트와 유사한 버전으로 버전화 방식을 더 전환하기로 결정했습니다. 5.005_63 이후, 개발 버전은 홀수로, 안정된 버전은 [50]짝수로 계획되었습니다.

2000년, 월은 커뮤니티로부터 펄의 새로운 버전에 대한 제안을 요청했습니다.이 과정에서 Perl 6의 개발을 안내하는 데 사용될 361개의 RFC(request for comments) 문서가 생성되었습니다.2001년,[51] 펄 6용 Apocalypses에 대한 작업이 시작되었는데, 이 문서는 변경 요청을 요약하고 차세대 펄의 디자인을 제시하기 위한 일련의 문서입니다.이 문서들은 공식 문서가 아닌 RFC 요약본으로 제시되었습니다.이 시점에서 Perl 6은 [citation needed]언어에 대한 설명으로만 존재했습니다.

Perl 5.8은 2002년 7월 18일에 처음 출시되었으며 그 이후로 거의 매년 업데이트되었습니다.Perl 5.8은 유니코드 지원을 개선하고, 새로운 I/O 구현을 추가했으며, 새로운 스레드 구현을 추가했으며, 숫자 정확도를 개선했으며, 여러 개의 새로운 [52]모듈을 추가했습니다.2013년 현재 이 버전은 여전히 Perl의 가장 인기 있는 버전으로 남아 있으며 Red Hat 5, Suse 10, Solaris 10, HP-UX 11.31 및 AIX 5에서 사용됩니다.

2004년에 시놉시스에 대한 작업이 시작되었는데, 이 문서는 원래 아포칼립스어를 요약한 문서였지만 펄 6 언어의 사양이 되었습니다.2005년 2월, 오드리 탕[53]해스켈로 쓰여진 펄 6 통역사 퍼그스에 대한 작업을 시작했습니다.이것은 Perl 6를 현실화하기 위한 첫 번째 공동 노력이었습니다.이러한 노력은 [54]2006년에 중단되었습니다.

PONIE는 Perl On New Internal Engine의 약자입니다.PONIE 프로젝트는 2003년부터 2006년까지 존재했으며 Perl 5와 Perl 6 사이의 다리가 될 예정이었습니다.펄 6 가상 머신인 패럿에서 실행하기 위해 펄 5 인터프리터를 다시 쓰려는 노력이었습니다.목표는 전 [55]세계 수천 개 회사에서 수백만 줄의 Perl 5 코드의 미래를 보장하는 것이었습니다.PONIE 프로젝트는 2006년에 종료되어 더 이상 활발하게 개발되지 않고 있습니다.PONIE의 일부로 Perl 5 인터프리터가 개선된 부분 중 일부는 [56]해당 프로젝트에 포함되었습니다.

2007년 12월 18일, Perl 1.0 20주년 기념으로 Perl 5.10.0이 출시되었습니다.펄 5.10.0에는 주목할 만한 새로운 기능들이 포함되어 있어 펄 6에 근접하게 되었습니다.여기에는 스위치 문("given"/"when"이라고 함), 정규 표현식 업데이트, 스마트 매치 연산자(~)[57][58] 등이 포함되었습니다.비슷한 시기에 패럿 가상 머신과 함께 개발된 라쿠도 펄(Rakudo Perl)이라고 알려진 펄 6의 또 다른 구현에 대한 개발이 본격적으로 시작되었습니다.2009년 11월 현재 라쿠도 펄은 매월 정기적으로 출시되고 있으며 현재 펄 6의 가장 완벽한 구현체입니다.

Perl 5의 개발 프로세스에 큰 변화가 생겼습니다. 개발 커뮤니티는 안정적인 릴리스의 연간 일정과 함께 개발 릴리스의 월별 릴리스 주기로 전환했습니다.그 계획에 따르면 버그 수정 포인트 릴리스는 [citation needed]3개월마다 안정적인 릴리스를 따릅니다.

2010년 4월 12일 Perl 5.12.0이 출시되었습니다.주목할 만한 핵심 향상 기능은 다음과 같습니다.package NAME VERSION구문, yada yada 연산자(아직 구현되지 않은 자리 표시자 코드), 암묵적 제한, 전체 Y2038 컴플라이언스, regex 변환 오버로드, Dtrace 지원, 유니코드 5.2.[59]

2011년 5월 14일, 펄 5.14는 JSON 지원 [60]기능이 내장되어 출시되었습니다.

2012년 5월 20일 Perl 5.16이 출시되었습니다.주목할 만한 새로운 기능으로는 에뮬레이션하려는 특정 버전의 Perl을 지정할 수 있는 기능이 있으며, 이를 통해 사용자는 Perl 버전을 업그레이드할 수 있지만 [61][failed verification]일반적으로 호환되지 않는 오래된 스크립트를 실행할 수 있습니다.또한 Perl 5.16은 유니코드 6.[61]1을 지원하도록 코어를 업데이트합니다.

2013년 5월 18일 펄 5.18이 출시되었습니다.주목할 만한 새로운 기능으로는 새로운 dtrace hook, 어휘 서브, 더 많은 CORE:: 서브, 보안을 위한 해시 오버홀, 유니코드 6.[62]2 지원이 있습니다.

2014년 5월 27일 펄 5.20이 출시되었습니다.주목할 만한 새로운 기능으로는 서브루틴 시그니처, 해시 슬라이스/새로운 슬라이스 구문, 포스트픽스 참조 해제(실험), 유니코드 6.3, rand()가 있으며, 이는 일관된 난수 [63]생성기를 사용합니다.

일부 관측자들은 펄 5.10의 출시가 모던 펄 [64]운동의 시작과 함께 시작된 것으로 보고 있습니다.특히 이 문구는 CPAN의 사용을 수용하고 언어의 최근 발전을 활용하며 고품질 코드를 만드는 [65]데 엄격한 개발 스타일을 설명합니다.책 "모던 펄"[66]이 이 아이디어의 가장 눈에 띄는 표준 지지자일 수도 있지만, 계몽주의 펄 단체와[67] 같은 다른 단체들이 그 원인을 차지했습니다.

2012년 말과 2013년에 Perl 5의 대체 구현을 위한 여러 프로젝트가 시작되었습니다.Rakudo Perl [68]팀이 Perl6에서 Perl5를, Stevan Little과 [69]Friends가 moe를, Reini Urban 아래 Perl11 팀이 p2[70], Gperl by Goccy,[71] 그리고 Will Braswell이 주도하고 Perl11 [72]프로젝트와 제휴한 Kickstarter 프로젝트인 rperl.

펄 6 앤드 라쿠

Perl[73] 6 프로젝트의 로고인 Camelia

2000년컨퍼런스에서 존 오완트는 주요한 새로운 언어 [74]이니셔티브에 대한 사례를 제시했습니다.이로 인해 펄 6이라고 불리는 언어의 재설계 작업을 시작하기로 결정했습니다. 새로운 언어 기능에 대한 제안은 전반적으로 펄 커뮤니티에서 요청되었으며, 이 커뮤니티는 300개 이상의 [75]RFC를 제출했습니다.

Wall은 이후 몇 년 동안 RFC를 소화하고 Perl 6의 일관성 있는 프레임워크로 통합했습니다.그는 펄 6에 대한 자신의 디자인을 프로그래밍 펄의 장에 대응하기 위해 번호를 매긴 아포칼립스(apocalypses)라고 불리는 일련의 문서에서 발표했습니다.2011년 1월 현재 펄 6의 개발 사양은 시놉시스(Synopses)라는 디자인 문서에 캡슐화되어 있으며 아포칼립스에 [76]대응하도록 번호가 매겨져 있습니다.

Wall이 감독하는 Bradley M. Kunh의 논문 연구는 [77]Perl의 런타임으로 Java 가상 머신의 사용 가능성을 고려했습니다.쿤의 논문은 이러한 접근법이 문제가 있음을 보여주었습니다.2001년 펄 6은 패럿이라고 불리는 교차 언어 가상 머신에서 실행하기로 결정되었습니다.이는 패럿을 대상으로 하는 다른 언어들이 CPAN에 대한 네이티브 액세스를 얻어 어느 정도 수준의 언어 [citation needed]간 개발을 허용할 것임을 의미합니다.

2005년, 오드리 탕은 펄 6을 해스켈로 구현퍼그스 프로젝트를 만들었습니다.이는 Perl 6 언어의 테스트 플랫폼(실제 구현의 개발과는 별개) 역할을 했으며, 언어 설계자가 탐색할 수 있도록 했습니다.퍼그스 프로젝트는 Libera Chat #raku IRC 채널을 중심으로 활발한 Perl/Haskell 교차 언어 커뮤니티를 형성했습니다.Perl 6 설계 [78]팀은 많은 기능적 프로그래밍 영향을 흡수했습니다.

2012년 펄 6 개발은 주로 두 [79]개의 컴파일러를 중심으로 이루어졌습니다.

  1. Rakudo, Parot 가상 머신과 Java 가상 [80]머신에서 실행되는 구현입니다.
  2. 공통 언어 런타임을 대상으로 하는 Niecza.

2013년, 라쿠도를 위해 주로 설계된 C 언어 기반 가상 머신 MoarVM("메타모델 온 어 런타임")이 [81]발표되었습니다.

2019년 10월, 펄 6은 라쿠([82]Raku)로 이름이 변경되었습니다.

2017년 현재 라쿠도 구현과 MoarVM만 개발 중이며 자바 버추얼 머신과 자바스크립트와 같은 다른 가상 머신이 [83]지원됩니다.

펄 7

2020년 6월, 펄 7은 펄 [84]5의 후속작으로 발표되었습니다.펄 7은 초기에 펄 5.32를 기반으로 2021년 상반기에 출시될 예정이었고 후보를 더 [85]빨리 출시할 예정이었습니다.

이 계획은 2021년 5월에 수정되었으며, Perl 5의 출시 기간이나 버전은 [86]지정되지 않았습니다.펄 7이 출시되면 펄 5는 장기 유지보수에 들어갑니다.그러나 지원되는 Perl 5 버전은 계속해서 중요한 보안 [87]및 버그 수정을 받게 됩니다.

펄 7은 2020년 6월 24일 펄 컨퍼런스 인 더 클라우드에서 펄 [85][84]5의 후속작으로 발표되었다. 5.32를 기반으로, 펄 7은 현대의 펄 5 코드와 하위 호환되도록 계획되었습니다.use compat::perl5;호환성은 유지하지만 현대 코드는 보일러 플레이트의 일부를 떨어뜨릴 수 있습니다.

그러나 펄 7로 이동하려는 계획은 더 많은 논의를 불러 일으켰고, 펄 운영 위원회는 펄 7에서 기본값이 되는 프라그마스와 모듈에 대한 하위 호환성 문제를 피하기 위해 이를 취소했습니다.펄 7은 개발자들이 주요 릴리스 업그레이드를 [88]보증할 수 있는 충분한 기능을 추가할 때만 나올 것입니다.

설계.

철학

Wall에 따르면 Perl은 두 가지 슬로건을 가지고 있습니다.첫 번째는 TMTOWTDI(Tim Toady로 발음)로 알려진 "그것을 할 수 있는 하나 이상의 방법이 있다"입니다.이 모토를 지지하는 사람들이 주장하듯이, 이 철학은 간결한 [89][90][91]진술을 쉽게 쓸 수 있게 만듭니다.

두 번째 슬로건은 '쉬운 것은 쉽고 어려운 것은 [16]가능해야 한다' 입니다.

Perl의 설계는 컴퓨터 산업의 세 가지 광범위한 추세, 즉 하드웨어 비용 하락, 인건비 상승, 컴파일러 기술의 개선에 대한 대응으로 이해될 수 있습니다.포트란이나 C 같은 초기 컴퓨터 언어들은 값비싼 컴퓨터 하드웨어를 효율적으로 사용하는 것을 목표로 삼았습니다.대조적으로 펄은 컴퓨터 프로그래머들이 프로그램을 더 빠르고 [92]쉽게 작성할 수 있도록 설계되었습니다.

Perl은 CPU 및 메모리 요구사항이 증가하는 대신 프로그래머의 작업을 용이하게 해주는 많은 기능을 가지고 있습니다.여기에는 자동 메모리 관리, 동적 타이핑, 문자열, 목록 및 해시, 정규 표현식, 인트로스펙션, 및eval()기능.펄은 제로 원 인피니티 [citation needed]규칙과 유사한 개념인 "빌트인 [29]제한 없음" 이론을 따릅니다.

Wall은 언어학자로서 훈련을 받았고 Perl의 디자인은 언어학적 원리에 의해 매우 잘 알려져 있습니다.예를 들어 Huffman 코딩(일반적인 구성은 짧아야 함), 우수한 최종 가중치(중요한 정보가 우선), 많은 언어 프리미티브 모음 등이 있습니다.Perl은 Perl [93]인터프리터를 복잡하게 만드는 부분에서도 인간이 쓰기에 간결하고 자연스러운 언어 구성을 선호합니다.

펄의 구문은 "다른 것들은 [94]다르게 보여야 한다"는 생각을 반영합니다.예를 들어 스칼라, 배열 및 해시에는 서로 다른 선두 시그일이 있습니다.배열 인덱스와 해시 키는 다른 종류의 가새를 사용합니다.문자열과 정규식에는 서로 다른 표준 구분 기호가 있습니다. 접근법은 단순하고 보편적인 기호 표현으로 구성된 동일한 기본 구문이 모든 목적에 [citation needed]사용되는 Lisp와 같은 언어와 대조될 수 있습니다.

펄 언어와 이를 둘러싼 커뮤니티 및 문화 모두에 광범위한 실용적인 경향이 있습니다.프로그래밍 펄의 서문은 다음과 같이 시작합니다. [16]"펄은 당신의 일을 완수하기 위한 언어입니다."이것의 한 가지 결과는 Perl이 깔끔한 언어가 아니라는 것입니다.많은 기능을 포함하고 규칙에 대한 예외를 허용하며 구문적 모호성을 해결하기 위해 휴리스틱을 사용합니다.컴파일러의 관대한 성격 때문에 버그는 때때로 찾기 어려울 수 있습니다.펄의 함수 문서는 목록과 스칼라 컨텍스트에 내장된 함수의 변형 동작에 대해 "일반적으로 [95]일관성을 원하지 않는 한 원하는 대로 합니다."라고 말합니다.

특징들

펄의 전체적인 구조는 대체로 C에서 유래합니다.Perl은 변수, , 할당 문, 브레이스 제한 블록, 제어 구조서브루틴[96]포함하는 절차적입니다.

펄은 셸 프로그래밍 기능도 가지고 있습니다.모든 변수는 선행 시그일로 표시되어 변수를 문자열직접 보간할 수 있습니다.그러나 셸과 달리 Perl은 변수에 대한 모든 액세스에 sigil을 사용하며, sigil을 사용하는 대부분의 다른 프로그래밍 언어와는 달리 sigil은 변수의 유형이 아니라 표현식의 유형을 나타냅니다.예를 들어, 배열은 기호 "@"로 표시됩니다(예를 들어@arrayname, 배열의 개별 멤버는 스칼라 시그일 "$"로 표시됩니다(예:$arrayname[3]펄에는 정렬, 운영 체제 [citation needed]기능 호출같은 셸 프로그래밍에 자주 사용되는 도구를 제공하는 많은 내장 기능도 있습니다.

펄은 AWK에서 해시("연관 배열")를 가져오고 sed에서 정규 표현식을 가져옵니다.이를 통해 많은 구문 분석, 텍스트 처리 및 데이터 관리 작업이 간소화됩니다.Lisp와 공유란 블록의 마지막 값을 암시적으로 반환하는 것이며, 모든 문은 더 큰 식 [citation needed]자체에서 사용할 수 있는 표현이기도 합니다.

Perl 5는 복잡한 데이터 구조, 1등급 함수(, 값으로 폐쇄), 객체 지향 프로그래밍 모델을 지원하는 기능을 추가했습니다.여기에는 컴파일러 지시어와 함께 참조, 패키지, 클래스 기반 메서드 디스패치 및 어휘 범위 변수가 포함됩니다(예:strict 프래그마).Perl 5에 도입된 주요 추가 기능은 코드를 재사용 가능한 모듈로 패키징할 수 있는 기능이었습니다.월은 나중에 "펄 5의 모듈 시스템의 전체 의도는 펄 [97]코어보다는 펄 컬처의 성장을 장려하는 것이었습니다."라고 말했습니다.

펄의 모든 버전은 자동 데이터 타이핑과 자동 메모리 관리를 수행합니다.인터프리터는 프로그램에 포함된 모든 데이터 개체의 유형과 스토리지 요구 사항을 알고 있으며, 참조 계산을 사용하여 필요에 따라 해당 개체에 대한 스토리지를 할당하고 자유화합니다(따라서 수동 개입 없이는 순환 데이터 구조를 할당 해제할 수 없음).합법적 유형 변환(예: 숫자에서 문자열로의 변환)은 런타임에 자동으로 수행되므로 불법 유형 변환은 치명적인 [citation needed]오류입니다.

구문

펄은 비평가들에 의해 "라인 노이즈"와 쓰기 전용 언어로 언급되었습니다.가장 초기의 언급은 Randal L이 쓴 Perl 4 튜토리얼 책인 Learning Perl의 첫 번째 판에서였습니다. 슈워츠[98]첫 장에서 "네, 펄은 시작하지 않은 사람에게는 라인 노이즈처럼 보일 때가 있지만 노련한 [99]펄 프로그래머에게는 인생의 사명을 가진 체크섬 라인 노이즈처럼 보입니다."라고 말합니다.그는 또한 Perl이 쓰기 전용 언어라는 비난을 "적절한 주의"[99]로 코딩함으로써 피할 수 있다고 말했습니다.Perl 개요 문서 perlintro는 내장된 "마법" 스칼라 변수의 이름이 "구두 또는 [100]선 잡음처럼 보인다"고 명시합니다.그러나 영어 모듈은 길고 짧은 영어 대안을 제공합니다.perlstyle 문서는 정규 표현식에서 선 잡음이 사용하여 완화될 수 있다고 진술합니다./x공백을 [101]추가할 수식어.

Perl 6 FAQ에 따르면 Perl 6은 Perl 5 비평가로부터 "대부분의 구두점 변수"[102]를 제거하고 정규 구문을 검사하는 것을 포함하여 "줄 잡음" 주장을 이끌어내는 "일반적인 의심"을 완화하도록 설계되었습니다.펄 6 FAQ는 또한 동명사전치사영어[102]한 부분인 것처럼 펄의 줄 잡음이라고도 언급합니다.2012년 12월 블로그에 올린 글에서 크로매틱은 펄 6의 디자인이 "잘 정의된 문법"과 더불어 "개선된 타입 시스템, 지능적 메타 모델, 메타 연산자를 가진 통합 객체 시스템,"그리고 만연한 [103]게으름과 같은 친절함을 제공하는 보다 명확한 맥락 체계를 제공합니다.그는 또한 "펄6는 펄5에 [103]부족한 일관성과 일관성을 가지고 있다"고 말했습니다.

펄의 이전 버전에서는 헬로 월드 프로그램을 다음과 같이 쓸 수 있습니다.

활자로 찍어내다 "안녕, 세상이여!"; 

여기에 주어진 시작 값에서 초 단위를 카운트 다운하는 더 복잡한 Perl 프로그램이 있습니다.

#!/usr/bin/bin/bin 사용하다 엄격한.; 사용하다 경고.;  나의 ( $560, 총액 $ );  $560 = 총액 $ = 교대의(@ARGV);  STDOUT->자동 플러시(1);  하는 동안에 ( $560 ) {     활자로 찍어내다 ( "남은 %s/%s \r", $560--, 총액 $ );     수면. 1; }  활자로 찍어내다 "\n"; 

Perl 인터프리터는 명령줄의 일회성 스크립트에도 사용할 수 있습니다.(Bash와 같은 sh 호환 셸에서 호출된) 다음 예제는 현재 디렉터리에서 .txt로 끝나는 모든 파일의 문자열 "Bob"을 "Robert"로 변환합니다.

$perl -i.bak -lp -e's/Bob/Robert/g' *.txt

실행

Perl 5를 통한 Perl 버전에 대해 Perl 언어에 대한 작성된 사양이나 표준이 없으며 현재 Perl 버전에 대해 작성할 계획도 없습니다.통역사를 구현한 것은 단 한 번뿐이며, 그와 함께 언어도 진화해왔습니다.그 통역사는 기능 테스트와 함께 언어의 사실상의 명세로 자리잡고 있습니다.그러나 Perl 6은 [104]사양으로 시작되었으며,[citation needed] 몇몇[105] 프로젝트는 사양의 일부 또는 전부를 구현하는 것을 목표로 합니다.

Perl은 C로 작성된 코어 인터프리터와 Perl 및 C로 작성된 많은 모듈 모음으로 구현됩니다.2010년 현재 인터프리터는 150,000 라인의 C 코드이며 일반적인 머신 아키텍처에서 1MB 실행 파일로 컴파일됩니다.또는 인터프리터를 링크 라이브러리로 컴파일하여 다른 프로그램에 내장할 수도 있습니다.배포판에는 거의 500개의 모듈이 있으며, 200,000 줄의 Perl과 350,000 줄의 C 코드로 구성되어 있습니다(모듈에 있는 C 코드의 대부분은 문자 인코딩 [citation needed]테이블로 구성되어 있습니다).

인터프리터는 객체 지향 아키텍처를 가지고 있습니다.Perl 언어의 모든 요소(스케일러, 배열, 해시, 코드레프, 파일 핸들)는 C 구조로 인터프리터에 표현됩니다.이러한 구조의 연산은 매크로, typeef 및 함수의 대규모 집합으로 정의되며, 이들은 Perl C API를 구성합니다.Perl API는 시작되지 않은 사용자에게 당황스러울 수 있지만, 시작 지점은 일관된 이름 지정 체계를 따르므로 [citation needed]사용자에게 지침을 제공합니다.

Perl 인터프리터의 수명은 컴파일 단계와 실행 [106]단계로 크게 나뉩니다.Perl에서 단계는 인터프리터의 라이프 사이클에서 주요한 단계입니다.각 인터프리터는 각 단계를 한 번만 거치며, 단계는 고정된 [citation needed]순서로 따릅니다.

펄의 컴파일 단계에서 일어나는 대부분의 일은 컴파일이며 펄의 실행 단계에서 일어나는 대부분의 일은 실행이지만 중요한 예외가 있습니다.펄은 컴파일 단계에서 펄 코드를 실행하는 기능을 중요하게 활용합니다.또한 Perl은 실행 단계로의 컴파일을 지연시킵니다.어떤 순간에 실제로 발생하는 처리의 종류를 나타내는 용어는 컴파일 시간과 실행 시간입니다.Perl은 컴파일 단계 동안 대부분의 시점에서 컴파일 시간에 있지만, 실행 단계에서 컴파일 시간이 입력될 수도 있습니다.문자열 인수의 코드 컴파일 시간이 에 전달되었습니다.eval실행 단계 중에 내장된 기능이 발생합니다.Perl은 컴파일 단계에서 실행 시간에 있는 경우가 많으며 실행 단계의 대부분을 실행 시간에 사용합니다.코드인BEGINblocks는 실행 시간에는 실행되지만 컴파일 단계에서는 실행됩니다.

컴파일 시, 인터프리터는 Perl 코드를 구문 트리에 파싱합니다.실행 시간에는 트리를 걸으며 프로그램을 실행합니다.텍스트는 한 번만 파싱되며 구문 트리는 실행되기 전에 최적화가 적용되므로 실행이 상대적으로 효율적입니다.구문 트리의 컴파일 시간 최적화에는 일정한 폴딩 및 컨텍스트 전파가 포함되지만, 피프홀 최적화도 [107]수행됩니다.

펄은 컴파일 단계에서 [108]실행되는 런타임 코드에 따라 구문 분석이 영향을 받을 수 있기 때문에 튜링 완성 문법을 가지고 있습니다.따라서 Perl은 직선적Lex/Yaccluser/parser 조합으로 구문 분석할 수 없습니다.대신 인터프리터는 언어의 [citation needed]모호성을 해결하기 위해 수정된 GNU 바이손 파서와 조정하는 자체 렉서를 구현합니다.

펄 인터프리터()perl만이 펄 언어(Perl)를 파싱할 수 있음을 의미하는 "오직 펄만이 [109]펄을 파싱할 수 있다"고 종종 말하지만, 일반적으로 이마저도 사실이 아닙니다.Perl 인터프리터는 컴파일 단계에서 튜링 머신을 시뮬레이션할 수 있기 때문에 모든 경우에 파싱을 완료하기 위해 중단 문제를 결정해야 합니다.중단 문제는 결정할 수 없다는 것은 오래된 결과이며, 따라서 Perl조차도 항상 Perl을 구문 분석할 수 있는 것은 아닙니다.Perl은 자체 컴파일 단계에서 사용자에게 전체 프로그래밍 능력에 대한 접근을 제공하는 이례적인 선택을 합니다.이론적 순도 측면에서 비용은 높지만 실제적인 불편함은 드문 [110]것 같습니다.

소스 코드 분석기자동 입력기와 같이 Perl을 파싱하는 다른 프로그램은 모호한 구문 구조뿐만 아니라 일반적인 경우 Perl 파싱의 결정 불가능성과 싸워야 합니다.애덤 케네디의 PPI 프로젝트는 펄을 실행 코드로 파싱하는 대신 펄 코드를 문서로 파싱하는 데 초점을 맞췄습니다."펄을 파싱하는 것이 '홀팅 문제'[111]를 겪고 있다"고 처음 추측한 사람은 케네디였는데, 나중에 [112]증명되었습니다.

Perl은 코어 Perl 언어에 대한 250,000개 이상의 기능 테스트와 코어 모듈에 대한 250,000개 이상의 기능 테스트로 배포됩니다.이들은 정상적인 빌드 프로세스의 일부로 실행되며 인터프리터와 인터프리터의 핵심 모듈을 광범위하게 연습합니다.Perl 개발자는 인터프리터의 변경으로 소프트웨어 버그가 발생하지 않도록 기능 테스트에 의존합니다. 또한 인터프리터가 자신의 시스템에서 기능 테스트를 통과하는 것을 확인한 Perl 사용자는 인터프리터가 제대로 [citation needed]작동하고 있다는 높은 자신감을 가질 수 있습니다.

포트

Perl은 Artistic License 1.0[5][6] GNU General Public [7]License에 따라 이중 라이선스가 부여됩니다.배포판은 대부분의 운영 체제에서 사용할 수 있습니다.특히 유닉스 및 유닉스 계열 시스템에서 널리 사용되지만 대부분의 최신 플랫폼과 오래된 플랫폼으로 포팅되었습니다.보고된 6개의[citation needed] 예외를 제외하고, Perl은 모든 POSIX 호환 또는 Unix 호환 [113]플랫폼의 소스 코드에서 컴파일할 수 있습니다.

MacPerl이라는 특수 포트는 기존 Mac OS 환경에 필요한 특이한 변경 사항 때문에 [114]독립적으로 제공되었습니다.

Comprehensive Perl Archive Network는 [115]각각에서 사용 가능한 배포판에 대한 링크와 함께 지원되는 플랫폼의 전체 목록을 제공합니다.CPAN은 핵심 Perl [citation needed]배포판에 속하지 않는 공개적으로 사용 가능한 Perl 모듈의 소스이기도 합니다.

ActivePerl은 핵심 Perl 릴리스[116]추적하는 정기 릴리스가 있는 ActiveState의 폐쇄형 소스 배포판입니다.이 배포판에는 일반 Perl 모듈의 설치, 제거, 업그레이드 및 관리를 위해 널리 사용되는 PPM([117]Perl Package Manager)이 포함되어 있었지만, 이 도구는 ActivePerl 5.[118]28을 기점으로 중단되었습니다.펄 언어를 구현하는 WSH(Windows Script Host) 엔진PerlScript도 포함되어 있습니다.Visual Perl은 Perl을 Visual Studio에 추가하는 ActiveState 도구입니다.NET 개발 제품군.VBScript-to-Perl 변환기, 윈도우용 Perl 컴파일러, awksed-to-Perl 변환기도 이 회사에서 제작하였으며, 2002년 이후 [119]유닉스/리눅스/포식스 버전을 제외한 모든 배포판과 코모도 IDE를 포함하는 윈도우용 ActiveState CD에 포함되어 있습니다.

성능

컴퓨터 언어 벤치마크 게임은 전형적인 프로그래밍 문제의 구현 성능을 여러 프로그래밍 [120]언어로 비교합니다.제출된 Perl 구현은 일반적으로 메모리 사용 스펙트럼의 하이엔드를 향해 수행되며 다양한 속도의 결과를 제공합니다.벤치마크 게임에서 Perl의 성능은 통역된 [121]언어에서 전형적인 것입니다.

펄이 실행될 때마다 소스를 컴파일해야 하기 때문에 컴파일된 언어의 비슷한 프로그램보다 큰 펄 프로그램이 더 느리게 시작됩니다.YAPC에서 한 강연에서::유럽 2005 컨퍼런스와 후속 기사 "A Timely Start"에서 Jean-Louis Leroy는 Perl 인터프리터가 자신의 과대규모 포함 [122]경로 내에서 모듈을 찾는데 상당한 시간을 소비했기 때문에 펄 프로그램이 실행되는 데 예상보다 훨씬 더 오래 걸렸다는 것을 발견했습니다.자바, 파이썬, 루비와 달리 펄은 사전 [123]컴파일을 위한 실험적 지원만 있습니다.따라서 Perl 프로그램은 모든 실행 시 이 오버헤드 위약금을 지불합니다.일반적인 프로그램의 실행 단계는 상각된 시작 시간이 상당하지 않을 정도로 길지만, 매우 짧은 실행 시간을 측정하는 벤치마크는 이러한 [124]오버헤드로 인해 왜곡될 가능성이 있습니다.

이러한 상황을 개선하기 위해 여러 가지 도구들이 도입되었습니다.그러한 첫 번째 도구는 Apache의 mod_perl로, 소형 Perl 프로그램이 빠르게 호출되는 가장 일반적인 이유 중 하나인 CGI 웹 개발을 해결하려고 했습니다.ActivePerl은 마이크로소프트 ISAPI를 통해 비슷한 성능 향상을 [125]제공합니다.

Perl 코드가 컴파일되면 실행 단계 동안 C나 C++와 같은 컴파일된 언어로 작성된 프로그램에는 일반적으로 존재하지 않는 추가 오버헤드가 발생합니다.이러한 오버헤드의 예로는 바이트코드 해석, 참조 카운트 메모리 관리, 동적 유형 검사 [126]등이 있습니다.

가장 중요한 루틴은 C와