2007. 11. 18. 16:35

3번째 펄마니아 스터디 모임

이번주 스터디도 연대에서 있었습니다. 아침부터 지갑을 잃어버리는 등의 악재가 겹쳐서 4시에 딱 맞춰 가는 바람에 범규가 혼자 고생이 많았네요.
예상대로(?) 뜨거운 스터디 시간이었습니다. 4시 30분경에 시작해서 9시 30분까지 5분쉬고 다섯 시간을... 술자리를 위해서 말리고 싶은 마음도 있었지만 발표하시는 분들의 열기에 말도 꺼낼 수가 없었습니다.(사실은 저의 소심함이 가장 큰 원인이었죠.)
지난 시간부터 문제가 되었던 grep,map 문제는 제가 정확히 모르고 떠벌이다가 창피를 당하기도 했습니다.
그러나 기대하시라.. 해결했습니다. 관련 포스트를 따로 올리기로 하지요. 포인트는  grep의 반환값은 스칼라이고 map의 반환값은 리스트라는 것입니다.

스터디가 끝나고 지지난 주부터  계획만하던 "스터디 회원 사진찍기"를 마침내 실행에 옮겼습니다.
신비주의를 원하시는 분들이 있을까봐 걱정했었는데 다행히 모두들 찬성하시더군요.
아쉽게도 이번에 참석하지 못하신 혁진님과 성일님(맞나요?)께서는 다음주를 기약하셔야 겠습니다.
사진은 왼쪽 위에 키가 제일 크신 분부터 시계방향으로 박민영님, 황찬님(고기스님), 이성찬님, 김범규님(bkkim), 임도형님, 저 장범수(pung96), 정현기님(simryang), 김대호님, 김도형님(keedi) 입니다.
임도형님은 이번에 처음 참석하셨는데 내공이 남다르시더군요. 특히 사근사근 설명해 주시는것이 전직이 의심스워지네요(선생님?^^).
사용자 삽입 이미지

펄마니아 스터디 사진


아쉽게도 너무 늦게 끝난데다가 다들 급한 일이 있으셔서 뒷풀이는 저, 김도형님, 김대호님, 이성찬님, 황찬님 이렇게 5명이 진행했습니다. 주종목은.. 역시 제가 좋아하는 삼겹살에 소주였습니다. 도형님은 자전거를 타고 오신 관계로 맥주만 드셨습니다. 막판에 결심을 바꾸시고 소주로 바꾸시려고 했는데 제가 술취하면 말이 많아지는 관계로 이런 저런 얘기에 열을 올리느라 신경을 못써드려서 그냥 맥주만 드셨네요.
무사히 보내 드려서 죄송합니다.
다음번에는 꼭 소주를 열심히 권해드리겠습니다.용인까지 자전거 타고 가신다던데..  대단하십니다.
저는 다른 모임이 있어서 2차를 갔다가 너무 취해 버리는 바람에 쓰러지기 일보직전에 가방을 움켜쥐고 인사도 없이 집으로 뛰어갔다가 선배들에게 부지런히 욕먹는 중입니다.
다들 수고하셨습니다.

'PerlMania' 카테고리의 다른 글

map, grep 그리고 //g의 함정  (3) 2007.11.19
펄마니아 스터디 후기  (9) 2007.11.04
2007. 11. 6. 15:02

리스트 비교

리스트를 비교하는 방법에는 "grep -f", "sort, diff", "comm" 등이 대표적이다.
"grep -f" 는 시간이 너무 오래 걸리는 단점이 있지만 diff, comm등은 강력한 도구이다.
하지막 역시 많은 파일과 복잡한 선택기준 앞에서 나의 가장 강력한 도구는 PERL!!

내가 주로 쓰는 커맨드를 소개한다면
perl -nle '/(regex)/ and $h[@ARGV]{$1}=$_;END{map{statement;}keys %{$h[0]}}' file1 file0
주의 할 점은 @ARGV(남은 파일 개수)을 인덱스로 사용하기 때문에 인자로 준 파일순서와 인덱스가 거꾸로라는 것.
위 예제에서 file1이 $h[1], file0 가 $h[0] 에 저장된다.(file1 과 file0의 순서에 주의)
statement를 위해서 여러가지 상상력을 동원할 수 있다.

간단한 예
perl -nle '/(\d{6}-\d{4})/ and $h[@ARGV]{$1}=$_;END{map{ exists $h[1]{$_} and print $h[1]{$_} }keys %{$h[0]}}' file1 file0

file1과 file0에서 123456-1234형태의 패턴(내가 주로 사용하는 런넘버-세그먼트넘버) 을 추출해서 file1과 file0의 공집합의 file1리스트를 출력한다.
비교할 리스트의 성질에 따라 코드는 많이 짧아질 수도 있다.
극단적으로 두 리스트의 똑같은 라인들만 검색하기 위해서는 다음과 같이 할 수도 있다.

perl -e '@s{`cat OLD`}=( ); exists $s{$_} && print for `cat NEW`' fire1 file2
2007. 11. 6. 10:26

터미널의 타이핑 내용을 녹화한다.

가끔 심심할때면 쉘에서 특정 영단어로 시작하는 프로그램들이 어떤것이 있는지 찾아보곤 하는데 얼마전 script 란 주옥같은 명령어를 찾게 되었다. 우왓 내가 모르던 스크립팅 언어인가!!

 script - make typescript of terminal session

말 그대로 작업내용을 녹화해 놓았다가 재생할 수 있다.
  • 녹화
$ script -t 2> timing
        Script started, file is typescript
        $ ls
        Desktop         hax             hog.sh  My Computer             ostg    src
        $ pwd
        /home/jonesy
        $ file hax
        hax: empty
        $ exit
        exit
        Script done, file is typescript

  •  재생
        $ scriptreplay timing
        $ ls
        Desktop         hax             hog.sh  My Computer             ostg    src
        $ pwd
        /home/jonesy
        $ file hax
        hax: empty
        $ exit
        exit


작업하는 모습을 다른 사람에게 실시간으로 보여줄수도 있다.
선생님 :
  $ mkfifo  out 
  $ script -f out

학생 :
 $ cat out

선생님:
 $ 이렇게 이렇게 하는 거예요..
 $ exit

오~~ 멋지다.. 그런데 쓸일은 별로 없을 것 같네..
참고로 screen 으로도 실시간 교육을 할수가 있다는 사실.. 역시 별로 쓸일은 없지만.