2009-08-18 3 views
4

먼저 Perl 특수 변수에 대한 포괄적 인 목록이 있습니까?Perl 특수 변수에 대한 우수 사례는 무엇입니까?

둘째, 사용하기가 훨씬 쉬운 작업이 있습니까? 나는 항상 파일을 한번에 읽으려고 $/을 설정 해제하고, 버퍼를 자동으로 플러시하기 위해 $|을 설정하지 만, 다른 것들은 확실하지 않습니다.

세 번째로, Perl 특수 변수를 사용해야하거나 더 명확하게 코딩해야합니다. 개인적으로 저는 코드가 작동하는 방식을 조작하기 위해 특수 변수를 사용하는 팬입니다.하지만 다른 사람들이 그저 혼란스러운 것이라고 주장하는 것을 들었습니다.

답변

5

1) 지금까지 어떤 것들로 내가 자주 사용 :

  • $를! 그 코더 괜찮은 오류 코드에 대한 충분한 배려하지 않았다 이외의 처리 (데이터베이스 것과 같은) 잘못된 설계 라이브러리를 호출 할 때 평가 오류 처리에 대한

  • $ @를 처리 IO 오류의 전형이다

  • "다이"

    $ _ map/grep 블록의 경우, 100 % 포스터가 일반 코드에 사용하는 것이 좋은 습관이 아니지만 동의합니다.

  • $ | 지금까지 영어 이름 대 구두점을 사용하는 등 세척 버퍼

2), 나는 같은 반박이 사람이 영어 이름을 사용하여 얻을 수있는 이점이 없다는 것을 주장에 간다하더라도 위의 마크 볼린저의 답변에 선택할 수 있습니다.

"당신이 펄을 사용하는 경우, 당신은 분명 초보 가독성을 위해 그것을 선택하지 않는"

마크, 나는 그것이 항상 참 (또는 오히려 거의 절대)하지 않습니다 찾을 수 있습니다. 그리고 다시 Perl 경험의 99 %가 대기업 용 Perl 코드를 작성하고 있으며 그 중 90 %는 10 줄짜리 해킹 스크립트 대신 완전한 응용 프로그램이므로 다른 분석에서는 내 분석이 적용되지 않을 수 있습니다. 마크의 같은 생각이 잘못된 이유는 다음과 같습니다

  • 내가 펄이 아닌 초보예요해서 (약간 넣어), 일부 멍청한 놈 애널리스트 년 전에 고용 - 또는 아웃소싱 "천재"-입니다 아마. 이미있는 것보다 더 혼동하고 싶지 않을 수도 있습니다. "코드를 작성하기가 어렵다면, 읽기가 어려워야합니다"라는 말은 전문 개발자의 태도에 대해 어떤 언어로든 정확히 올라 있지 않습니다. 반 잠과 생산 문제를 해결 I 새벽 2시까지 해요

  • , 정말 $ 구별 나의 이미 거의 맹검 눈의 능력에 의존하지 않으려는 ! 및 $ |.특히 이전에 언급 한 "천재성"에 의해 작성된 코드에서 어느 것이 사용되는지 알지 못했을 수도 있습니다. 내가 기침했던 사람에 의해 미완성 왼쪽 코드를 읽고있을 때

  • 내가 오히려 가독성보다 터져 로직의 복잡성에 집중하는 것, 년 전에 회사에서 기침을 "구조 조정" 구두점.

19

이들은 모두 perlvar에 설명되어 있습니다.

긴 이름은 use English qw(-no_match_vars); 인 경우에만 사용할 수 있습니다.

+0

+1 때로는 혼란 스러울 수도 있지만, 나는 대답에서 3 초 이상을 벗어나지 않습니다. –

4

가장 많이 사용하는 세 가지는 $_, @_$!입니다.

예 1.1 :

foreach (@items) 
{ 
    print $_; 
} 

예 1.2 파라미터를 검색 (은 Motti 지적한 바와 같이, 이러한 사실 @_ 임) 또는 치환을 수행 어레이를 통해 반복 할 때

$_를 사용하려면 :

my $prm1 = shift; # implicit use of @_ or @ARGV depending on context 

예 1.3 :

s/" "/""/ig; # implicit use of $_ 

나는 다음과 같은 경우에 $!를 사용

예 2.1 :

open(FILE, ">>myfile") || die "Error: $!"; 

을 내가 동의하지만, 그것은 코드를 더 혼란 사람에게 펄에 익숙하지 있습니다. 그러나 다른 사람들을 혼란스럽게하는 것은 언어를 아는 기쁨 중 하나입니다! :)

+2

필자는 개인적으로 $ _를 사용하는 것을 싫어하며 가능하면 언제든지 그것을 피하는 것을 선호합니다 (예 : foreach my $ item (@items)). 그러나 $! 확실히 유용합니다. – Powerlord

+2

저는'$ _ '을 아주 좋아합니다. 항상 사용하고 있습니다. – Justin

+6

어휘 파일 핸들을 사용하여 open이라는 세 가지 인자 형식을 확인하십시오 :'my $ file_handle, '>>', myfile '을 열거 나 [myfile]을 여는 중 불타는 죽음 : $ !,' – Telemachus

2

내가 사용하는 전형적인 것들은 $_, @_, @ARGV, $!, $/입니다. 내가 많이 논평 한 다른 것들.

브래드 노트는 [email protected]도 매우 일반적인 변수입니다. (오류 값은 eval()입니다.)

+0

나는 목록에'$ @ '를 추가 할 것이다. –

7

구두점 변수의 변경 사항은 항상 local이어야합니다. 구두점 변수 중 일부는 유용하며 다른 변수는 사용하지 않아야합니다. 예를 들어 $[은 절대 사용하지 않아야합니다 (배열의 기본 인덱스가 변경되므로 local $[ = 1;은 목록 또는 배열의 첫 번째 항목을 1이 참조하도록합니다). $"과 같은 기타 요소는 iffy입니다. 수동으로 조인하지 않아도되는 유용성의 균형을 맞추어야합니다. 예를 들어, 이들 중 어느 것이 더 이해하기 쉽습니까?

local $" = " :: ";    #" 
my $s = "@a/@b/@c\n"; 

my $sep = " :: "; 
my $s = join("/", join($sep, @a), join($sep, @a), join($sep, @a)) . "\n"; 

또는

my $s = join("/", map { join " :: ", @$_ }, \(@a, @b, @c)) . "\n"; 
0

대 내가 그들을 사용한다고 말할 - 펄을 사용하는 경우, 당신은 분명히 초보 가독성을 위해 그것을 선택하지 않을. 캐주얼하지 않은 개발자라면 브라우저/참조 창이 열려있을 것이고 하나의 창에서 perlvar 맨 페이지를 탐색하는 것이 전역 변수 또는 외부 변수의 정의를 찾는 것보다 어렵지는 않을 것입니다.

/^(?<myName>.*)$/; 
# and later 
my $capture = %+{'myName'}; 

그리고 parlvar/perlre에 가서 조금 읽기보다 더 열심히하지 않은 무슨 일이 있었는지 알아내는 : 예를 들어, 나는 최근에 새로운-에서-5.10.x라는 이름의 캡처 버퍼가 발생 .

나는 문서화되지 않은 코드에서 엉뚱한 알고리즘을 많이 사용하는 것보다 문서화되지 않은 코드에서 엉뚱한 특수한 행을 많이 찾으려고합니다.

관련 문제