2010-01-18 4 views
15

나는 방금 Can someone tell me how to create an array of directory contents?을보고 있었다. 당연히 파일 글로브가 답변으로 제시되었습니다. 나에게 놀라웠던 점은 게시물이 <*>이 아닌 glob()을 사용하도록 권장되었다는 것입니다.<foo*> 이상의 glob ('foo *')의 비교 이점은 무엇입니까?

내가 오래 전에 배웠던 것이기 때문에 <*>을 사용합니다. 결코 그것에 대해 생각해 보지 않았습니다. 좋은 이유가 아닙니다.

globbing에 대해 어떤 구문을 사용합니까? 그 이유는 무엇입니까?

+3

왜 내가이 커뮤니티 wiki를 만드는지 궁금합니다. 주제에 관한 좋은 질문이며, 주관적이지는 않습니다. 그것을 CW로 표시하면 응답 할 명성을 쌓는 데 관심이있는 사람들에게 인센티브가 제공됩니다. 다른 사람들이 질문 자체를 편집 할 수있는 막대를 낮추고 싶습니까? –

+4

진실을 말하면 나는 그 대리인도 신경 쓰지 않을 것이다. 질문이 주관적이고 여론 조사처럼이기 때문에 나는 그것을 CW로 만들었다. 당신은 무엇을 선호합니까? 하나의 정답을 가진 질문 이라기보다는. 내 이해는 이러한 종류의 질문은 CW이어야한다는 것입니다. 나는 많은 과목에서 무수히 많은 시간을 보냈습니다. – daotoad

+0

하나의 정답입니까? 펄에서는?!? !!? TMTOWTDI! (- : –

답변

12

개인적으로는 <>에 과부하가 걸렸습니다. 이것은 일종의 "반복자에서 읽음"을 의미하지만, 내 취향에 맞는 반복자를 결정하는 데 너무 많은 마법과 예지가 있습니다. 예 : <$foo><$foo{bar}>은 아주 다른 것들을 의미하며, 마법의 벌거숭이 인 <>은 아직 다른 것을 의미합니다.

glob을 사용하고 핸들에 대해 <> 구문을 예약하는 것이 좋습니다. 이렇게하면 <>의 내용이 핸들이 아닌 패턴 (또는 하나를 해결하는 것)인지 여부를 알아내는인지 적 부담을 줄일 수 있습니다. 즉, <> 표기법을 "읽기"대신 "반복자"와 연관 시키려면 목록을 생성하는 대신 결과를 단계적으로 수행하려는 경우에 해당하는 기능 구문을 선호 할 수 있습니다.

10

당신이 연결된 그 perldoc을이 각도 브래킷 구문을 사용하여 몇 가지 문제가 말한다 : 해석이 먼저 이루어집니다 따옴표의

한 수준,하지만 간접 때문에 당신이 <$foo> 말할 수 없다 이전 단락 에서 설명한대로 파일 핸들. (펄 이전 버전에서는 프로그래머는 파일 이름의 글로브로 해석을 강제로 중괄호를 삽입합니다 :. <${foo}> 요즘, 을 아마도 바로 인 glob($foo)으로 직접 내부 함수 를 호출 할 청소기 간주 방법은 처음에 했을 수 있습니다.)

내가 주로 File::Find와 그 동류에게 자신을 사용합니다.

+1

당신의 굵은 글씨는 누가, 어떤 경우에 "더 깨끗한가?"라는 주장 일뿐입니다.다른 글은'<$foo>'이라는 잠재적 인 모호함을 언급하며 실제 코드에서 결코 문제가되지 않는다고합니다. 폼이 모호성이 발생하는 문제 일 뿐이며 glob의 모든 용도에 적용되는지 여부를 나타내는이 노트입니까? – daotoad

+0

File :: Find는 glob가 필요한 모든 것을 제공합니다. 하지만, 그것은 자신의 반복적 인 디렉토리 워킹 코드를 작성하는 것을 능가합니다. 당신은 말합니다. 그리고 그것은 ilk입니다. 당신이 염두에두고있는 다른 특정 모듈은 무엇입니까? – daotoad

+1

@daotoad : "perlop.pod"의 git 히스토리에 따르면 래리 월 (Perl 5.002 베타 1부터 "요즘"은 1995-11-21)으로 "적어도 클리너로 간주됩니다." (그리고 나에 의해, 가치있는 것이 무엇이든지간에.) –

2

요즘 나는 꺾쇠 괄호를 사용하는 것과 비교하여 더 읽기 쉽고 초보자 친화적 인 (*) 것으로 알고 있기 때문에 glob을 사용합니다.

(*) perldoc -f glob이 작동합니다.

관련 문제