Perl 스크립트는 실제로 확장자가 없어야합니까?


12

방금 O'Reilly 's Learning Perl 6 판을 읽기 시작했으며이 발췌문을 접했을 때 놀랐습니다.

#!/usr/bin/perl
print "Hello, world!\n";

텍스트 편집기에 입력했다고 상상해보십시오. (부품의 의미와 작동 방식에 대해 아직 걱정하지 마십시오. 잠시 후에 부품에 대해 알 수 있습니다.) 일반적으로 원하는 이름으로 해당 프로그램을 저장할 수 있습니다. Perl은 특별한 종류의 파일 이름이나 확장자가 필요하지 않으며 확장자를 전혀 사용하지 않는 것이 좋습니다.

확장명이없는 것이 왜 더 낫습니까? 볼링 점수를 계산하는 프로그램을 작성했으며 모든 친구에게 볼링 .plx라고 말했다고 가정 해보십시오. 어느 날 C로 다시 작성하기로 결정했습니다. 여전히 같은 이름으로 호출하여 여전히 Perl로 작성되었다는 것을 의미합니까? 아니면 모두에게 새로운 이름이 있다고 말합니까? (그리고 그것을 bowling.c라고 부르지 마십시오!) 답은 단순히 사용하는 언어라면 어떤 언어로 쓰여 졌는가에 대한 것이 아닙니다. 따라서 처음에는 볼링이라고 불렀을 것입니다.

이것이 내가 본 관점에서 본 유일한 소스이며, 내가 읽은 모든 것은 .pl 확장자를 지원했습니다. 나는 아직 Perl 프로그래머가 아니며, 습관에 오기 전에 커뮤니티의 견해가 무엇인지 알고 싶었습니다.


답변에서 알 수 있듯이 확장은 중요하지 않습니다. 스크립트 (Perl 포함)의 경우 중요한 것은 shebang line 입니다.

1
선생님, 동의하지 않습니다. 파일 확장자가 없으면 IDE 및 프로그래머 편집기는 구문 강조를 어떻게 결정합니까?
GrandmasterB

3
Shebang 라인을 보거나 modelines를 읽고 @GrandmasterB. .pl배포하려는 프로그램 (정보가 잡음이 아니라 신호 임)에 대한 확장명을 사용 하지는 않지만 로컬 스크립트에 유용한 알림입니다. 어쨌든,이 논의는 모듈 ( .pm확장 필요) 또는 테스트 ( .t확장 관례)에 있기 때문에 Perl 코드의 90 % 이상과 관련이 없습니다 .
amon

1
@GrandmasterB Linux에서 개발하고 Vim과 Kate 모두 #!/usr/bin/env perl파일이 충돌하는 확장명 (예 :) 이없는 경우 줄로 시작하는 파일을 Perl 스크립트로 올바르게 식별합니다 .cpp. file프로그램 (주어진 입력하는 MIME 타입을 추론하는 데 사용)를 정확하게 추론 text/x-perl없이 연장.
amon

3
거기 어딘가에 나는 우리가 주목 생각 이 .pl 확장자가 있었다 페이지의 ERL의 리터의 ibraries, 어떻게 든 사람들이 프로그램을 위해 무엇을 사용으로 변신.
brian d foy

답변:


14

이 책의 조언은 적어도 유닉스 계열 시스템에는 완벽하게 유효합니다. 스크립트 실행은 #!파일 이름의 확장자 부분이 아니라 행에 의해 제어됩니다 . Perl 스크립트에 특수 확장자를 사용하면 스크립트를 실행하는 사람에게는 중요하지 않은 정보가 노출됩니다.

Windows는 다른 문제입니다. Windows는이 #!메커니즘을 지원하지 않습니다 . 대신 파일을 여는 데 사용되는 방법은 확장명에 따라 다릅니다. 예를 들어, .pl파일 을 두 번 클릭 하거나 프롬프트에서 파일을 실행 하여 파일을 Perl 인터프리터에 인수로 전달 하도록 Windows 쉘을 구성 할 수 있습니다 . Perl 시스템을 설치하면 자동으로 설정됩니다.

이식성이 뛰어난 Perl 스크립트의 .pl경우 Windows에 필요한 접미사가 UNIX 계열 시스템에 "누설"될 수 있습니다. 스크립트가 설치 될 때 적절한 이름을 선택하는 시스템 별 설치 방법을 사용하는 것이 가장 좋습니다.

에 유닉스 계열 시스템하는 .pl확장은 대부분 무해하고 언어 특정 스크립트에 의해 사용되는지의 신호로 유용하는 경우 (아마 당신은의 모음이 .pl, .py, .sh, 그리고 .rb, 당신이 할 수있는 스크립트를). 그러나 책에 설명 된대로이 접근 방식에는 단점이 있습니다. 다른 언어로 스크립트를 다시 구현하는 경우 이름을 변경하고이를 호출하는 항목을 업데이트해야합니다.

(Perl 모듈.pm 은 Perl이이를 찾을 수 있도록 확장 이 필요 합니다. 예를 들면 다음과 같습니다.

use Foo::Bar;

인터프리터가 배열에 나열된 디렉토리 중 하나에 Bar.pm이름이 지정된 디렉토리에 이름이 지정된 파일을 검색하게합니다 . 그러나 파일은 직접 실행되지 않습니다.)Foo@INC.pm

이것이 내가 본 관점에서 본 유일한 소스이며, 내가 읽은 모든 것이 .pl확장 을 지원했습니다 .

놀랍습니다. 내가 본 대부분의 조언 은 실행 스크립트에 확장 을 사용 하지 말라고 말합니다 .pl.


1

상관 없습니다

#!/usr/bin/perl

코드를 실행하는 데 사용할 프로그램을 시스템에 알려줍니다.

당신이 그것을 변경하면

#!/usr/bin/bash

또는

#!/usr/bin/python

다른 통역사를 사용합니다.

확장명을 갖는 것은 전적으로 선택 사항이며, 사용자가 언어를 알 필요가 없다는 점은 대부분의 경우 100 % 정확합니다.

add 2 35를 실행 하고 다시 얻는 것은 내가 (사용자로) 걱정하는 전부입니다.

스크립트에 확장을 추가하는 유일한 이유는 어떤 이유로 최종 사용자 (때로는 내 자신)가 언어를 알아야하는 경우입니다.

동일한 작업을 수행하는 다른 방법을 보여주는 example.sh 또는 example.pl

그럼에도 불구하고 확장을하지 않는 것이 더 일반적이지만 모든 취향입니다.


1

발췌는 실제로 완벽하게 유효한 조언을합니다.

또한 작은 시스템의 경우 구현에 대한 생각이 바뀌면 여기저기서 몇 개의 파일 및 / 또는 문자열의 이름을 바꾸는 것이 매우 간단합니다.

다른 한편으로, 지연 시스템 을 개발하는 현대의 추세는 확장이없는 주 실행 파일을 갖는 반면, 의존하는 모든 모듈은 여전히 ​​언어 별 확장을 갖습니다.

사실, 파이썬 의도적으로 이것을 요구 하며, 일반적으로 메인 파이썬 스크립트 (이름에 확장자가없는 스크립트)는 전체 앱을 부트 라인하는 몇 줄입니다.


0

모든 책은 유닉스에서 파일 확장자는 관습에 지나지 않는다고 말합니다. 실제로 많은 유형의 파일이이 범주에 속합니다. 루비 파일은 동일한 규칙을 사용하므로 .rb 확장자가 필요하지 않습니다. C 컴파일러에는 유효한 C 코드 만 있으면되므로 원하는 경우 이름을 .watoozy로 지정할 수 있습니다.

기술적 구속은 없지만 최소한의 놀라움원칙 에는 실질적인 제약이 따릅니다 . 기본적으로 .pl 파일에서 루비 코드를 보는 것은 매우 놀라운 일이므로 사람들은 일반적으로 그렇게하지 않습니다.

규칙의 한 가지 예외

일부 서버 응용 프로그램에서 시작 스크립트는 확장명이없는 파일로되어있어 응용 프로그램을 서비스로 쉽게 시작할 수 있습니다. 이 경우 파일은 다른 컴파일 된 명령처럼 보입니다. Perl이 설치되어 있으면 그 방식으로 작동합니다.


C 컴파일러는 일반적으로 확장자에 따라 입력 파일을 다르게 취급합니다. 예를 들어, 취급 GCC .C의 소스 코드는 .cpp, .cc, .CC ++ 소스 코드, .o오브젝트 파일로 링커에 전달 등한다. 명령 행 옵션을 사용하여이를 무시할 수 있지만, 거의 사용하지 않아서 그것이 무엇인지 기억하지 못합니다. .cC 소스 파일 의 확장자는 중요합니다. .pl실행 가능한 Perl 스크립트 의 확장자는 (적어도 UNIX와 유사한 시스템에서는) 아닙니다.
Keith Thompson

1
@KeithThompson : 실제로 SUS 호환 Unix 시스템에서 이러한 파일 확장자는 다음 c99명령 에 대한 사양의 일부이기도합니다 . pubs.opengroup.org/onlinepubs/9699919799/utilities/…
Jörg W Mittag

-4

"O'Reilly 's Learning Perl, 6th Edition"책에서 발췌 한 내용은 쓰레기입니다. C를 perl과 비교하는 것은 동등하지 않습니다. 스타터 C는 확장자가없는 2 진으로 컴파일됩니다.

Perl은 컴파일되지 않으므로 일부 텍스트 편집기는 파일 형식을 식별하기 위해 확장명이 필요합니다.

모범 사례와는 달리 시스템의 어느 곳에서나 확장명을 가진 전체 스크립트 파일 이름을 하드 코딩해서는 안됩니다. 운영 체제에 따라 항상 심볼릭 링크 나 별칭을 사용해야합니다.

나중에 원본 파일을 변경해야하는 경우 새 위치를 가리 키도록 심볼릭 링크 만 변경하면됩니다.


텍스트 편집기에 대한 설명은 유효하지만 emacs와 vim은 특별한 확장없이 Perl 스크립트를 감지 할 수 있습니다. "모범 사례"에 대한 귀하의 주장은 일부 지원에 더 설득력이 있습니다. 확장명없이 항상 (Linux) 시스템에 Perl 스크립트를 설치하는데 문제가 발생하지 않습니다.
Keith Thompson

물론, 스크립트에 해시 뱅 ( #!) 이 있으면 스크립트가 실행됩니다 . Linux에서 작업하는 것이 좋습니다. 다음에 패키지 관리자로 응용 프로그램을 설치할 때 스크립트 작성 방법에주의를 기울이십시오. 파일을 bin디렉토리에 직접 쓰는 대신 bin 디렉토리에 대한 심볼릭 링크 .
Aaron Goshine

아마도 그것은 패키지 관리자에 달려 있습니까? Ubuntu 14.04 시스템에서 /usr/bin심볼릭 링크가 아닌 325 Perl 스크립트가 바로 아래에 설치되어 있습니다 . 그것들은 모두 시스템의 패키지 관리자에 의해 설치되었습니다. 패키지 관리자에는 각 패키지의 모든 파일 위치를 추적하는 자체 데이터베이스가 있습니다. (소스에서 빌드하는 소프트웨어의 경우 심볼릭 링크를 사용합니다.) 그러나 Perl 스크립트에 .pl확장 기능 이 있는지 여부와 어떤 관련이 있는지 잘 모르겠습니다 .
Keith Thompson

나는 여기에서 맨 위로 가고 있다고 생각합니다.
Aaron Goshine

1
그 의견에 더 많은 것이 있어야합니까?
Keith Thompson
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.