Perl에서 해시 키를 따옴표로 묶는 것이 좋습니다.


Answers

따옴표가 없으면 더 좋습니다. 그것은 {} 안에 있으므로 당신이 barewords를 사용하지 않고 있다는 것을 알 수 있습니다. 더 읽기 쉽고 타이핑하기 쉽습니다. 그러나이 모든 것은 물론 프로그래머에 달려 있습니다.

Question

Perl에서 해시를 사용할 때 키를 인용하는 것이 좋은 생각입니까?

필자는 매우 큰 레거시 Perl 코드 기반을 연구하고 Damian Conway가 Perl Best Practices 에서 제안한 많은 우수 사례를 채택하려고합니다. 필자는 모범 사례가 항상 프로그래머들에게 까다로운 주제라는 것을 알고 있지만, 불꽃 전쟁을 시작하지 않고도 좋은 사례를 얻을 수 있기를 바랍니다. 또한 이것은 많은 사람들이 사소한 문제로 인해 논쟁하지 않겠지 만이 코드 기반을 통해 작업하면서 지침에 대한 탄탄한 목록을 얻으려고합니다.

Damian ConwayPerl Best Practices 에는 정렬을 통해 코드 섹션의 가독성이 어떻게 향상되는지 보여주는 예제가 있지만 해시 키를 인용하는 것에 대해서는 (찾을 수있는 모든 책에서) 언급하지 않습니다.

$ident{ name   } = standardize_name($name);
$ident{ age    } = time - $birth_date;
$ident{ status } = 'active';

당신이 벌거 벗은 단어를 사용하지 않는다는 것을 강조하기 위해 따옴표로 쓰는 것이 더 낫지 않겠는가?

$ident{ 'name'   } = standardize_name($name);
$ident{ 'age'    } = time - $birth_date;
$ident{ 'status' } = 'active';



따옴표를 사용하면 bareword에서 허용되지 않는 특수 문자를 사용할 수 있으므로 더 좋습니다. 따옴표를 사용하여 모국어의 특수 문자를 해시 키로 사용할 수 있습니다.




Quoteless 해시 키는 래리 월 (Larry Wall)의 구문 수준의주의를 기울여 모범 사례가 아닌 다른 이유가 없는지 확인했습니다. 따옴표를 땀을 내지 마라.

(덧붙여 말하자면, 배열 키의 인용문은 PHP에서 가장 좋은 방법이며, E_WARNING을 제외하고는 그 사용에 실패 할 경우 심각한 결과가 발생할 수 있습니다.




나는 따옴표없이 간다, 다만 타자를 치고 읽고 걱정하는 것이 적기 때문이다. 자동 인용되지 않는 키를 가지고있는 시간은 너무 적어서 모든 추가 작업과 혼란을 피할 가치가 없게됩니다. 아마 내 선택의 해시 키가 제 스타일에 맞게 변경되었을 것입니다. 가장자리 케이스를 완전히 피하십시오.

그것은 기본적으로 사용하는 것과 같은 종류의 일종입니다. 보간하지 않으려는 문자를 사용하는 것보다 문자열 중간에 변수를 넣는 것이 더 일반적입니다. 'Hello, my name is $name' 이라고 쓰여진 "You owe me $1000" .




나는 나 자신에 대해 궁금해했다. 특히 나는 내가 몇 차례 결실을 맺었다는 것을 발견했다.

 use constant CONSTANT => 'something';
 ...
 my %hash = ()
 $hash{CONSTANT}          = 'whoops!';  # Not what I intended
 $hash{word-with-hyphens} = 'whoops!';  # wrong again 

필자가 지금하는 경향이있는 것은 적어도 하나의 리터럴 키가 필요하다면 해쉬 단위로 보편적으로 따옴표를 적용하는 것입니다. 상수와 함께 괄호를 사용하십시오.

 $hash{CONSTANT()} = 'ugly, but what can you do?';



일부 문자열 보간을 원한다면 따옴표없이 가기를 선호합니다. 그리고 큰 따옴표를 사용합니다. 나는 그것을 문자 그대로의 숫자와 비유한다. Perl은 실제로 다음을 수행 할 수 있습니다.

$achoo['1']  = 'kleenex';
$achoo['14'] = 'hankies';

그러나 아무도 그렇게하지 않습니다. 그리고 두 가지 문자를 추가하기 만하면 선명도가 도움이되지 않습니다. 때때로 우리는 슬롯 3을 배열에 넣고 싶을 때가 있습니다. 때로는 %ENV 에서 PATH 항목을 제외하고 싶습니다. 싱글 쿼 테이션은 내가 아는 한 명확성을 추가 하지 않습니다 .

Perl이 코드를 구문 분석하는 방식은 해시 인덱스에서 다른 유형의 "베어 워드"를 사용하는 것을 불가능하게 만듭니다.

시험

$myhash{shift}

그리고 'shift' 키 아래에있는 해시에 저장된 항목 만 얻으려면이 작업을 수행해야합니다.

$myhash{shift()}

첫 번째 인수에서 해시를 인덱싱하도록 지정하려면

또한 jEdit을 사용합니다.이 편집기는 강조 표시 완벽하게 제어 할 수있는 시각적 편집기 (이맥스 외에도 본 적이 있습니다) 만 사용 합니다 . 그래서 나에게 분명하게 두 가지가 있습니다. KEYWORD3 + SYMBOL + KEYWORD1 + SYMBOL (()}을 얻는 닫는 곱슬 앞에 paranthesis가있는 경우 전자와 같은 것으로 보이는 것은 KEYWORD3 ($ myhash) + SYMBOL ({) + LITERAL2 (shift) + SYMBOL (})입니다. 게다가 나는 이것을 다음과 같이 포맷 할 것입니다 :

$myhash{ shift() }