<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">

<channel>
	<title>nTree</title>
	<link>http://eriny.net</link>
	<generator>erinPaper</generator>
	<description>가치가 있다고 생각되는 만큼 과감하게 자신의 노력과 근성을 투자하라. 나무의 크기와 열매는 그 다음이다.</description>
	<language>ko</language>
	<lastBuildDate>Thu, 23 Feb 2012 11:51:54 +0900</lastBuildDate>
	<manageingEditor>yuki.n.pl@eriny.net (yuki.n.pl)</manageingEditor>
	<webMaster>yuki.n.pl@eriny.net (yuki.n.pl)</webMaster>
<item>
<title>Reference #1 - Intro + for scalar variable and data</title>
<link>http://eriny.net/n/131</link>
<guid>http://eriny.net/n/131</guid>
<pubDate>Sun, 12 Feb 2012 22:10:52 +0900</pubDate>
<author>yuki.n.pl@eriny.net (yuki.n.pl)</author>
<category>Perl</category>
<comments>http://eriny.net/n/131#comment</comments>
<description>
&lt;p&gt;
	&lt;pre class=&quot;ccode&quot;&gt;
#!/usr/bin/env perl
use strict;
use warnings;

@arrayUpperLetters= ( 'A' ... 'Z');
@arrayLowerLetters= ( 'a' ... 'z');
$arrayUpperLetters[26]= @arrayLowerLetters;

print &quot;$arrayUpperLetters[26]&quot;, &quot;\n&quot;;&lt;/pre&gt;
	위 code의 의도는 @arrayUpperLetters에 @arrayLowerLetters의 elements들을 추가하려는 것이다. 그러나 Perl에서 Array variable을 또 다른 Array variable의 elements 중 하나에 담으려고하면 해당 Array의 size(length)가 담기게 된다. Array variable의 elements는 반드시 Scalar Data여야 하기 때문이다. 따라서 위 code는 &lt;b&gt;26&lt;/b&gt;이 출력되게 된다.&lt;br /&gt;
	&amp;nbsp;&lt;br /&gt;&lt;/p&gt;
	
&lt;p&gt;
	기본적으로 Perl은 Array variable에 또다른 Array variable을 포함시킬 수 없다. 그러나 Programmer가 이러한 방법을 원할 수 있을 것이며, 이것을 실현할 수 있는 방법이 &lt;b&gt;Reference&lt;/b&gt;이다. &lt;b&gt;Reference&lt;/b&gt;는 기본적으로 다른 Variable 또는 Data struct를 Scalar type의 형태로 가르킬 수 있다. 따라서 Reference는 Array나 Hash에 관계없이 위와 같은 문제를 실현할 수 있게된다. C/C++을 다루어봤다면 유사한 것으로 Pointer를 들 수 있을 것이다.&lt;br /&gt;
	&amp;nbsp;&lt;br /&gt;&lt;/p&gt;
	
&lt;p&gt;
	&lt;pre class=&quot;ccode&quot;&gt;
my $string= &quot;Good day&quot;;
my $ref= \$string;&lt;/pre&gt;
	Scalar variable &lt;b&gt;'$ref'&lt;/b&gt;가 $string의 &lt;b&gt;Reference&lt;/b&gt; 다. Reference를 만들어내기 위해서는 Variable 앞에 '\'(backslash)&lt;sup&gt;[1]&lt;/sup&gt;를 표기해주면 된다. 따라서 '$ref'는 '$string'을 가르키고 있다. 지금부터 Reference가 어떻게 사용되는지 이해가 쉽도록 code를 들어가며 설명하도록 할 것이다.&lt;br /&gt;
	&lt;pre class=&quot;ccode&quot;&gt;
print $$ref;&lt;/pre&gt;
	&lt;b&gt;Reference&lt;/b&gt;가 현재 가르키고 있는 Data 또는 Variable의 값을 사용하려면 위와 같이 Reference variable 앞에 $를 붙임으로써 가능해진다. 따라서 위 code의 결과는 다음과 같다.&lt;br /&gt;
	&lt;pre class=&quot;ccode&quot;&gt;
Good day&lt;/pre&gt;
	&amp;nbsp;&lt;br /&gt;&lt;/p&gt;
	
&lt;p&gt;
	아래 code를 제대로 이해하고 있다면 일단 Reference의 기본을 이해했다고 볼 수 있다. 아래 code의 결과를 예상해보도록 하자.
	&lt;pre class=&quot;ccode&quot;&gt;
#!/usr/bin/env perl
use strict;
use warnings;

my $string= &quot;Good day&quot;;
my $ref= \$string;

$string= &quot;Blue day&quot;;
print $$ref;             # same with ${$ref}&lt;/pre&gt;
	결과가 예상되는 가? 스스로 code를 옮겨쓰고 실행해 보도록하자. 물론 아래의 code도 동일한 결과를 가져온다.
	&lt;pre class=&quot;ccode&quot;&gt;
$!/usr/bin/env perl
use strict;
use warnings;

my $string= &quot;Good day&quot;;
my $ref= \$string;
$$ref= &quot;Blue day&quot;;

print $string;&lt;/pre&gt;
	&amp;nbsp;&lt;br /&gt;&lt;/p&gt;
	
&lt;p&gt;
	글을 거의 다 써 갈때쯤 'n군'이 이런 질문을 했다. Reference를 print를 사용해서 그대로 출력하면 어떻게 되느냐? 해 보면 되는 것 아닌 가? 아래와 같이 출력될 것이다.&lt;sup&gt;[2]&lt;/sup&gt;&lt;br /&gt;
	&lt;pre class=&quot;ccode&quot;&gt;
SCALAR(0x10082a3b8);&lt;/pre&gt;
	&amp;nbsp;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;
	다음 글에서 이 글의 처음 code를 reference를 이용하여 programmer가 기존에 의도한대로 처리할 수 있도록 하는 방법에 대한 설명을 할 것이다.&lt;br /&gt;
	&amp;nbsp;&lt;br /&gt;&lt;/p&gt;
	
&lt;p class=&quot;footnote&quot;&gt;
	&lt;b&gt;[1]&lt;/b&gt; backslash는 때에 따라 화면에 Won/Yen등을 나타내는 단위의 표시로 나타날 수 있다.&lt;br /&gt;
	&lt;b&gt;[2]&lt;/b&gt; 출력된 값은 다를 수 있다. 위와 같은 형식으로 출력될 것이다. 가르키고 있는 Data나 Variable에 따라서 출력되는 값은 매번 달라질 수 있다. C/C++를 사용해봤다면 Pointer를 기억하라.&lt;br /&gt;
	&amp;nbsp;&lt;br /&gt;&lt;/p&gt;
</description>
</item>

<item>
<title>undef, use warnings</title>
<link>http://eriny.net/n/129</link>
<guid>http://eriny.net/n/129</guid>
<pubDate>Mon, 06 Feb 2012 13:45:45 +0900</pubDate>
<author>yuki.n.pl@eriny.net (yuki.n.pl)</author>
<category>Perl</category>
<comments>http://eriny.net/n/129#comment</comments>
<description>
&lt;p&gt;
	각 변수에 대한 설명이 끝나면, 매번 잠시 다른 이야기를 하곤했다. 이번에도 그렇다. 다만 간단하면서 중요하다.&lt;br /&gt;
	&amp;nbsp;&lt;br /&gt;&lt;/p&gt;
	
&lt;p&gt;
	scalar, array, hash variable은 값을 미리 지정해주지 않아도 사용이 가능하다. 기본적으로 '&lt;b&gt;undef&lt;/b&gt;'의 값이 주어진다. 'undef'는 아무런 값도 가지고 있지 않다는 이야기이다. 따라서 해당 변수의 값은 0이나 empty string 이 아니다. 그런데 해당 변수의 값을 읽으면 기본적으로 empty string, 0을 제공하다.&lt;br /&gt;
	&amp;nbsp;&lt;br /&gt;&lt;/p&gt;
	
&lt;p&gt;
	&lt;pre class=&quot;ccode&quot;&gt;
#!/usr/bin/env perl
use strict;

my $undefVar;
print &quot;Undefined variable: $undefVar&quot;, &quot;\n&quot;;
print &quot;Undefined variable + 5 = &quot;, $undefVar + 5, &quot;\n&quot;;&lt;/pre&gt;
	&lt;pre class=&quot;ccode&quot;&gt;
Undefined variable:
Undefined variable + 5 = 0&lt;/pre&gt;
	위와 같이 아무런 값을 가지지 않은 $undefVar는 계산이 필요하여 해당 값을 읽어내야 하는 상황이 오자 원래 가진 값이 '0'인양 동작했다.
	&amp;nbsp;&lt;br /&gt;&lt;/p&gt;
	
&lt;p&gt;
	가급적 초기화되지 않는 변수를 그냥 가져다 쓰는 것은 좋지 못하다. 이런 것을 확인하기 위해서는 use strict과 비슷한 use warnings를 선언해 줌으로써 해결해 줄 수 있다. use warnings는 변수 이름이라던가 선언되지 않는 사용, reference의 잘못된 사용(나중에 이야기할 것임), filehandle(나중에 이야기할 것임), 기타 등등 code상에 문제가 있을 때 경고를 해주는 것이다. 따라서 위 code에 use warnings를 추가한 아래의 code는 실행하면 그 아래의 결과를 얻는다.&lt;br /&gt;
	&lt;pre class=&quot;ccode&quot;&gt;
#!/usr/bin/env perl
use strict;
use warnings;

my $undefVar;
print &quot;Undefined variable: $undefVar&quot;, &quot;\n&quot;;
print &quot;Undefined variable + 5 = &quot;, $undefVar + 5, &quot;\n&quot;;&lt;/pre&gt;
	&lt;pre class=&quot;ccode&quot;&gt;
s:~ yuki.n.pl$ ./1.pl 
Use of uninitialized value $undefVar in concatenation (.) or string at ./1.pl li
ne 6.
Undefined variable: 
Use of uninitialized value $undefVar in addition (+) at ./1.pl line 7.
Undefined variable + 5 = 5&lt;/pre&gt;
	&amp;nbsp;&lt;br /&gt;&lt;/p&gt;
	
&lt;p&gt;
	마지막으로 keyword '&lt;b&gt;undef&lt;/b&gt;'를 사용하게 되면 해당 변수의 값을 undef 상태로 만들 수 있습니다.&lt;br /&gt;
	&lt;pre class=&quot;ccode&quot;&gt;
#!/usr/bin/env perl
use strict;
use warnings;

my $var= 3;
undef $var;

print &quot;$var&quot;, &quot;\n&quot;;
print &quot;$var + 5 = &quot;, $var + 5, &quot;\n&quot;;&lt;/pre&gt;
	&lt;pre class=&quot;ccode&quot;&gt;
s:~ yuki.n.pl$ ./1.pl 
Use of uninitialized value $var in string at ./1.pl line 8.

Use of uninitialized value $var in concatenation (.) or string at ./1.pl line 9.
Use of uninitialized value $var in addition (+) at ./1.pl line 9.
 + 5 = 5&lt;/pre&gt;
 	&amp;nbsp;&lt;br /&gt;&lt;/p&gt;
</description>
</item>

<item>
<title>Hash Variable</title>
<link>http://eriny.net/n/125</link>
<guid>http://eriny.net/n/125</guid>
<pubDate>Tue, 31 Jan 2012 16:49:21 +0900</pubDate>
<author>yuki.n.pl@eriny.net (yuki.n.pl)</author>
<category>Perl</category>
<comments>http://eriny.net/n/125#comment</comments>
<description>
&lt;p&gt;
	이번에 다뤄볼 변수는 Hash 다. perl에서는 Hash를 기본 타입으로 가지고 있다.&lt;br /&gt;
	Hash는 기본적으로는 탐색을 위하여 고안되었다고 해도 과언이 아닐만큼 탐색에 뛰어난 능력을 가지고 있다. 여기서 Array와의 차이점을 가지고 온다. Array는 기본적으로 Index가 정수로 이루어진다. 따라서 Array의 경우 특정 Data를 찾기 위해서 Data를 순차적으로 찾는 방법 밖에 없다. 물론 Binary Search와 같이 O(log n)안에 탐색 가능하기도 하다. 그러나 Hash는 O(1)의 탐색을 가능하게 한다. 왜냐하면 Hash는 Array와 동일하게 Data에 접근하기 위해 Index가 존재하지만 이 Index가 정수가 아닌 'Symbol'. 바꿔말하면 string을 Index로 사용할 수 있다.&lt;br /&gt;
	&amp;nbsp;&lt;br /&gt;&lt;/p&gt;
	
&lt;p&gt;
	예를 들어보면 이렇게 이야기할 수 있다. 학생들의 키를 어떻게 데이터로 보관할 것인 가? 를 생각해보도록 하자. Array에다가 학생들의 키를 저장해 두는 경우에는 해당 키가 누구의 키인지 알 수가 없다. Index와 학생번호를 동일하게 생각하고 입력해둔다고 하면 또 다시 학생의 이름을 확인해야하는 문제가 생긴다. 그러나 Hash의 경우는 조금 다르다. Index 자체를 학생의 이름으로 해둘 수 있기 때문이다. 이런 경우 특정 학생의 키를 검색해야할 때 바로 확인할 수 있게 된다. 아래의 code를 보면서 이해해보도록 하자&lt;br /&gt;
	&lt;pre class=&quot;ccode&quot;&gt;
#!/usr/bin/perl
use strict;

my %height= (&quot;Robert&quot; =&gt; &quot;164&quot;, &quot;Albert&quot; =&gt; &quot;155&quot;, &quot;William&quot; =&gt; &quot;182&quot;);

print $height{&quot;Robert&quot;}, &quot;\n&quot;;
print $height{&quot;Albert&quot;}, &quot;\n&quot;;
print $height{&quot;William&quot;}, &quot;\n&quot;;&lt;/pre&gt;
	&lt;pre class=&quot;ccode&quot;&gt;
163
155
182&lt;/pre&gt;
	Hash는 variable name 앞에 '%'를 붙인다. 그리고 각 Index에 대한 값에 접근할 때, $variableName{&quot;key&quot;} 와 같은 방식으로 가능하다.&lt;br /&gt;
	&amp;nbsp;&lt;br /&gt;&lt;/p&gt;
	
&lt;p&gt;
	Hash의 경우에는 아무래도 'key'&lt;sup&gt;[1]&lt;/sup&gt;가 중요할 수 밖에 없다. 특정 값을 찾일 때 'key'를 통해서 찾기 때문이다. 바꿔말하면 'key'만 알면 찾을 수 있고 반대로 'key'를 모르면 찾을 수 없다는 이야기가 된다.&lt;br /&gt;
	perl에서는 hash variable에서 key 값만 array variable으로 받을 수 있는 방법을 제공한다. 아래의 code를 보면 쉽게 이해할 수 있으리라 생각된다.&lt;br /&gt;
	&lt;pre class=&quot;ccode&quot;&gt;
#!/usr/bin/perl
use strict;

my %height= (&quot;Robert&quot; =&gt; &quot;164&quot;, &quot;Albert&quot; =&gt; &quot;155&quot;, &quot;William&quot; =&gt; &quot;182&quot;);
my @keys= keys %height;
print &quot;@keys&quot;, &quot;\n&quot;;&lt;/pre&gt;
	&lt;pre class=&quot;ccode&quot;&gt;
Albert William Robert&lt;/pre&gt;
	&amp;nbsp;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;
	마지막으로 위 code를 보면서 이해했겠지만 Hash에서의 값의 순서는 의미가 없다.&lt;br /&gt;
	&amp;nbsp;&lt;br /&gt;&lt;/p&gt;

&lt;p class=&quot;footnote&quot;&gt;
	&lt;b&gt;[1]&lt;/b&gt; Hash에서는 Array에서의 Index를 일반적으로 Key라고 부른다.&lt;br /&gt;
	&amp;nbsp;&lt;br /&gt;&lt;/p&gt;
</description>
</item>

<item>
<title>Time expression</title>
<link>http://eriny.net/n/123</link>
<guid>http://eriny.net/n/123</guid>
<pubDate>Fri, 20 Jan 2012 03:06:43 +0900</pubDate>
<author>yuki.n.pl@eriny.net (yuki.n.pl)</author>
<category>Perl</category>
<comments>http://eriny.net/n/123#comment</comments>
<description>
&lt;p&gt;
	마지막 변수의 종류 Hash에 대한 설명을 시작하기 전에 다른 이야기를 잠깐 하려한다. 이것이 지금 이 시기에 이 것을 설명하는 것이 중요함 아니라 잠시 쉬어가는 의미가 있다.&lt;br /&gt;
	&amp;nbsp;&lt;br /&gt;&lt;/p&gt;
	
	perl에서 시간을 표현, 확인하기 위하여 사용하는 function이 '&lt;b&gt;time&lt;/b&gt;'이다. 기본적으로 time은 특정 시기&lt;sup&gt;[1]&lt;/sup&gt;로부터 현재에 이르기까지의 초단위 시간으로 값을 제공한다. 다만, 초단위로의 시간 표기는 사람의 입장에서는 불편하기 때문에 추가로 처리해줘야할 일이 있다. 바로 사람이 알아보기 쉽도록 초가 아닌 년, 월, 일, 시, 분, 초의 형태로 나타내는 것을 말하며 이것은 그레고리력&lt;sup&gt;[2]&lt;/sup&gt;을 따른다. 이렇게 변경할 수 있도록 해 주는 것이 '&lt;b&gt;localtime&lt;/b&gt;'이다. localtime은 바로 뒤에 오는 수를 '특정 시기'&lt;sup&gt;[1]&lt;/sup&gt;로 부터의 초로 인식하여 변경해주는 역활을 한다. 다만 반드시 변수에 assign 하여 사용하도록 한다.&lt;br /&gt;
	&amp;nbsp;&lt;br /&gt;&lt;/p&gt;
	
&lt;p&gt;
	&lt;pre class=&quot;ccode&quot;&gt;
#!/usr/bin/env perl
use strict;

print time, &quot;\n&quot;;
print localtime time, &quot;\n&quot;;

my $now1= localtime time;
my @now2= localtime time;
my $day= $now2[3];

print $now1, &quot;\n&quot;;
print &quot;@now2&quot;, &quot;\n&quot;;
print $day, &quot;\n&quot;;&lt;/pre&gt;
	&lt;pre class=&quot;ccode&quot;&gt;
1326996135
15232001125190
Fri Jan 20 03:02:15 2012
15 2 3 20 0 112 5 19 0
20&lt;/pre&gt;
	
	localtime의 결과를 변수에 반드시 assign하여 사용하라고 한 이유는 위 code를 보면서 이해했으리라 생각된다. @now2를 보면 localtime의 return value를 array에 담을 때에는 각 elements에 초, 분, 시, 일, 월, 년, 요일, 1월 1일 부터의 날 수, 일광절약시간의 적용여부 순으로 담긴다.&lt;br /&gt;
	&amp;nbsp;&lt;br /&gt;&lt;/p&gt;
	
&lt;p class=&quot;descOfSubDesc&quot;&gt;
	&lt;b&gt;[1]&lt;/b&gt; system마다 이 특정 시기가 다를 수 있으며 일반적으로 1970년 1월 1일 00시 00분 00초가 기준이 된다. *inx system도 이를 따르고 있다.&lt;br /&gt;
	&lt;b&gt;[2]&lt;/b&gt; 현재 세계적으로 통용되고 있는 것으로, 0년 이라는 것이 존재하지 않으며 1년부터 시작되는 양력 달력이다. 그레고리력의 1년은 365/366일이며 재미있는 점으로는 그레고리력에는 1582년 10월 4일 바로 다음 날은 1582년 10월 15일으로 중간의 10일이 존재하지 않는다. 세계의 거의 모든 국가가 공식적으로 체택하고 있지만, 국가에 따라 자국의 자체적인 기준의 력을 사용하는 곳도 있다.&lt;br /&gt;
	&amp;nbsp;&lt;br /&gt;&lt;/p&gt;
</description>
</item>

<item>
<title>Array Variable #3 - stack, queue with array</title>
<link>http://eriny.net/n/122</link>
<guid>http://eriny.net/n/122</guid>
<pubDate>Thu, 19 Jan 2012 23:35:52 +0900</pubDate>
<author>yuki.n.pl@eriny.net (yuki.n.pl)</author>
<category>Perl</category>
<comments>http://eriny.net/n/122#comment</comments>
<description>
&lt;p&gt;
	array를 이용하면 자료구조 중에서 구현과 사용이 간단한 stack, queue도 쉽게 만들어 볼 수 있다. 다만 딱히 만들지 않아도 사용할 수 있다. perl에서 구현하지 않고 사용할 수 있도록 &lt;b&gt;push&lt;/b&gt;, &lt;b&gt;pop&lt;/b&gt;, &lt;b&gt;shift&lt;/b&gt;와 같은 function이 존재한다.&lt;br /&gt;
	&amp;nbsp;&lt;br /&gt;&lt;/p&gt;
	
&lt;p&gt;
	우선 stack과 queue의 차이를 생각해보자.&lt;br /&gt;
	LIFO(Last In First Out), FIFO(First In First Out)의 차이이다. 이 것의 차이를 그림으로 설명한다.&lt;br /&gt;
	&lt;pre class=&quot;ccode&quot;&gt;
  |  1  |  A  |  Q  |  T  |     |&lt;/pre&gt;
	위의 그림은 배열을 그림으로 표현한 것으로 '1'이 들어 있는 index가 0이고 아무것도 들어있지 않은 칸의 index는 4이다. 이 상황에서 'H'를 입력하면 stack과 queue 모두 아래와 같이 가장 뒤 빈칸에 'H'가 저장된다.&lt;br /&gt;
	&lt;pre class=&quot;ccode&quot;&gt;
  |  1  |  A  |  Q  |  T  |  H  |&lt;/pre&gt;
	그러나 삭제의 경우는 queue에서는 삭제를 하면 '1'이 사라지게 되지만 stack의 경우에는 'H'가 사라지게 된다. 결국 stack과 queue는 삭제가 어디에서 일어나는지에 달려 있다.&lt;br /&gt;
	&lt;pre class=&quot;ccode&quot;&gt;
  |  1  |  A  |  Q  |  T  |     | - stack
  |     |  A  |  Q  |  T  |  H  | - queue&lt;/pre&gt;
	따라서 perl에서 stack, queue에서 삽입시 사용할 함수로는 push 하나만을 제공한다. 그리고 삭제의 경우 stack은 pop, queue의 경우에는 shift를 사용하여 삭제한다. 아래의 code를 통하여 사용을 확인해보도록 하자.&lt;br /&gt;
	&lt;pre class=&quot;ccode&quot;&gt;
#!/usr/bin/env perl
use strict;

my @stack= ( '1', 'A', 'Q', 'T' );
my @queue= ( '1', 'A', 'Q', 'T' );

push @stack, 'H';
push @queue, 'H';

print &quot;Stack: @stack\n&quot;;
print &quot;Queue: @queue\n&quot;;

pop @stack;
shift @queue;

print &quot;Stack: @stack\n&quot;;
print &quot;Queue: @queue\n&quot;;&lt;/pre&gt;
	&lt;pre class=&quot;ccode&quot;&gt;
Stack: 1 A Q T H
Queue: 1 A Q T H
Stack: 1 A Q T
Queue: A Q T H&lt;/pre&gt;
	&amp;nbsp;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;
	마지막으로 한가지 더!! &lt;b&gt;unshift&lt;/b&gt;라는 것이 존재하는데 아래 code를 보고 확인하도록 하자&lt;br /&gt;
	&lt;pre class=&quot;ccode&quot;&gt;
#!/usr/bin/env perl
use strict;

my @array= ( '1', 'A', 'Q', 'T' );

unshift @array, 'H', 'K';
print &quot;@array\n&quot;;&lt;/pre&gt;
	&lt;pre class=&quot;ccode&quot;&gt;
H K 1 A Q T&lt;/pre&gt;
	&amp;nbsp;&lt;br /&gt;&lt;/p&gt;
</description>
</item>

<item>
<title>Array Variable #2</title>
<link>http://eriny.net/n/121</link>
<guid>http://eriny.net/n/121</guid>
<pubDate>Tue, 17 Jan 2012 22:48:59 +0900</pubDate>
<author>yuki.n.pl@eriny.net (yuki.n.pl)</author>
<category>Perl</category>
<comments>http://eriny.net/n/121#comment</comments>
<description>
&lt;p&gt;
	이번에는 두 개이상의 array을 합쳐 새로운 array을 만들어보도록 하자&lt;br /&gt;
	&lt;pre class=&quot;ccode&quot;&gt;
#!/usr/bin/env perl
use strict;

my @stuffA= ( 1 .. 5);
my @stuffB= ( 6 .. 10);
my @stuffAll= ( @stuffA, @stuffB);

print &quot;@stuffAll&quot;.&quot;\n&quot;;&lt;/pre&gt;
	위 code와 같이 array의 element로서 array를 포함하면 된다. 위 code에서의 @stuffAll은 elements로서 1부터 10까지 10개를 가진다. 따라서 위 code는 실행하면 다음과 같은 결과를 볼 수 있다.&lt;br /&gt;
	&lt;pre class=&quot;ccode&quot;&gt;
1 2 3 4 5 6 7 8 9 10&lt;/pre&gt;
	&amp;nbsp;&lt;br /&gt;&lt;/p&gt;
	
&lt;p&gt;
	합치는 것이 있으면 나누는 것도 있는 법. 이번에는 scalar data를 array로 변경함으로써 여러개의 elements(scalar data)로 나눠보도록 하자. 엄밀히 말하면 scalar data 중 string을 array로 변경하는 방법이다.&lt;br /&gt;
	&lt;pre class=&quot;ccode&quot;&gt;
#!/usr/bin/env perl
use strict;

my $string= &quot;perl is programming language for general purpose.&quot;;
my @words= split / /, $string;

print $words[0].&quot; &quot;.$words[3].&quot;\n&quot;;&lt;/pre&gt;
	split 뒤에 오는 '/'과 '/' 사이에 무엇을 기준으로 나눌 지 표시하고 그 뒤에 잘라서 array로 만들 string(scalar data) 또는 string variable을 두면 된다. 따라서 위 code는 &quot; &quot;를 기준으로 7개의 elements로 나누게 되며, @words는 7개의 elements를 가진 array가 된다.&lt;br /&gt;
	아래 실행 결과를 보고 확인하도록 하자.&lt;br /&gt;
	&lt;pre class=&quot;ccode&quot;&gt;
perl language&lt;/pre&gt;
	&amp;nbsp;&lt;br /&gt;&lt;/p&gt;
	
&lt;p&gt;
	위에서 split를 이용하여 array를 만들었을 때,&lt;br /&gt;
	elements의 수를 제한할 수 있는 데, 그 방법은 다음과 같다.&lt;br /&gt;
	&lt;pre class=&quot;ccode&quot;&gt;
#!/usr/bin/env perl
use strict;

my $string= &quot;1,2,3,4,5,6,7,8,9,10&quot;;
my @words= split /,/, $string, 3;

print &quot;@words&quot;.&quot;\n&quot;;
print $words[2].&quot;\n&quot;;&lt;/pre&gt;
	&lt;pre class=&quot;ccode&quot;&gt;
1 2 3,4,5,6,7,8,9,10
3,4,5,6,7,8,9,10&lt;/pre&gt;
	위와 같이 string variable 뒤에 수를 표시하면 그 수만큼의 elements를 나눈다. 위 code의 경우 3개의 elements로 나누기 때문에 2개를 먼저 나누고 나머지 뒷 부분이 3번째 element이 된다.&lt;br /&gt;
	&amp;nbsp;&lt;br /&gt;&lt;/p&gt;
	
&lt;p&gt;
	마지막으로 array의 elements를 추가하거나 삭제하는 방법을 알아보려 한다. 여기서 사용되는 operator는 splice이다. split과는 다른데, split은 string(sclar data)를 잘라서 array로 conversion하는 것이고, splice는 array의 elements를 자르는 것이다.&lt;br /&gt;
	&lt;pre class=&quot;ccode&quot;&gt;
#!/usr/bin/env perl
use strict;

my @numbers= ( 1 .. 10);
splice @numbers, 2;

print &quot;@numbers&quot;.&quot;\n&quot;;&lt;/pre&gt;
	위 code와 같이 splice를 사용하면 2번째 elements까지만 두고 뒷 elements를 모두 날려버리게 된다. 여기서 사용한 splice는 생략된 arguments(parameters)가 존재하나 사용법을 명확히 하기 위하여 나머지 부분에 대해서도 2부분으로 나누어 설명한다.&lt;br /&gt;
	&amp;nbsp;&lt;br /&gt;&lt;/p&gt;
	
&lt;p&gt;
	&lt;pre class=&quot;ccode&quot;&gt;
#!/usr/bin/env perl

my @numbers= ( 1 .. 10);
splice @numbers, 2, 4;

print &quot;@numbers&quot;.&quot;\n&quot;;&lt;/pre&gt;
	&lt;pre class=&quot;ccode&quot;&gt;
1 2 7 8 9 10&lt;/pre&gt;
	이전에 보았던 code와 달리 바로 뒤에 수를 하나 더 붙여서 쓰게 되면, 의미가 달라지게 되는데 2개의 elements를 지나서 4개의 elements를 삭제하게 된다.&lt;br /&gt;
	&amp;nbsp;&lt;br /&gt;&lt;/p&gt;
	
&lt;p&gt;
	처음에 splice를 설명할 때 elements를 추가할 수 있는 기능이 있다고 했다. 정확히 이야기하면 insertion이 아니라 replacing의 의미가 강하다.&lt;br /&gt;
	&lt;pre class=&quot;ccode&quot;&gt;
#!/usr/bin/env perl
use strict;

@numbers= ( 1 .. 10);
splice @numbers, 2, 4, &quot;A&quot;, &quot;BC&quot;;
print &quot;@numbers&quot;.&quot;\n&quot;;&lt;/pre&gt;
	&lt;pre class=&quot;ccode&quot;&gt;
1 2 A BC 7 8 9 10&lt;/pre&gt;
	이전 code에서 봤던 것 처럼 2개의 elements를 지나서 4개의 elements를 삭제하는 것 까지 동일하며 그 뒤에 오는 &quot;A&quot;와 &quot;B&quot;를 elements를 삭제한 그 자리에 대신 넣는다. 삭제한 elements자리에 들어가는 elements는 수의 제한이 없다. 이 이야기는 삭제된 기존의 elements의 수와 관계 없이 해당 자리에 elements가 추가된다는 이야기를 뜻한다.&lt;br /&gt;
	&amp;nbsp;&lt;br /&gt;&lt;/p&gt;
	
&lt;p&gt;
	array의 사용에 대해 한 가지 더 유용한 사용방법이 있으므로 다음 글에서 array variable에 대하여 한번 더 다룰 예정이다.&lt;br /&gt;
	&amp;nbsp;&lt;br /&gt;&lt;/p&gt;
</description>
</item>

<item>
<title>Array Variable #1</title>
<link>http://eriny.net/n/120</link>
<guid>http://eriny.net/n/120</guid>
<pubDate>Mon, 16 Jan 2012 23:04:55 +0900</pubDate>
<author>yuki.n.pl@eriny.net (yuki.n.pl)</author>
<category>Perl</category>
<comments>http://eriny.net/n/120#comment</comments>
<description>
&lt;p&gt;
	perl에서 제공하는 variable의 두번째로 array variable을 설명한다.&lt;br /&gt;
	&lt;pre class=&quot;ccode&quot;&gt;
#!/usr/bin/env perl
use strict;

my $url= &quot;http://eriny.net&quot;;

my @empty= ();
my @stuff= (&quot;abcdefg&quot;, 1234, 3.333, $url);

print @empty.&quot;\n&quot;;
print @stuff.&quot;\n&quot;;&lt;/pre&gt;
	배열의 경우, 위의 code에서도 확인할 수 있듯이 변수 앞에 '@'을 붙여서 표시한다. 기본적으로 element로 scalar data / scalar variable을 사용할 수 있다. 그리고 string 을 사용할 때 q| ... | 와 같은 사용방법이 있었던 것처럼 '(', ')' 대신에 아래와 같은 표현도 가능하다.&lt;br /&gt;
	&lt;pre class=&quot;ccode&quot;&gt;
my @stuff= qw(abc 1234 3.333);&lt;/pre&gt;
	qw(...)는 각 elements를 구별할 때 whitespace를 사용한다. 따라서 위의 code에 빈칸 대신에 ','를 사용한 구분은 불가능하며, scalar variable을 포함할 수도 없다.&lt;br /&gt;
	&amp;nbsp;&lt;br /&gt;&lt;/p&gt;
	
&lt;p&gt;
	그리고 개인적으로 마음에 들어하는 operator인데, 배열을 사용할 때 상당히 유용하다. 아래 code와 실행 결과를 보고 이해하도록 하자&lt;br /&gt;
	&lt;pre class=&quot;ccode&quot;&gt;
#!/usr/bin/env perl
use strict;

my @numbers= (1 .. 20);
my @alpha=   ('a' .. 'z');

print @numbers.&quot;\n&quot;;
print @alpha.&quot;\n&quot;;&lt;/pre&gt;
	위의 code에서 '..'이 operator로 range operator이다. 결과는 다음과 같다.&lt;br /&gt;
	&lt;pre class=&quot;ccode&quot;&gt;
1234567891011121314151617181920
abcdefghijklmnopqrstuvwxyz&lt;/pre&gt;
	&amp;nbsp;&lt;br /&gt;&lt;/p&gt;
	
&lt;p&gt;
	이제 array variable의 선언과 초기화에 대해서 알아보았으니 어떻게 사용하는 지 알아보자. 위에서는 각 elements를 print를 이용하여 한꺼번에 출력했는데 각 element를 다룰 수 있는 방법이 있다면 빈칸을 둬서 출력해 볼 수도 있고&lt;sup&gt;[1]&lt;/sup&gt; 다양한 사용이 가능할 것이다. 따라서 각 element를 다루는 방법을 아래의 code를 보고 확인해보도록 하자.&lt;br /&gt;
	&amp;nbsp;&lt;br /&gt;&lt;/p&gt;
	
&lt;p&gt;
	&lt;pre class=&quot;ccode&quot;&gt;
#!/usr/bin/env perl
use strict;

my @stuff= qw( 34 56 &quot;Hello world&quot;);
my $element= $stuff[1];

print $element.&quot;\n&quot;;&lt;/pre&gt;
	위 code에 확인할 수 있었던 것처럼 각 element는 결국 scalar data이기 때문에 $variable[indexNumber]와 같은 방식을 이용하여 각 element값을 다룰 수 있게 된다. 다만 @stuff[1]과 같은 방법도 가능하지만 $stuff[1]을 사용하는 것이 좋다. 그것이 해당 data가 어떤 타입인지 확실히 이해할 수 있기 때문이다.&lt;br /&gt;
	&amp;nbsp;&lt;br /&gt;&lt;/p&gt;
	
&lt;p&gt;
	추가로 유용한 기능을 한가지 더 보고 나서 배열에 대한 이야기 #1을 일단 마무리하고자 한다. 배열의 크기를 확인하려면 어떻게 해야할 까? 매우 간단하게도 배열변수 이름에 @가 아닌 $#으로 표기하면 해당 배열변수의 크기&lt;sup&gt;[2]&lt;/sup&gt;를 반환한다. code로 작성해보면 다음과 같다.&lt;br /&gt;
	&lt;pre class=&quot;ccode&quot;&gt;
#!/usr/bin/env perl
use strict;

my @empty= ();
my @stuff= (34, 56, &quot;Hellworld&quot;, &quot;Good day&quot;);
my @subStuff= @stuff[2 .. $#stuff];

print &quot;Size of Array, empty is &quot;.$#empty.&quot;\n&quot;;
print &quot;Size of Array, stuff is &quot;.$#stuff.&quot;\n&quot;;
print &quot;\n&quot;;
print @subStuff, &quot;\n&quot;;&lt;/pre&gt;
	물론 위 code의 결과는 다음과 같다.&lt;br /&gt;
	&lt;pre class=&quot;ccode&quot;&gt;
Size of Array, empty is -1
Size of Array, stuff is 2

HellworldGood day&lt;/pre&gt;
	&amp;nbsp;&lt;br /&gt;&lt;/p&gt;



&lt;p class=&quot;descOfSubDesc&quot;&gt;
	&lt;b&gt;[1]&lt;/b&gt; 각 elements를 변수로 저장하여 직접 하나씩 출력하지 않아도 가능한 방법이 있다. 배열을 문자열에 넣으면 해결된다. 예를 들면 my @stuff= qw(34 12 52 &quot;Hello&quot; &quot;World&quot;); 를 빈칸을 둬서 이쁘게 출력하고 싶다면, $string= &quot;@stuff&quot;; print $string;과 같은 방식을 사용하면 된다.&lt;br /&gt;
	&lt;b&gt;[2]&lt;/b&gt; 크기라기보다는 마지막 index를 나타낸다.&lt;br /&gt;
	&amp;nbsp; &lt;Br /&gt;&lt;/p&gt;
</description>
</item>

<item>
<title>Variable Scope</title>
<link>http://eriny.net/n/111</link>
<guid>http://eriny.net/n/111</guid>
<pubDate>Thu, 12 Jan 2012 16:01:43 +0900</pubDate>
<author>yuki.n.pl@eriny.net (yuki.n.pl)</author>
<category>Perl</category>
<comments>http://eriny.net/n/111#comment</comments>
<description>
&lt;p&gt;
	앞서 이야기한 것처럼 &lt;b&gt;use strict &quot;vars&quot;&lt;/b&gt;을 통과하기 위한 variable scope에 대한 설명이다. 이를 위한 keyword는 &lt;b&gt;my&lt;/b&gt;, &lt;b&gt;local&lt;/b&gt;, &lt;b&gt;our&lt;/b&gt;가 있다.&lt;br /&gt;
	&amp;nbsp;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;
	scope라는 단어의 뜻은 '활동 영역'과 같은 뜻도 가지고 있다. 변수에서 scope라는 이야기를 할 때에는 해당 변수가 어느 범위에서 유요한지, 쉽게 말하면 어디에서 태어나서 어디에서 죽게 되는지에 대한 이야기를 하는 것이다. scope에 대해 설명하기 전에 지금까지 작성하던 방식대로의 code의 경우부터 살펴보도록 하자.&lt;br /&gt;
	&amp;nbsp;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;
	&lt;pre class=&quot;ccode&quot;&gt;
#!/usr/bin/env perl

$x= 1;
print $x;&lt;/pre&gt;
	위 code를 실행하게 되면 화면에 '1'이 출력되게 된다. 여기에서 변수 x는 전역변수(global variable)에 해당된다. 전역변수는 처음 명시된 곳에서 시작해서 어느 곳에서나 사용할 수 있는 변수를 말한다. 따라서 전역변수의 scope는 명시된 곳에서 부터 전체에 해당된다. 다른 말로 바꿔말하면 해당 program이 종료될 때까지 죽지 않고 계속 살아 있는 변수를 말한다.&lt;br /&gt;
	&amp;nbsp;&lt;br /&gt;&lt;/p&gt;
	
&lt;p&gt;
	전역변수의 경우 use strict를 통과하기 위해서 'our'이라는 keyword를 통해서 명시해주어야 한다. 따라서 위의 code는 아래와 같이 수정된다.&lt;br /&gt;
	&lt;pre class=&quot;ccode&quot;&gt;
#!/usr/bin/env perl
use strict;

our $x= 1;
print $x;&lt;/pre&gt;
	&amp;nbsp;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;
	전역변수와 같이 code의 전역에서 유효한 변수가 있는 것처럼 특정 scope내에서만 유요한 변수도 존재한다. 이를 위하여 scope를 설명하면서 동시에 keyword 'my', 'local'에 대해서도 설명한다. &lt;sup&gt;[1]&lt;/sup&gt;&lt;br /&gt;
	&amp;nbsp;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;
	&lt;pre class=&quot;ccode&quot;&gt;
#!/usr/bin/env perl
use strict;

our $pi= 3.14159;

{
  my $pi= 3.14;
  print $pi.&quot;\n&quot;;
  print $::pi.&quot;\n&quot;;
}

print $pi.&quot;\n&quot;;
print $::pi.&quot;\n&quot;;&lt;/pre&gt;
	perl 에서는 '{', '}' 를 통하여 새로운 scope를 만들 수 있다. 위의 code에서 my $pi의 경우 선언된 곳 부터 자신이 포함된 scope 그러니까 'print$::pi.&quot;\n&quot;'; 이 끝나는 부분까지만 유요하다. 위 code의 $pi처럼 지역에만 적용되는 변수를 지역변수(lexical variable or local variable)라고 하고 앞에 'my'를 붙여준다.&lt;br /&gt;
	위 code를 이해하기 위해서는 하나 더 알아둬야하는데 '$::pi'라고 표기한 부분이다. 동일한 이름이 존재하면 해당 scope에 있는 지역변수가 우선권이 있기 때문에 전역변수를 사용하려고 다음과 같이 표기한 것이다. 따라서 위 code의 결과는 다음과 같다.&lt;br /&gt;
	&lt;pre class=&quot;ccode&quot;&gt;
3.14
3.14159
3.14159
3.14159&lt;/pre&gt;
	&amp;nbsp;&lt;br /&gt;&lt;/p&gt;
	
&lt;p&gt;
	다만 지역변수를 표시하기 위한 keyword가 'local'도 존재한다고 했다. 'my'와의 차이점을 확인하기 위하여 위에서 작성했던 code 중 지역변수 'pi'를 keyword 'local'을 사용하여 선언해보도록 하자.&lt;br /&gt;
	&lt;pre class=&quot;ccode&quot;&gt;
#!/usr/bin/env perl
use strict;

our $pi= 3.14159;

{
  local $pi= 3.14;
  print $pi.&quot;\n&quot;;
  print $::pi.&quot;\n&quot;;
}

print $pi.&quot;\n&quot;;
print $::pi.&quot;\n&quot;;&lt;/pre&gt;
	위 code의 결과를 보고나면 쉽게 이해할 수 있다.&lt;br /&gt;
	&lt;pre class=&quot;ccode&quot;&gt;
3.14
3.14
3.14159
3.14159&lt;/pre&gt;
	두 번째 출력 값이 전역변수의 값임에도 불구하고 지역변수의 값이 출력되었다. keyword 'local'은 'my'와 달리 해당 scope내에서 동일한 이름의 변수의 값을 임시로 변경한다. 따라서 위와 같은 결과가 나타난 것이다.&lt;br /&gt;
	&amp;nbsp;&lt;br /&gt;&lt;/p&gt;
	
&lt;p&gt;
	마지막으로 perl code는 처음과 끝이 '{', '}' 존재한다고 생각할 수 있으며, 따라서 '{', '}'를 통하여 생성된 lexical scope나 (나중에 알아볼) subroutine이 아니더라도 'my'를 사용할 수 있다.&lt;br /&gt;
	&amp;nbsp;&lt;br /&gt;&lt;/p&gt;
	
&lt;p class=&quot;descOfSubDesc&quot;&gt;
	&lt;b&gt;[1]&lt;/b&gt; 'my'와 'local'의 차이를 설명하기 위하여 &lt;a href=&quot;http://www.perlmonks.org/?node_id=94007&quot;&gt;http://www.perlmonks.org/?node_id=94007&lt;/a&gt; 의 code를 인용하였다.&lt;br /&gt;
	&amp;nbsp;&lt;br /&gt;&lt;/p&gt;
</description>
</item>

<item>
<title>use strcit</title>
<link>http://eriny.net/n/110</link>
<guid>http://eriny.net/n/110</guid>
<pubDate>Thu, 12 Jan 2012 14:02:12 +0900</pubDate>
<author>yuki.n.pl@eriny.net (yuki.n.pl)</author>
<category>Perl</category>
<comments>http://eriny.net/n/110#comment</comments>
<description>
&lt;p&gt;
	잘 작성된 perl code를 살펴보면 code 상단에 &lt;b&gt;use strict;&lt;/b&gt; 이라고 작성된 부분을 쉽게 볼 수 있다.&lt;br /&gt;
	&amp;nbsp;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;
	이 것은 perl의 문법을 엄격히 지키도록 규제하여 프로그램을 좀 더 정확하게 작성할 수 있도록 도와는 역활을 한다. 따라서 code를 작성할 때 use strict를 사용하여 code를 작성하는 것이 좋다. 간단히 이야기하면 문법점검을 위하여 사용한다고 생각하면 된다.&lt;br /&gt;
	&amp;nbsp;&lt;br /&gt;&lt;/p&gt;
	
&lt;p&gt;
	따라서 앞으로 진행되는 perl을 주제로 한 모든 글에 use strict를 사용할 것이다.&lt;br /&gt;
	다만, use strict는 단순히 'use strict'로 명시하여 사용할 수도 있지만, 뒤에 &lt;b&gt;&quot;vars&quot;, &quot;refs&quot;, &quot;subs&quot;&lt;/b&gt;를 붙여서 부분적인 적용을 할 수도 있는데 이를 이해하기 위하여서는 더욱 더 많은 설명을 해야할 필요가 있다. &lt;br /&gt;
	&amp;nbsp;&lt;br /&gt;&lt;/p&gt;
	
&lt;p&gt;
	&lt;b&gt;&quot;vars&quot;&lt;/b&gt;를 위해서는 변수의 선언에 대한 추가적인 이해가 필요하며, &lt;b&gt;&quot;refs&quot;&lt;/b&gt;의 경우는 reference를 이해한 후에 사용할 수 있고 &lt;b&gt;&quot;subs&quot;&lt;/b&gt;의 경우 subroutine에 대한 이해가 필요하다. 이 이야기는 use strict만 명시하는 경우 &quot;vars&quot;, &quot;refs&quot;, &quot;subs&quot; 모두가 적용된 것을 말 하는 것이기 때문에 당분간의 사용이 힘들다. &lt;br /&gt;
	&amp;nbsp;&lt;br /&gt;&lt;/p&gt;
	
&lt;p&gt;
	따라서 다음 글에서는 변수 선언에 대해 추가적인 설명을 덧붙이면서 앞으로의 글에서는 기본적으로 &lt;b&gt;use strict &quot;vars&quot;&lt;/b&gt;를 사용하여도 문제없도록 작성될 것이며, &lt;b&gt;use strict&lt;/b&gt; 명시할 것이다.&lt;br /&gt;
	&amp;nbsp;&lt;br /&gt;&lt;/p&gt;
	

</description>
</item>

<item>
<title>WiFly Shield Test</title>
<link>http://eriny.net/n/109</link>
<guid>http://eriny.net/n/109</guid>
<pubDate>Wed, 11 Jan 2012 22:00:09 +0900</pubDate>
<author>yuki.n.pl@eriny.net (yuki.n.pl)</author>
<category>Arduino</category>
<comments>http://eriny.net/n/109#comment</comments>
<description>
&lt;p&gt;
	&lt;img src=&quot;http://eriny.net/pic/2012/20120111/IMG_20120111_212102.jpg&quot;&gt;&lt;/img&gt;&lt;br /&gt;
	&amp;nbsp;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;
	매번 함께 올리는 사진에 UNO 혼자 만이 아닌 WiFly Shield가 함께 붙어 있는 사진을 매번 올려놓고서는 이제야 Test해 보았다. 일단 당장 만들어보고 싶은 것이 있는데 간단하지만 별도의 Protocol을 설계할 필요가 있는 것이기 때문에 WiFly Shield를 제대로 쓸 필요가 있다. 여러 sample code들을 돌려보면서 마지막으로 간단히 수정하여 다음과 같이 sketch해 봤다. (code는 gitHub link로 대체한다.) &lt;br /&gt;
	&amp;nbsp;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;
	해당 code를 가지고 다음과 같은 결과를 얻었다.&lt;br /&gt;
	(결과는 매우 길기 때문에 아랫부분은 생략하였다.)&lt;br /&gt;
	&lt;pre class=&quot;ccode&quot;&gt;
Open serial connection
Attempting to connect to SPI UART for WiFi
Associated
connected to eriny.net
HTTP/1.1 200 OK
Date: Wed, 11 Jan 2012 12:43:02 GMT
Server: Apache
X-Powered-By: PHP/5.3.3
Connection: close
Content-Type: text/html; charset=UTF-8
Content-Language: en

&amp;lt;!DOCTYPE html&gt;
&amp;lt;!--
	nTree
	Ver 0.8.6 | 2011.10.04
--&gt;
&amp;lt;html&gt;

&amp;lt;head&gt;&lt;/pre&gt;
	&amp;nbsp;&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;descOfSubDesc&quot;&gt;
	Github: &lt;a href=&quot;https://gist.github.com/1620823&quot;&gt;https://gist.github.com/1620823&lt;/a&gt;&lt;br /&gt;
	&amp;nbsp;&lt;br /&gt;&lt;/p&gt;
</description>
</item>

</channel>

</rss>
