[완료]비기닝 펄(perl) 을 보면서 드는 생각.....

doodoo의 이미지

doodoo@doodoo:~/bin$ cat burn.sh 
IMG_SIZE=`mkisofs -R -J -quiet -print-size ./ 2>&1 \
| sed -e "s/.* = //"`
echo $IMG_SIZE
[ "$IMG_SIZE" -gt 30 ] && mkisofs -R -J ./ \
|wodim -dao -v speed=24 dev=ATAPI:0,1,0 tsize=${IMG_SIZE}s -data - 

doodoo@doodoo:~/bin$ cat hw742.sh 
#!/bin/sh
cd '/home/doodoo/.wine/drive_c/Program Files/Sierra/Homeworld2/Bin/Release'
wine "Homeworld2.exe" -w 1680 -h 1050 -mod Complex741.big -hardwarecursor -refresh 120

doodoo@doodoo:~/bin$ cat tstip.sh
#!/bin/sh
addr=`/sbin/ifconfig |grep Mask |grep -v 127 |/usr/bin/awk '{print $2}'`
echo $addr > Ltstip.txt
 
addr1=`w3m -dump <a href="http://u-ip.net" rel="nofollow">http://u-ip.net</a> | grep "Your IP"| sed -e 's/.*\ \([0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+\).*/\1/'`
echo addr:$addr1 >> Ltstip.txt

위에 까지가 흔히 쓰는 제 ~/bin 아래의 파일 들 입니다.

개인적인 생각으로는 위에 프로그램들 처럼 한 번 작업 처리할 때 여러개의 프로그램을 호출하는 과정에서
조금 느려 질 수 있다고 생각 하는데...만약 펄을 잘 익힌다면 위에 보인 작은 프로그램 들이나 파일 복사,
이동, scp, ftp 등을 자동화 하는게 쉘 보다 더 쉽다고 생각하세요?

실제로 쉘을 쓰는 이유가 반복적인 일들을 한번에 처리하기 위함인데...요즘 진짜 자주 쓰는...bashrc 안의 이런것들도

function bs {
	cd ./`ls BT* | sed -n '/^BT-.*:$/h;/^BT-.*:$/!{'/$1/'{g;s/://;p}}'`
}
function bm {
	ind=`pwd`
	for i in *torrent;do wget --spider "http://localhost:4080/submit?q=dllink $ind/$i";sleep 1;done
}

펄을 이용하면 더 간단히 할수 있을까요?

PS. 다른 분들은 펄을 어디에 쓰세요?

aero의 이미지

쉘명령 조합으로 간단하게 되는 작업이면 그렇게 하는게 낫다고 봅니다.

하지만 그것만 가지고는 부족하거나 되긴 되지만 그것이 더 큰 삽질이다라고 생각되는
약간의 고수준의 작업인 경우는 Perl이 도움이 되겠죠. Perl은 윈도우/유닉스 가리지
않으니 크로스플랫폼 스크립팅도 되고...

Perl은 one-liner 부터 간단한 작업에도 사용되지만 잘 배워놓으면
더 복잡한 작업이나 시스템을 구축하는데도 사용할 수 있다는 점에서 배울 가치가 있다고 봅니다.

---------
Stop reinventing wheels, start building space rockets.
- From http://www.cpan.org/

keedi의 이미지

쉘이 편한 경우가 있고 펄이 편한 경우가 있습니다.

디렉터리간 이동을 하며 간단한 명령을 실행하는 경우는 쉘이 더 편하기도 하구요.

제 경우는 쉘 스크립트로 20줄 정도 넘어갈 것 같으면 바로 펄로 작성합니다.
또한 명령줄의 인자를 받아서 적절한 처리를 하고 싶을때 쉘에 비하면
펄 쪽이 인자 점검 및 후처리 작업을 수행하기에 더 수월합니다.

아무래도 쉘은 다른 외부 명령을 주로 실행하다보니 문법 점검이 어려운데
그에 비하면 펄쪽은 컴파일 시간에 왠만한 것은 오류를 잡아주다 보니
수월한 부분도 있습니다.

예제로 보여주신 wine 실행이나 iso 생성등 외부 프로그램 호출이
주 목적이면서 && 간단한 wrapper 스크립트라면 perl 보다는
쉘쪽이 더 나을 것 같기도 합니다.

제 경우 말씀하신 파일 복사, 이동, scp, ftp 등을 자동화 하는데는
펄쪽이 더 편하다고 생각합니다.
쉘로 작성할 때보다 오류처리라던가, 가독성을 신경쓰다보면
코드양은 조금 더 늘어나지만 쉘 코드보다 유지보수하기가 더 좋아지더군요.
물론 익숙함의 차이일수도 있지만요.

펄로 쉘 스크립트를 대신할 때의 큰 장점은 CPAN 모듈을 사용할 수 있으며
정규표현식을 쉽게 사용할 수 있는 부분이 것 같습니다.

저는 다음과 같을 때 주로 쉘 스크립트 보다는 펄 스크립트를 사용하고 있습니다.

- 표준입력 및 표준 출력 처리시
- 명령줄 인자 처리시
- 이식성 있는 스크립트가 필요시
- 정규표현식이 필요시(sed awk 대신)
- CPAN 모듈이 필요할때
- 조금 더 엄격하게 작성해야 할 때
- 두 명 이상 사용 및 개발 할 때
- 유지보수를 계속 해야 할 때(물론 쉘스크립트도 유지보수 하겠지만요..;)

회사에서는 Catalyst를 이용해서 웹어플리케이션을 만들고 있으며,
현재 사내의 모든 사람이 펄을 익숙하게 사용하는 덕에
회사 내부 시스템의 전반적인 관리에 펄을 이용하고 있습니다. ;-)

----
use perl;

Keedi Kim

doodoo의 이미지

너무 단순한 질문인지 모르겠지만...bash 에서는 파일 복사 이동 같은경우에
cp a b 등으로 쓰는데...펄에서는 어떻게 하는지 모르겠습니다 system() 함수 호출해야 하는건가요?
그 경우는 결국 시스템에 들어있는 cp 명령을 부르니 쉘의 경우랑 별 차이가 없어 보이는데요

또한 ftp 경우에는 대충 이렇게

ftp -n 192.168.1.2 << end
user user1 mypass
cd mydir
bin
put thisfiles
bye
end

등으로 쓰는데...펄에서는 다들 어떻게 하시는지?
aero의 이미지

http://search.cpan.org/search?query=fTP&mode=all
에 보시면 ftp를 다룰 수 있는 모듈이 아주 많습니다.
모듈을 통해서 하면 위 처럼 shell로 했을때는 처리 못하는 갖가지 예외상황에
대해서 더 정교하게 처리가 가능하겠죠.

doodoo의 이미지

감사합니다....어쨓든 비기닝펄을 다 보고(일단 보던거니..ㅎㅎ) 생각좀 해야 할것 같네요..

ydhoney의 이미지

근데..기본적으로 펄보다 쉘이 인식하기도, 수정하기도, 남들에게 인수인계하기도 편합니다.

물론 Performance는 좀 안나오죠. 근데 뭐..그렇다구요. gnu툴이 왠만한 툴보다 빠른 경우도 있기 때문에 성능 안나오는것조차 절대적인것은 아닙니다. 단 파이프라인이 느릴 수 있습니다만, 그래도 사람의 휴식시간은 시스템의 휴식시간보다 중요하잖아요? (...)

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.