<?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>Sat, 19 May 2012 07:55:20 +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 #3 - two-dimensional array with reference</title>
<link>http://eriny.net/n/146</link>
<guid>http://eriny.net/n/146</guid>
<pubDate>Thu, 17 May 2012 21:54:30 +0900</pubDate>
<author>yuki.n.pl@eriny.net (yuki.n.pl)</author>
<category>Perl</category>
<comments>http://eriny.net/n/146#comment</comments>
<description>
&lt;p&gt;
	Perl은 1차원 배열(one-dimensional array)만 존재한다. 그래서 2차원 이상의 배열을 사용하려면 스스로 만들어내야한다. 여기서 2차원 배열(two-dimensional array)을 만들어 보도록 하자.&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 @numbers= ( [  1,  2,  3,  4,  5 ],
               [ 11, 12, 13, 14, 15 ],
               [ 21, 22, 23, 24, 25 ],
               [ 31, 32, 33, 34, 35 ],
               [ 41, 42, 43, 44, 45 ],
               [ 51, 52, 53, 54, 55 ] );

print $numbers[4][1], &quot;\n&quot;;&lt;/pre&gt;
	위와 같은 방법으로 표현해서 만들어낼 수 있으며, 사용할 수 있다.&lt;br /&gt;
	물론 2차원 배열은 각 행이 하나의 reference로 이루어졌기 때문에 아래와 같은 표현이 가능하다.&lt;br /&gt;
	&lt;pre class=&quot;ccode&quot;&gt;
$row1= $numbers[1];&lt;/pre&gt;
	&amp;nbsp;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;
	앞에서 array를 설명할 때 reference 하는 방법 뿐만 아니라 dereferencing하는 방법을 소개했다. 이해가 가지 않는다면 다시 유심히 들여다 보도록 하자.!&lt;br /&gt;
	&amp;nbsp;&lt;br /&gt;&lt;/p&gt;
</description>
</item>

<item>
<title>Trojan Horse on Mac OS X</title>
<link>http://eriny.net/n/139</link>
<guid>http://eriny.net/n/139</guid>
<pubDate>Fri, 06 Apr 2012 13:24:41 +0900</pubDate>
<author>yuki.n.pl@eriny.net (yuki.n.pl)</author>
<category>Apple</category>
<comments>http://eriny.net/n/139#comment</comments>
<description>
&lt;p&gt;
	&lt;img src=&quot;http://eriny.net/pic/2012/20120406/Screen Shot 2012-04-06 at 1.15.06 PM.png&quot;&gt;&lt;/img&gt;&lt;br /&gt;
	&amp;nbsp;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;
	link: &lt;a href=&quot;http://erin.is/lTx3j49&quot;&gt;http://erin.is/lTx3j49&lt;/a&gt;&lt;br /&gt;
	위 링크는 &lt;a href=&quot;http://bloter.net&quot;&gt;bloter.net&lt;/a&gt;의 기사로 Mac OS X에 트로이 목마가 등장했다는 사실을 알리는 기사다. 기사에 의하면 Java의 취약점을 이용하여 감염시키기고 사용자 정보를 수집한다고 하는데 이미 55만대 이상의 Mac이 감염되었다고 한다. 위 그림의 Update를 통해서 일단은 해결할 수 있다고 하는데, 애당초 이건 예상되었던 것 아닌 가? 싶다.&lt;br /&gt;
	&amp;nbsp;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;
	Mac을 사용하면서 Malware로부터 멀어질 수 있었던 이유는 단지 사용자가 적어서 Malware 제작자로부터의 시선 밖에 머물렀을 뿐이였던 것 아닌가? 자연스럽게 사용자가 늘어가면서, 아니 Apple의 선전을 보면서 시선 안으로 들어왔기 때문에 이제 시작된 것이라고 생각한다.&lt;br /&gt;
	&amp;nbsp;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;
	단지 이제는 PC를 사용할 때처럼 다양한 malware로부터 보호하기 위하여 신경써야만 하는 거겠지..&lt;br /&gt;
	&amp;nbsp;&lt;br /&gt;&lt;/p&gt;
</description>
</item>

<item>
<title>Reference #2 - for array variable and data</title>
<link>http://eriny.net/n/136</link>
<guid>http://eriny.net/n/136</guid>
<pubDate>Wed, 21 Mar 2012 17:30:52 +0900</pubDate>
<author>yuki.n.pl@eriny.net (yuki.n.pl)</author>
<category>Perl</category>
<comments>http://eriny.net/n/136#comment</comments>
<description>
&lt;p&gt;
	기본적으로 scalar variable을 다뤘던 것과 동일하게 다음과 같은 표현으로 array도 reference할 수 있다.&lt;br /&gt;
	&lt;pre class=&quot;ccode&quot;&gt;
$ref= \@numbers;&lt;/pre&gt;
	array reference는 '[', ']'를 사용하여 생성할 수도 있다. 또한 '@'을 사용하여 dereferencing 가능하다. 추가적으로 $$ref[5]와 $ref-&gt;[5]는 동일한 의미를 갖는 표현이다.&lt;br /&gt;
	&amp;nbsp;&lt;br /&gt;&lt;/p&gt;
	
&lt;p&gt;
	아래의 code에서 4, 5번째 라인의 code는 주석으로 붙여놓은 2줄과 맞교환 가능한 표현이라 할 수 있다.&lt;br /&gt;
	&lt;pre class=&quot;ccode&quot;&gt;
#!/usr/bin/env perl
use strict;

my $ref= [ 0 .. 10 ];    # @numbers= ( 0 .. 10 );
my @numbers= @$ref;      # $ref= \@numbers;

my $element5= @{$ref}[5];

print $numbers[5], &quot;\n&quot;;
print $element5, &quot;\n&quot;;
print $$ref[5], &quot;\n&quot;;
print $ref-&gt;[5], &quot;\n&quot;;

$$ref[5]= 10;
$ref-&gt;[5]= 9;

print $$ref[5], &quot;\n&quot;;&lt;/pre&gt;
	&amp;nbsp;&lt;br /&gt;&lt;/p&gt;
	
&lt;p&gt;
	앞선 글(&lt;a href=&quot;http://eriny.net/n/131&quot;&gt;Reference #1 - intro + for scalar variable and data&lt;/a&gt;)에서 이야기를 꺼냈던 array에 array를 붙이려면 다음과 같은 방법을 이용하여 해결한다.&lt;br /&gt;
	&lt;pre class=&quot;ccode&quot;&gt;
my @numbers1= ( 0 .. 10 );
my @numbers2= ( 11 .. 20 );
my $ref= \@number2;

push @numbers1, $ref;&lt;/pre&gt;
	다만 이 방법은 numbers1의 element로서 array reference를 포함시킨 것이지, array가 포함된 것이 아님을 기억해야한다. 그렇기 때문에 아래와 같은 표현으로는 의도한 결과를 볼 수가 없다.&lt;/br&gt;
	&lt;pre class=&quot;ccode&quot;&gt;
print @numbers1;&lt;/pre&gt;
	아래와 같이 출력될 뿐임을 기억해야한다.
	&lt;pre class=&quot;ccode&quot;&gt;
012345678910ARRAY(0x7fba8b834998)&lt;/pre&gt;
	다음과 같이 수정하면 우리가 원하는 결과를 얻을 수 있다.&lt;br /&gt;
	&lt;pre class=&quot;ccode&quot;&gt;
push @numbers1, @$ref;
print @numbers1;&lt;/pre&gt;
	&amp;nbsp;&lt;br /&gt;&lt;/p&gt;
</description>
</item>

<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 앞에 $를 붙임으로써 가능해진다. 이 것을 Dereferencing이라고 한다. 위 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>

</channel>

</rss>
