<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule"
>

<channel>
	<title>EMSTONE Bebop &#187; Digest</title>
	<atom:link href="http://bebop.emstone.com/tags/digest/feed/" rel="self" type="application/rss+xml" />
	<link>http://bebop.emstone.com</link>
	<description>엠스톤 개발팀 블로그</description>
	<lastBuildDate>Sun, 29 Jan 2012 05:25:29 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<creativeCommons:license>http://creativecommons.org/licenses/by-nc-nd/2.0/kr/</creativeCommons:license>
		<item>
		<title>[Digest] 펄 스크립트로 상호 작용하는 Ack 쉘 만들기</title>
		<link>http://bebop.emstone.com/2009/02/18/ack-shell-with-perl-script/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=ack-shell-with-perl-script</link>
		<comments>http://bebop.emstone.com/2009/02/18/ack-shell-with-perl-script/#comments</comments>
		<pubDate>Tue, 17 Feb 2009 17:31:57 +0000</pubDate>
		<dc:creator>keedi</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[ack]]></category>
		<category><![CDATA[App::Ack]]></category>
		<category><![CDATA[CPAN]]></category>
		<category><![CDATA[Digest]]></category>
		<category><![CDATA[grep]]></category>
		<category><![CDATA[Perl]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[       주의 : [[Digest] 펄 스크립트로 상호 작용하는 Ack 쉘 만들기]의 가장 최근 판은  이곳 에서 확인할 수 있습니다.

 CPAN의  Andy Lester 가 제작한  App::Ack  모듈은 펄로 만든 강력한 문자열 검색 도구 입니다. 한 번 사용하면 즐겨 사용하던 GNU grep을 버려버릴 수 있을 정도로  grep 을 사용하면서 한 번쯤은 느낄 아쉬운 부분들을 보완하는 다양한 기능과 옵션을 가지고 있습니다.  App::Ack  모듈을 설치하면 명령줄 실행 프로그램인  ack 를 같이 설치하므로 특별히  App::Ac...
     <a href="http://bebop.emstone.com/2009/02/18/ack-shell-with-perl-script/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><strong>주의</strong>: [[Digest] 펄 스크립트로 상호 작용하는 Ack 쉘 만들기]의 가장 최근 판은 <a href="http://bebop.emstone.com/~keedi/timetolog/id/23">이곳</a>에서 확인할 수 있습니다.</p>
<p>CPAN의 <a href="http://search.cpan.org/~petdance/">Andy Lester</a>가 제작한 <a href="http://search.cpan.org/perldoc?App::Ack">App::Ack</a> 모듈은<br />
펄로 만든 강력한 문자열 검색 도구 입니다.<br />
한 번 사용하면 즐겨 사용하던 GNU grep을 버려버릴 수 있을 정도로<br />
<code>grep</code>을 사용하면서 한 번쯤은 느낄 아쉬운 부분들을 보완하는<br />
다양한 기능과 옵션을 가지고 있습니다.<br />
<code>App::Ack</code> 모듈을 설치하면 명령줄 실행 프로그램인 <code>ack</code>를 같이 설치하므로<br />
특별히 <code>App::Ack</code> 모듈을 이용한 프로그램을 작성할 것이 아니라면<br />
기본으로 제공하는 <code>ack</code> 프로그램만으로도 사용하는데는 지장이 없습니다.</p>
<p><code>ack</code>는 기본으로 버전 관리 프로그램에서 사용하는 내부 디렉터리를<br />
검색 대상에서 제외하기 때문에 프로그램 작성 중 CVS 또는 서브버전 저장소 안에서<br />
검색시 <code>grep</code>에 비해 아주 쾌적하게 사용할 수 있습니다.<br />
또한 펄 프로그래머라면 당연히 익숙할 <em>펄의 정규표현식</em> 을<br />
동일하게 지원하기 때문에 별도로 정규표현식 문법을<br />
익힐 필요가 없다는 것도 큰 장점입니다.<br />
<code>ack</code>의 자세한 기능과 다양한 옵션에 대해서는 <code>ack --help</code>를 참조하세요.</p>
<p>프로그램을 작성할 때 기존 코드를 검색해서 구조를 파악하거나<br />
호출 상관 관계를 살펴볼 때 <code>grep</code>과 같은 문자열 검색 프로그램은 매우 유용합니다.<br />
<code>ack</code>를 사용하면 효율을 더욱 높일 수 있는데 한 가지 아쉬운 점은<br />
매번 검색시 마다 <code>ack</code>와 원하는 옵션을 입력해야 한다는 것입니다.<br />
이것은 매번 사용자의 검색 질의어 입력을 받아서 <code>ack</code>를 호출하는<br />
간단한 펄 스크립트를 작성하면 쉽게 해결할 수 있습니다:</p>
<pre><code>  #!/usr/bin/perl

  use strict;
  use warnings;

  input();

  while (&lt;&gt;) {
      chomp;
      last if /^gg$/;
      next if !$_;

      print &lt;&lt;"END_MSG";

  ------------------------------------------------------------------------
  Search Keyword: [$_]
  ------------------------------------------------------------------------
  END_MSG

      if ( m{^/(.*)/$} ) {
          system 'ack', '--pager=more', '--match', $1, '.';
      }
      elsif ( m{^/(.*)/i$} ) {
          system 'ack', '--pager=more', '--ignore-case', '--match', $1, '.';
      }
      else {
          system 'ack', '--pager=more', '--literal', $_, '.';
      }

  } continue {
      input();
  }

  sub input {
      print &lt;&lt;"END_INPUT";

  * This is a Simple Ack shell.
  * /PATTERN/  : PATTERN will be interpreted as Perl's regular expression.
  * /PATTERN/i : PATTERN will be interpreted as Perl's regular expression
                 with ignore case option
  * PATTERN    : PATTERN will be interpreted as literal characters.
  * gg         : quit the program.

  END_INPUT

      print "Search Keyword: ";
  }
</code></pre>
<p>위의 펄 스크립트는 매우 간단한 구조를 가지고 있습니다.<br />
사용자의 입력을 받아들인 후 사용자의 입력을 이용해서<br />
정규표현식 검색을 할 것인지 또는<br />
대소문자 구분없는 정규표현식 검색을 할 것인지,<br />
단순 문자열 검색을 할 것인지, 프로그램을 종료할 것인지를 판단합니다.<br />
그 후 실제 검색은 <code>ack</code> 프로그램을 외부 호출을 통해 수행하고<br />
결과 역시 <code>ack</code>가 만들어내는 화면을 그대로 표준 출력에 보여줍니다.</p>
<p>규모가 있는 프로그램을 작성할 때 <code>ctags</code> 와 <code>cgvg</code><br />
그리고 간단하게 <code>ack</code>와 상호작용하는 펄 스크립트를 이용해서<br />
코드를 검색하는데 작업 능률면에서 매우 만족하고 있습니다. <img src='http://bebop.emstone.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://bebop.emstone.com/2009/02/18/ack-shell-with-perl-script/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-nc-nd/2.0/kr/</creativeCommons:license>
	</item>
	</channel>
</rss>

