STYLE.PERL(7)

명칭
style.perl - FreeBSD Perl 원시 파일의 스타일 가이드

해설
이 파일은 FreeBSD 소스 트리의 perl 스크립트에 바람직한 스타일을 명기해 있습니다.

    #
    # Perl 를 위한 스타일 가이드입니다. 커널의 스타일 가이드에 근거하고 있습니다.
    #
    #
    # 매우 중요한 1 행의 코멘트는 이와 같이 합니다.
    #
    # 대부분의 1 행 코멘트는 이와 같이 합니다.
    # 복수행에 걸치는 코멘트는 이와 같이 합니다. 실제의 문장을 씁니다. 실제의
    # 단락으로 보이도록(듯이) 묻어 갑니다.

모든 스크립트에는 스크립트의 선두에 저작권 블록과 그 스크립트가 무엇을 하는 것인가를 기술한 코멘트 블록을 두어야 한다 입니다.

    #! /usr/bin/perl -w
    # 저작권
    # 블록
    # 이 스크립트는 표준 입력으로부터 낡은 커널 설정 파일을 읽어들여,
    # 표준 출력에 새로운 형식의 힌트 파일을 출력합니다.

모든 스크립트는 strict(3) 모듈을 사용해 경고없이 동작하지 않으면 안됩니다. 예를 들면, 다음과 같이 합니다:

    #! /usr/bin/perl -w
    # 저작권, 스크립트의 내용 기술, 그 외
    use strict;
    ...

가능한 장소에서는 스크립트를 taint (오염) 모드로 해 동작시켜 주세요. 이것은 perlsec(1) 그리고 문서화 되고 있습니다.

    #! /usr/bin/perl -wT

메인 프로그램은 MAIN: 와 label 된 블록에 두어야 합니다. 이것에 의해 큰 perl 스크립트로 개시점을 식별하는 것이 용이하게 되어, 또 메인 프로그램만으로 사용되는 변수에 대해서 스코프를 줍니다.

    MAIN:{
    	print(foo("/usr/bin/man", "7", "style.perl"));
    	exit(0);
    }

모든 써브루틴은 perlsub(1) 그리고 정의되고 있는 것 같은 prototype 인수를 사용해 정의해야 합니다.

    sub foo($@) {
    	my $cmd = shift;
    	my @args = @_;
    }

모든 변수는 사용하기 전에 정의해야 합니다. 이것은 use strict 아래에서 이용하는 경우는 강제당합니다.

로컬 변수의 스코프의 정의에는 local $variable (은)는 아니고 my $variable (을)를 이용해야 합니다. local 선언은 그것이 필요하게 되는 장면에게만 사용해, 디폴트에서는 사용해야 하는 것은 없습니다. 많은 perl4 스크립트에서는, my 정의가 perl5 이전에는 존재하지 않았다고 하는 이유로 local (을)를 사용하고 있습니다.

많은 경우, 글로벌 변수는 코드의 선두에서 vars(3) 정의 블록을 사용해 정의해야 합니다:

    use vars qw($globalscalar @globalarray %globalhash);

경우에 따라서는 스크립트의 선두에서 vars(3) 선언은 아니고 my 문장을 이용하는 것이 적합한 일도 있습니다.

모든 변수에는 코멘트를 적어야 합니다.

    sub foo($@) {
    	my $cmd = shift;	# 실행하는 명령
    	my @args = @_;		# $cmd 에의 인수
    }

로컬 변수는 공행에 의해 함수의 인수와 분리해야 합니다:

    sub foo($@) {
    	my $cmd = shift;	# 실행하는 명령
    	my @args = @_;		# command 에의 인수
    	my $pid;		# 자의 PID
    	local *PIPE;		# 파이프
    	my $output;		# 명령로부터의 출력
    }

가능한 때에는 언제라도, 코드는 코드 checker perl -wc script.pl 또는 perl -wcT script.pl (을)를 통과시켜 주세요. 그 때, 경고가 생성되어서는 안됩니다.

인덴트는 8 캐릭터의 탭입니다. 제 2 레벨의 인덴트는 4 캐릭터의 스페이스입니다.

    while (cnt < 20) {
    	z = a + really + long + statement + that + needs +
    	    two lines + gets + indented + four + spaces +
    	    on + the + second + and + subsequent + lines.
    }

공백 캐릭터를 줄 끝에 추가 해서는 안됩니다. 또, 인덴트를 형성하기 위해서, 스페이스의 앞에는 탭만을 사용해 주세요. 탭이 낳는 이상의 스페이스 및 탭의 전에 스페이스를 사용해 안됩니다.

brace의 개시는 제어행의 마지막에 놓여집니다. else 와 elsif 는 직전의 if 또는 elsif 블록의 종료 brace와 같은 행에 놓여집니다:

    sub foo($@) {
    	my $cmd = shift;            # 실행하는 명령
    	my @args = @_;              # 명령에의 인수
    	my $pid;                    # 자의 PID
    	local *PIPE;                # 파이프
    	my $output;                 # 명령로부터의 출력
    	unless (defined($pid = open(PIPE, "-|"))) {
    		die("open(): $! \n");
    	} elsif ($pid == 0) {
    		exec($cmd, @args);
    		die("exec(): $! \n");
    	}
    	$output = "";
    	while (<PIPE>) {
    		$output . = $_;
    	}
    	waitpid($pid, 0);
    	if ($?  & 0xff) {
    		die("$cmd caught a signal " .  ($?  & 0x7f) .  "\n");
    	} elsif ($? ) {
    		die("$cmd returned exit code " .  ($?  >> 8) .  "\n");
    	}
    	return $output;
    }

가능한 장소에서는, 스크립트는 표준 모듈을 사용해, 코드를 그 자리에 고쳐 써서는 안됩니다. 이것을 촉진하기 위해서, CPAN 모듈을 기본 시스템에 수중에 넣는 것이 적합한 경우가 있을지도 모릅니다.

적절한 곳에서는, chop (은)는 아니고 chomp (을)를 사용해 주세요.

가독성이 더하는 경우에는 if (! ...) (은)는 아니고 unless (을)를 사용해 주세요.

이 가이드에 모순되지 않는 범위에서 perlstyle(1) (을)를 읽어 Larry Wall 의 추천 스타일을 채용해 주세요.

관련 항목
perlsec(1), perlstyle(1), style(9)

역사
이 메뉴얼 페이지는, FreeBSD 의 style(9) 메뉴얼 페이지에 크게 기초를 두고 있습니다.