Home Map Index Search News Archives Links About LF
[Top bar]
[Bottom bar]
[Photo of the Author]
±Û¾´ÀÌ Guido Socher

±Û¾´ÀÌ ¼Ò°³:

Guido´Â ¿À·§µ¿¾È ¸®´ª½º ÆÒÀ̾ú°í Perl ÇÙÄ¿¿´´Ù. ¿äÁò ±×´Â ÁýÀ» »õ·Ó°Ô ´ÜÀåÇÏ°í Á¤¿ø¿¡ »ø·¯µå¿Í ´Ù¸¥ °ÍµéÀ» ½É¾î Å°¿ì´Âµ¥ ¹«Ã´ ¹Ù»Ú´Ù.

Â÷·Ê:

Perl µÎ¹ø°

[Illustration]

¿ä¾à:

Perl ù¹ø°¿¡¼­´Â ÆÞÀÇ ÀϹÝÀûÀÎ ³»¿ëÀ» »ìÆ캸¾Ò´Ù. perl part II¿¡¼­´Â ù¹ø° ½ÇÁ¦ÀûÀÎ ÇÁ·Î±×·¥À» ÀÛ¼ºÇÑ´Ù.



´ç½ÅÀÇ ÇÁ·Î±×·¥ ±¸Á¶

ÆÞÀº ƯȭµÈ ÇÑ Å½ºÅ©ÀÇ ÀÛÀº ÇÁ·Î±×·¥À» ÀÛ¼ºÇϴµ¥ ÃÖ¼±ÀÇ ¼±ÅÃÀÌ´Ù. ´ëºÎºÐÀÇ ÇÁ·Î±×·¥µé¿¡¼­ ´ç½ÅÀÌ ÇÏ·Á°í ÇÏ´Â ±â´ÉÀ̳ª ¸î¸îÀÇ °£´ÜÇÑ ±¸Á¶¸¦ Á¦°øÇϴ ƲÀ» ¼ÕÀ¸·Î ±×·Áº¸´Â ÀÏÀº °³¹ß ÇÁ·Î¼¼½ºÀÇ ¼ÓµµÇâ»óÀ» À§Çؼ­ ¸Å¿ì ÁÁÀº »ý°¢ÀÌ´Ù. ´ÙÀ½ÀÇ code templateÀº °£´ÜÇÑ ¿É¼Ç ¸í·É¾î¿Í µµ¿ò¸»À» ÇÁ¸°Æ®ÇÏ´Â ¼­ºê·çƾÀ» Á¦°øÇÑ´Ù.
 
!/usr/bin/perl -w
# vim: set sw=8 ts=8 si et:
#
# uncomment strict to make the perl compiler very
# strict about declarations:
#use strict;
# global variables:
use vars qw($opt_h);
use Getopt::Std;
#
&getopts("h")||die "ERROR: No such option. -h for help\n";
&help if ($opt_h);
#
#>>your code<<
#
#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
sub help{
print "help message\n";
exit;
}
#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
__END__

Äڵ带 º¸¸é &getopts()´Â ¸í·É¾î ¿É¼ÇÀ» Àбâ À§ÇØ ¶óÀ̺귯¸® Getopt::Std ¿¡ ÀÖ´Â ¼­ºê·çƾÀ» È£ÃâÇÑ´Ù. ÀÌ ÇÔ¼ö´Â ¸í·É¾î ¿É¼Ç¿¡ ÀÇÇØ Á¦°øµÈ Àü¿ª º¯¼ö $opt_<option>¸¦ ¼³Á¤ÇÑ´Ù. ¸í·É¾î »óÀÇ ¸ðµç ¿É¼ÇÀº "-" (minus sign)À¸·Î ½ÃÀÛÇÏ°í ÇÁ·Î±×·¥ À̸§°ú ´Ù¸¥ º¯¼ö »çÀÌ¿¡ ¿Â´Ù. (Note: ÀÌ°ÍÀº ÀϹÝÀûÀÎ Unix ±ÔÄ¢ÀÌ´Ù.) &getopts¿¡ ÁÖ¾îÁø ¹®ÀÚ¿­(À§ÀÇ ÇÁ·Î±×·¥¿¡¼­´Â "h")Àº ÇÁ·Î±×·¥ÀÌ Çã¿ëÇÏ´Â ¸ðµç ¿É¼ÇÀ» ³ª¿­ÇÏ°í, ¸¸¾à ¿É¼ÇÀÌ ÄÝ·ÐÀ¸·Î µÈ º¯¼ö¸¦ °¡Áö°í ÀÖ´Ù¸é ¿É¼Ç ¹®ÀÚ´Â ¹Ýµå½Ã Äݷеڿ¡ ÀÖ¾î¾ß ÇÑ´Ù. &getsopt("d:x:h")´Â ÇÁ·Î±×·¥ÀÌ -d, -x, -h¶ó´Â ¿É¼ÇÀ» °¡Áö°í ÀÖ´Ù´Â ÀǹÌÀÌ´Ù. ¿É¼Ç -d¿Í -x´Â ¾Æ±Ô¸ÕÆ®¸¦ °¡Áö°í Àֱ⠋š¹®¿¡ "-o somgthing"Àº ¸Â´Â °ÍÀÌÁö¸¸ "-o -x foo"´Â -o µÚ¿¡ ¾Æ±Ô¸ÕÆ®°¡ ¾ø±â ¶§¹®¿¡ Ʋ¸°°ÍÀÌ´Ù.
¸¸¾à ¿É¼Ç -h°¡ ¸í·É¾î¿¡¼­ ÁÖ¾îÁø´Ù¸é $opt_hº¯¼ö´Â &help·Î Á¤ÇØÁø´Ù. ±×¸®°í ($opt_h);´Â help·Î Á¤ÇØÁö¹Ç·Î ¿É¼Ç -h°¡ ¸í·É¾î¿¡¼­ ÁÖ¾îÁö¸é ¼­ºê·çƾ help°¡ ºÒ·ÁÁø´Ù°í ÇÒ ¼ö ÀÖ´Ù. sub help{¹®ÀåÀº ¼­ºê·çƾÀ» ¼±¾ðÇÏ´Â °ÍÀÌ´Ù. Áö±Ý À̼ø°£ ÀÌ ¸ðµç ÄÚµåÀÇ ÀÚ¼¼ÇÑ ºÎºÐÀ» ÀÌÇØÇÏ´Â °ÍÀ» Áß¿äÄ¡ ¾Ê´Ù. ´ÜÁö ÇÊ¿äÇÒ¶§ ´ç½ÅÀÇ ÁÖ¿ä ±â´É¿¡ ÀÌ templateÀ» »ç¿ëÇÒ ¼ö ÀÖÀ¸¸é µÈ´Ù.

template »ç¿ëÇϱâ

ÀÌ ±¸Á¶¸¦ »ç¿ëÇÏ¿© ÀÛÀº ¼ö º¯È¯±â¸¦ ¸¸µé¾î º¸ÀÚ. 16Áø¼ö¸¦ 10Áø¼ö·Î º¯È¯½ÃÅ°´Â ÀÌ ÇÁ·Î±×·¥ÀÇ À̸§À» numconv¶ó°í ÇÑ´Ù.
numconv -x 30 10Áø¼ö 30°ú °°Àº 16Áø¼ö¸¦ ÇÁ¸°Æ® ÇÑ´Ù.
numconv -d 1A 16Áø¼ö 1A¿Í °°Àº 10Áø¼ö¸¦ ÇÁ¸°Æ® ÇÑ´Ù.
numconv -h µµ¿ò¸»À» ÇÁ¸°Æ® ÇÑ´Ù.
ÆÞ ÇÔ¼ö hex()´Â 16Áø¼ö¸¦ 10Áø¼ö·Î ¹Ù²Ù°í printf()´Â 10Áø¼ö¸¦ 16Áø¼ö·Î ¹Ù²Ù´Âµ¥ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ÀÌ ÇÔ¼öµéÀ» ¿ì¸®ÀÇ templateÁý¾î ³ÖÀ¸¸é ÈǸ¢ÇÑ ÇÁ·Î±×·¥ÀÌ µÉ °Í ÀÌ´Ù.
 
#!/usr/bin/perl -w
# vim: set sw=8 ts=8 si et:
#
# uncomment strict to make the perl compiler very
# strict about declarations:
#use strict;
# global variables:
use vars qw($opt_d $opt_x $opt_h);
use Getopt::Std;
#
&getopts("d:x:h")||die "ERROR: No such option. -h for help\n";
&help if ($opt_h);
if ($opt_d && $opt_x){
    die "ERROR: options -x and -d are mutual exclusive.\n";
}
if ($opt_d){
    printf("decimal: %d\n",hex($opt_d));
}elsif ($opt_x){
    printf("hex: %X\n",$opt_x);
}else{
    # wrong usage -d or -x must be given:
    &help;
}
#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
sub help{
    print "convert a number to hex or dec.
USAGE: numconv [-h] -d hexnum
    umconv [-h] -x decnum

OPTIONS: -h this help
EXAMPLE: numconv -d 1af
\n";
    exit;
}
#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
__END__

À§ÀÇ numconvÇÁ·Î±×·¥À» ´Ù¿î·Îµå ¹ÞÀ¸·Á¸é Ŭ¸¯ÇϽÿÀ.
´ÙÀ½ Àå¿¡¼­´Â ¿ì¸®´Â ÀÌ ÇÁ·Î±×·¥¿¡ ´ëÇØ ´õ¿í Ä£¼÷ÇØÁú°ÍÀÌ´Ù. ÀÌÇØÇØ µÎ±â¸¦ ¹Ù¶õ´Ù.

If-¹®Àå

ÆÈ¿¡´Â 2°¡Áö Çü½ÄÀÇ if ¹®ÀåÀÌ ÀÖ´Ù.:
expr if (cond);
or
if (cond) BLOCK [[elsif (cond) BLOCK ...] else BLOCK]

BLOCKÀº {}¾È¿¡ ÀÖ´Â ¹®ÀåÀÇ ¼ö¸¦ ÀǹÌÇÑ´Ù. ÀÌ°ÍÀº If¹®ÀåÀÌ ´ÙÀ½°ú °°ÀÌ ¾²ÀÏ ¼ö ÀÖ´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù.:
 

printf("hello\n") if ($i);

if ($i == 2){
   printf("i is 2\n");
}elsif ($i == 4){
   printf("i is 4\n");
}else{
   printf("i is neither 2 nor 4\n");
}

ÆÞ¿¡¼­µµ C¿¡¼­ ¾²´Â °Íó·³ && ¿Í || ¿¬»êÀÚ¸¦ ¾µ ¼ö ÀÖ´Ù.
printf("hello\n") if ($i);
À§¿Í °°Àº ÄÚµå´Â ¾Æ·¡¿Í °°ÀÌ ¾²ÀÏ ¼ö ÀÖ´Ù.
($i) && printf("hello\n");
Ưº°È÷ ||´Â template¾È¿¡¼­ ³¡ÀÌ ³­ ¹®Àå¾È¿¡ ¾² ÀÏ ¼ö ÀÖ´Ù.
&getopts("d:x:h")||die "ERROR\n";
"¿É¼ÇÀÌ ÀÖÀ¸¸é °¡Á®¿À°í ¾øÀ¸¸é ³¡³­´Ù.". die() ÇÔ¼ö´Â ±âº»ÀûÀ¸·Î ÇÁ·Î±×·¥À» ³¡³»°í ÇÁ¸°Æ® ¹®À» ¼öÇàÇÏ´Â °Í°ú °°Àº ±â´ÉÀ» ÇÑ´Ù. ÀÌ ÇÔ¼ö´Â ¸Þ½ÃÁö¸¦ ÇÁ¸°Æ®ÇÏ°í ÇÁ·Î±×·¥À» ³¡³»°Ô µÈ´Ù.
&getopts("d:x:h")||die "ERROR\n";
ÀÌ°ÍÀº ´ÙÀ½°ú °°Àº ¹®ÀåÀÌ´Ù.
die "ERROR\n"; if (! &getopts("d:x:h"));
"!"Àº ³í¸®ÀûÀ¸·Î ºÎÁ¤ ¿¬»êÀÚÀÌ´Ù. ´Ù½Ã ÀÌ°ÍÀº ´ÙÀ½°ú °°ÀÌ ¾²ÀÏ ¼ö ÀÖ´Ù.
die "ERROR\n"; unless (&getopts("d:x:h"));
unless´Â if-not°ú °°Àº °ÍÀÌ°í if(!..) º¸´Ù ÀбⰡ ÆíÇÏ´Ù.

´ç½ÅÀÌ º»°Í°ú °°ÀÌ ÆÞ¿¡¼­´Â if-¹®ÀåÀ» ¾²´Âµ¥ ÇÑ°¡Áö ¹æ¹ýÀÌ Àִ°ÍÀÌ ¾Æ´Ï´Ù. ÀÌ ¸ðµç ¹æ¹ýÀ» ´Ù ¾µ ÇÊ¿ä´Â ¾ø°í, ´ç½ÅÀÌ ¾²±â¿¡ ÆíÇÑ ¹æ¹ýÀ» ¾²¸é µÈ´Ù.

º¯¼ö

ù¹ø° ±Û ¿¡¼­ ¿ì¸®´Â ¼±¾ð ¾ÈÇÏ°í ¾²ÀÌ´Â scalar º¯¼ö($-º¯¼ö)¸¦ ºÃ¾ú´Ù. ÀÌ º¯¼öµéÀº »ç¿ëµÇ´Â ¼ø°£¿¡ Á¸ÀçÇÏ°Ô µÈ´Ù. ÀÌ°ÍÀº ÀÛÀº ÇÁ·Î±×·¥¿¡¼­´Â ¾ÆÁÖ ÁÁÀº ±â´ÉÀÌÁö¸¸ Å« ÇÁ·Î±×·¥¿¡¼­´Â ã±â Èûµç ¿¡·¯¸¦ À¯¹ß ½Ãų ¼ö ÀÖ´Ù. º¯¼öÀÇ ¼±¾ðÀº ÄÄÆÄÀÏ·¯¿¡°Ô ŸÀÔ ¿¡·¯¸¦ ýũÇÏ°ÔÇÏ¿© ÀÌ·± °¡´É¼ºÀ» ÁÙ ÀÏ ¼ö ÀÖ´Ù.
"use strict;"´Â ¸ðµç º¯¼ö°¡ ¼±¾ðµÇµµ·Ï ÇÑ´Ù. 
´ÙÀ½°ú °°Àº Á¤È®ÇÑ Äڵ带 ¿¹¸¦ º¸À̸é:
#!/usr/bin/perl
use strict;
my $i=1;
print "i is $i\n";

ÀÌ ÇÁ·Î±×·¥Àº Á¤È®ÇÏ°í i´Â 1À̶ó´Â °á°ú¸¦ Ãâ·ÂÇÑ´Ù. ÀÌÁ¦ ½Ç¼ö¿¡ ÀÇÇØ i ´ë½Å¿¡ j¸¦ ½è´Ù°í »ý°¢Çϸé:

#!/usr/bin/perl
#
$i=1;
print "i is $j\n";

ÀÌ ÄÚµå´Â ÆÞ¿¡¼­ Àß ¼öÇàµÉ°ÍÀÌ°í "i is "¶ó´Â °á°ú¸¦ Ãâ·ÂÇÑ´Ù. ÆÞ ¸ðµâ "use strict;"´Â ÄÄÆÄÀÏ·¯¿¡°Ô ÀÌ·¯ÇÑ ÇÁ·Î±×·¥ÀÌ À߸ø‰ç´Ù´Â °ÍÀ» ¾Ë¸°´Ù. "strict"¸¦ ¾µ¸é ¸ðµç º¯¼ö´Â ¼±¾ðµÇ¾ß µÇ°í À§ÀÇ ÇÁ·Î±×·¥Àº ¿¡·¯ ¸Þ½ÃÁö°¡ Ãâ·ÂµÈ´Ù.
 

#!/usr/bin/perl
use strict;
my $i=1;
print "i is $j\n";

ÀÌ ÇÁ·Î±×·¥Àº ´ÙÀ½°ú °°Àº ¸Þ½ÃÁö¸¦ Ãâ·ÂÇÏ°í ¿¡·¯ Ãâ·ÂÀ» ½±°Ô ÇÑ´Ù.

Global symbol "$j" requires explicit package name at ./vardec line 4.
Execution of ./vardec aborted due to compilation errors.
Exit 255
ÆÞ¿¡¼­ º¯¼ö´Â "my"¸¦ »ç¿ëÇÏ¿© ¼±¾ðµÇ°Å³ª framework¿¡¼­ º¸ÀΰͰú °°ÀÌ "use vars qw()"¸¦ »ç¿ëÇÏ¿© ¼±¾ðµÈ´Ù.:
use vars qw($opt_h);

Àü¿ª º¯¼ö´Â use vars¿¡ ÀÇÇØ ¼±¾ðµÈ´Ù. ÀÌ·¯ÇÑ º¯¼öµéÀº ¶óÀ̺귯¸®¸¦ Æ÷ÇÔÇÏ´Â ¸ðµç Äڵ忡¼­ Àü¿ªÀûÀÌ´Ù.
ÇöÀç ÇÁ·Î±×·¥ È­ÀϾȿ¡¼­ Áö¿ªÀûÀÎ º¯¼ö(È­ÀϾÈÀÇ ¸ðµç ¼­ºê·çƾ¾È¿¡¼­´Â Àü¿ªÀûÀÌ´Ù.)´Â ¼­ºê·çƾ ¹Ù±ùÀÇ ÇÁ·Î±×·¥ÀÇ ½ÃÀۺκп¡ my ¸¦ »ç¿ëÇÏ¿© ¼±¾ðµÈ´Ù.
ÇöÀç ¼­ºê·çƾ ¾È¿¡¼­ Áö¿ªÀûÀÎ º¯¼ö´Â ¼­ºê·çƾ ¾È¿¡¼­ my¸¦ »ç¿ëÇÏ¿© ¼±¾ðµÈ´Ù.

»ç¶÷µéÀº ½© ÇÁ·Î±×·¡¹Ö¿¡¼­ º¯¼ö¸¦ ¼±¾ðÇϰųª °ªÀ» ÇÒ´çÇÒ ¶§ $ Ç¥½Ã¸¦ ¹«½Ã ÇÏ´Â °æÇâÀÌ ÀÖ´Ù. ÀÌ°ÍÀº ÆÞ¿¡¼­´Â ºÒ°¡´ÉÇÏ¸ç ½ºÄ®¶ó º¯¼ö¸¦ »ç¿ëÇÒ¶§´Â Ç×»ó $ Ç¥½Ã¸¦ ½á¾ßÇÑ´Ù.

±×¸®°í º¯¼ö¸¦ ¼±¾ðÇÒ¶§ °ªÀ» Á÷Á¢ ÇÒ´çÇÒ¶§µµ ¾²ÀÏ ¼ö ÀÖ´Ù. my $myvar=10; ´Â $myvar¸¦ ¼±¾ðÇÏ°í ÀÌ º¯¼ö¿¡ ÃʱⰪÀ¸·Î 10À» ÇÒ´ç ÇÑ´Ù´Â ÀǹÌÀÌ´Ù.

¼­ºÎ·çƾ

¿ì¸®´Â À§ÀÇ numconv ÇÁ·Î±×·¥¿¡¼­ "help" ¼­ºê·çƾÀ» »ç¿ëÇÏ´Â °ÍÀ» ÀÌ¹Ì ¹è¿ü´Ù. ¼­ºê·çƾÀº ´ç½ÅÀÌ ¿øÇÏ´Â ±â´ÉÀ» ÇÁ·Î±×·¥Çϴµ¥ »ç¿ëµÉ ¼ö Àֱ⠶§¹®¿¡ ÀÌ·¯ÇÑ ¼­ºê·çƾÀÇ ±â´ÉÀº ÇÁ·Î±×·¥ ±¸Á¶¿¡ µµ¿òÀÌ µÉ °ÍÀÌ´Ù.
¼­ºê·çƾÀº ÇÁ·Î±×·¥¾È¿¡¼­ ¾î´À À§Ä¡¿¡µç »ðÀ﵃ ¼ö ÀÖ´Ù.(¼­ºê·çƾÀÌ È£ÃâµÇ±â ÀüÀ̵ç È£ÃâµÈ µÚ¿¡ ¾²¿©Áöµç »ó°üÀÌ ¾ø´Ù.) ¼­ºê·çƾÀº sub name(){... ·Î ½ÃÀÛµÇ°í ¼­ºê·çƾÀ» È£ÃâÇϱâ À§Çؼ­´Â $retval=&name(...arguments...) ¿Í °°Àº Çü½ÄÀ¸·Î È£ÃâÇØ¾ß ÇÑ´Ù. ¼­ºê·çƾ ¾È¿¡¼­ ¸¶Áö¸·À¸·Î ½ÇÇàµÈ ¹®ÀåÀÇ °ªÀº ¸®ÅÏ °ªÀÌ´Ù. ¼­ºê·çƾ¿¡ ÁÖ¾îÁø ¸Å°³º¯¼öµéÀº Ʊº°ÇÑ ¹è¿­ÀÎ @_¸¦ ÅëÇØ ¼­ºê·çƾ¾ÈÀÇ Äڵ忡°Ô Àü´ÞµÈ´Ù. ¹è¿­¿¡ ´ëÇØ ´õ ÀÚ¼¼ÇÑ ¼³¸íÀº ´ÙÀ½¹ø ¿¬Àç¿¡ °³Á¦µÉ ¿¹Á¤ÀÌ°í, Àá½Ã, ¼­ºê·çƾ ¾È¿¡¼­ shift¸¦ »ç¿ëÇØ ½ºÄ®¶ó º¯¼öÀÇ °ªÀ» Àд ¹æ¹ýÀ» ¾Ë¾Æº¸ÀÚ. ¿©±â¿¡ ¿¹Á¦ °¡ ÀÖ´Ù:
 
#!/usr/bin/perl
use strict;
my $result;
my $b;
my $a;
$result=&add_and_duplicate(2,3);
print "2*(2+3) is $result\n";

$b=5;$a=10;
$result=&add_and_duplicate($a,$b);
print "2*($a+$b) is $result\n";

# add two numbers and multiply with 2:
sub add_and_duplicate(){
    my $locala=shift;
    my $localb=shift;
    ($localb+$locala)*2;
}

½ÇÁ¦ ÇÁ·Î±×·¥

¸¹Àº ÆÞ ¹®¹ý°ú ÆÞ ¾ð¾îÀÇ ¸¹Àº ±¸¼º ¿ä¼Ò¸¦ ¹è¿î Áö±Ý, ÀÌÁ¦´Â ½ÇÁ¦ ÇÁ·Î±×·¥À» ÀÛ¼ºÇÒ ½Ã°£ÀÌ´Ù.
ÆÞÀº ÀÛÀº ÇÁ·Î±×·¡¹Ö ³ë·ÂÀ¸·Î ÅؽºÆ® È­ÀÏÀ» ´Ù·ç±â À§ÇØ µðÀÚÀÎ µÇ¾ú´Ù. ¿ì¸®ÀÇ Ã¹¹ø° ÆÞ ÇÁ·Î±×·¥Àº ¾à¾î ¸®½ºÆ®¸¦ ºñ±³Çؼ­ ¸®½ºÆ® ¾È¿¡¼­ Áߺ¹µÈ °ÍÀ» ã´Â ÇÁ·Î±×·¥ÀÌ´Ù. Áߺ¹À̶ó´Â °ÍÀº ¸®½ºÆ®¾È¿¡¼­ ¿©·¯¹ø ¹ß°ßµÇ´Â ¾à¾î¸¦ À̾߱â ÇÏ¸ç ±× ¸®½ºÆ®´Â ´ÙÀ½°ú °°ÀÌ Ç¥ÇöµÈ´Ù.:
ÆÞÀ» »ç¿ëÇؼ­ ÅؽºÆ® ÆÄÀÏÀ» ´Ù·ç´Â °ÍÀº ¸Å¿ì ½±´Ù.  
AC Access Class
AC Air Conditioning
AFC Automatic Frequency Control
AFS Andrew File System
...
±× ¸®½ºÆ® È­ÀÏÀº ÀÌ°÷¿¡¼­ ´Ù¿î·Îµå ÇÒ ¼ö ÀÖ´Ù. ÀÌ ÆÄÀÏÀÇ ¹®¹ýÀº ´ÙÀ½°ú °°´Ù.: ÀÌ ÅؽºÆ® ÆÄÀÏÀ» ¾î¶»°Ô ÀÐÀ» °ÍÀΰ¡? ¿©±â¿¡ ÁÙ´ÜÀ§·Î ÅؽºÆ®¸¦ ÀоîµéÀÌ´Â Äڵ尡 ÀÖ´Ù.:
 

....
open(FD,"abb.txt")||die "ERROR: can not read file abb.txt\n";
while(){
   #do something
}
close FD;
....

open ÇÔ¼ö´Â ÆÄÀÏ Áö½ÃÀÚ¸¦ ù¹ø° Àü´ÞÀÎÀÚ·Î °®°í ÆÄÀÏ À̸§À» µÎ¹ø° Àü´ÞÀÎÀÚ·Î °¡Áø´Ù. ÆÄÀÏ Áö½ÃÀڴ Ưº°ÇÑ º¯¼öÀÌ´Ù. ÀÌ°ÍÀ» openÇÔ¼ö¿¡ ¾²¸é ÇÔ¼ö ¾È¿¡¼­ ÆÄÀϾȿ¡¼­ ÀڷḦ ÀÐÀ» ¼ö ÀÖ°í, ¸¶Áö¸·À¸·Î close ÇÔ¼ö¿¡ Àü´ÞÇÑ´Ù. <FD>·Î ÆÄÀÏÀ» Àд °ÍÀÌ ³¡³ª¸é <FD>´Â while loop¿¡ ÀÎÀÚ·Î ÁÖ¾îÁú ¼ö ÀÖ°í ÀÌ°æ¿ì ÁÙ ´ÜÀ§·Î ÆÄÀÏÀ» Àдµ¥ »ç¿ëµÇ°Ô µÈ´Ù.
ÀüÅëÀûÀ¸·Î ÆÄÀÏ Áö½ÃÀÚ´Â ÆÞ¿¡¼­ ´ë¹®ÀڷΠǥ½ÃµÈ´Ù.

ÀÐÇôÁø ÀÚ·á´Â ¾îµð¿¡ ÀÖÀ»±î? ÆÞÀº ¸î°¡ÁöÀÇ ¹¬½ÃÀûÀÎ º¯¼ö¸¦ °¡Áö°í ÀÖ´Ù. ÀÌ·± º¯¼öµéÀº ¼±¾ð ¾øÀÌ ¾²À̴µ¥ Ç×»ó Á¸ÀçÇÑ´Ù. ±×Áß ÇÑ°¡Áö·Î $_ º¯¼ö°¡ ÀÖ´Ù. ÀÌ º¯¼ö´Â À§ÀÇ while loop¿¡¼­ ÇöÀç ÀоîµéÀÎ ÇÑ ¶óÀÎÀÇ Á¤º¸¸¦ °¡Áö°í ÀÖ´Ù. Çѹø ´ÙÀ½ÀÇ Äڵ带 ½ÇÇà Çغ¸±â¸¦:(ÄÚµå ¹Þ±â ):
 

#!/usr/bin/perl
use strict;
my $i=0;
open(FD,"abb.txt")||die "ERROR: can not read file abb.txt\n";
while(<FD>){
   # increment the line counter. You probably
   # know the ++ from C:
   $i++;
   print "Line $i is $_";
}
close FD;
¹¬½ÃÀûÀÎ º¯¼ö $_´Â ÇÑ ¶óÀÎÀ» °¡Áö°í ÀÖ´Ù.

º¸ÀÌ´Â °Íó·³ À§ÀÇ ÄÚµå´Â print "Line $i is $_ \n"¿Í °°ÀÌ ¾²ÀÌÁö ¾Ê¾Ò´Âµ¥, ÀÌ°ÍÀº $_ º¯¼ö°¡ ÅؽºÆ® È­ÀÏ ¾È¿¡¼­ °³Çà ¹®ÀÚ(\n)¸¦ °°ÀÌ ÀÐ¾î µé¿´±â ¶§¹®ÀÌ´Ù.

ÀÌÁ¦ ¿ì¸®´Â ÆÄÀÏÀ» Àд ¹æ¹ýÀ» ¾Ë¾Ò´Ù. È®½ÇÇÏ°Ô ¿ì¸®ÀÇ ÇÁ·Î±×·¥À» ³¡³»±â À§Çؼ­´Â ¿ì¸®´Â µÎ°¡Áö »çÇ×À» ´õ ¹è¿ö¾ß ÇÑ´Ù.

  1. ¾î¶»°Ô ÇÑ ¶óÀÎÀÇ ½ÃÀÛ¿¡¼­ ¾à¾î¸¦ ÀоîµéÀÏ °ÍÀΰ¡?
  2. ÆÞ¿¡¼­ Çؽ¬ Å×À̺íÀº ¾î¶»°Ô ÀÛµ¿Çϴ°¡?
Á¤±Ô Ç¥Çö ÅؽºÆ® ¹®ÀÚ¿­¾È¿¡¼­ ƯÁ¤ ÆÐÅÏÀ» ã±âÀ§ÇÑ Á¤±³ÇÑ Àǹ̸¦ Á¦°øÇÕ´Ï´Ù. ¿ì¸®´Â ÇÑ ¶óÀξȿ¡¼­ ù¹ø° °ø¹é Àü±îÁö ù¹ø° ¹®ÀÚ¿­À» ã¾Æ¾ß ÇÕ´Ï´Ù. ´Ù¸¥ ¸»·Î Ç¥ÇöÇÏ¸é ¿ì¸®ÀÇ ÆÐÅÏÀº "¶óÀÎÀÇ ½ÃÀÛ --> °ø¹é¾ø´Â ¹®ÀÚµé --> °ø¹é" ÀÔ´Ï´Ù. ÆÞÀÇ Á¤±ÔÇ¥Çö¿¡¼­´Â ÀÌ°ÍÀ» ^\S+\s¿Í °°ÀÌ Ç¥Çö ÇÕ´Ï´Ù. ÀÌ°ÍÀ» m//¾È¿¡ Áý¾î ³ÖÀ¸¸é ÆÞÀº ÀÌ Ç¥ÇöÀ» $_ º¯¼ö¿¡ Áý¾î³Ö½À´Ï´Ù. (±â¾ï: ÀÌ º¯¼ö´Â ÇöÀç ¶óÀÎÀ» °¡Áö°í ÀÖ½À´Ï´Ù. ±×·¸ÁÒ??). \S+´Â Á¤±ÔÇ¥Çö½Ä¿¡¼­ "°ø¹éÀÌ ¾ø´Â ¹®ÀÚµé" À̶ó´Â °Í°ú °°Àº ÀǹÌÀÔ´Ï´Ù. ¸¸¾à À¸·Î±â \S+¿¡ °¡·Î ()¸¦ µÑ·¯ ½Î¸é °ø¹éÀÌ ¾Æ´Ñ ¹®ÀÚµéÀ» º¯¼ö $1¿¡ Áý¾î ³Ö°Ô µË´Ï´Ù ÀÌ°ÍÀ» ¿ì¸®ÀÇ ÇÁ·Î±×·¥ ¿¡ Áý¾î³ÖÀ¸¸é ¾Æ·¡¿Í °°½À´Ï´Ù.:
#!/usr/bin/perl -w
# vim: set sw=8 ts=8 si et:

use strict;
# global variables:
use vars qw($opt_h);
my $i=0; 
use Getopt::Std;
#
&getopts("h")||die "ERROR: No such option. -h for help.n";
&help if ($opt_h);
#
open(FD,"abb.txt")||die "ERROR: can not read file abb.txt\n"; 
while(<FD>){ 
    $i++; 
    if (m/^(\S+)\s/){
        # $1 holds now the first word (\S+)
        print "$1 is the abbreviation on line $i\n"; 
    }else{
        print "Line $i does not start with an abbreviation\n";
    }

close FD; 
#
#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
sub help{
     print "help text\n";
     exit;
}
#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
__END__ 

¸¸¾à Á¤±Ô Ç¥ÇöÀÌ ÇöÀç ¶óÀο¡ ¼º°øÀûÀ¸·Î Àû¿ëÀÌ µÇ¸é, ÀÏÄ¡ ¿¬»êÀÚ (m/ /)´Â 1À» ¹ÝȯÇÕ´Ï´Ù. ±×·¯¹Ç·Î, if-¹®Àå¾È¿¡ ÀÌ °ÍÀ» »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. $1 º¯¼ö´Â ½ÇÁ¦·Î È®½ÇÇÑ ÀÚ·á°¡ ÀÖ´ÂÁö È®ÀÎµÇ¾ß Çϱ⠶§¹®¿¡ $1 º¯¼ö¸¦¸¦ »ç¿ëÇϱâ Àü¿¡ ´Â ²À ÀÏÄ¡ ¿¬»êÀÚ¿¡ if-¹®ÀåÀ» »ç¿ëÇÏ¿©¾ß ÇÑ´Ù.

Çؽ¬ Å×À̺í

ÀÌÁ¦ ¿ì¸®´Â È­ÀÏÀ» Àаí, ¾à¾î¸¦ ¾ò¾î¿Â´Ù. ±×¸®°í ÀÐÇôÁöÁö ¾ÊÀº ³ª¸ÓÁö °ÍµéÀº ÀÐÇôÁø ¾à¾î°¡ ±×Àü¿¡ ¾²¿´¾ú´ÂÁö ¾Ë¾Æ¿À±â À§ÇØ ÇÊ¿äÇÑ Á¤º¸µéÀÌ´Ù. ÀÌÁ¦ ¿ì¸®´Â »õ·Î¿î ÆÞ µ¥ÀÌÅÍ Å¸ÀÔÀÌ ÇÊ¿äÇÏ´Ù: Hash Tables. Çؽ¬ Å×À̺íÀº ¹®ÀÚ¿­¿¡ ÀÇÇØ À妽º µÉ¼ö ÀÖ´Â ¹è¿­ÀÌ´Ù. º¯¼ö À̸§ ¾Õ¿¡ % Ç¥½Ã¸¦ ºÙ¿©¼­ Çؽ¬ Å×À̺íÀ̶ó´Â °ÍÀ» ³ªÅ¸³½´Ù. °¢°¢ÀÇ °ªÀ» Àбâ À§Çؼ­ $variable_name{"index_string"}¿Í °°Àº Çü½ÄÀ» »ç¿ëÇØ¾ß ÇÑ´Ù. ´Ù¸¥ ½ºÄ®¶ó º¯¼ö¿Í °°ÀÌ Çؽ¬ Å×À̺í¾ÈÀÇ Çʵå´Â ÀϹÝÀûÀÎ ½ºÄ®¶ó º¯¼ö¿Í °°ÀÌ »ç¿ëµÈ´Ù. ¿¹Á¦:
 
#!/usr/bin/perl -w
my %htab;
my $index;
# load the hash with data:
$htab{"something"}="value of something";
$htab{"somethingelse"}=42;
# get the data back:
$index="something";
print "%htab at index \"$index\" is $htab{$index}\n";
$index="somethingelse";
print "%htab at index \"$index\" is $htab{$index}\n";

ÀÌ ÇÁ·Î±×·¥ÀÌ ½ÇÇàµÉ¶§ ¿ì¸®°¡ ¾òÀ» ¼ö ÀÖ´Â °ÍÀº:

%htab at index &quotsomething"Àº "value of something"ÀÌ°í
%htab at index &quotsomethingelse" Àº 42¶ó´Â °ÍÀÌ´Ù.
ÀÌÁ¦ ¿ì¸®ÀÇ ÇÁ·Î±×·¥Àº ³¡ÀÌ ³­´Ù:
 1  #!/usr/bin/perl -w
 2  # vim: set sw=4 ts=4 si et:
 3  # 
 4  use strict;
 5  # global variables:
 6  use vars qw($opt_h);
 7  my %htab;
 8  use Getopt::Std;
 9  #
10  &getopts("h")||die "ERROR: No such option. -h for help.n";
11  &help if ($opt_h);
12  #
13  open(FD,"abb.txt")||die "ERROR: can not read file abb.txt\n"; 
14  print "Abbreviations with several meanings in file abb.txt:\n";
15  while(<FD>){ 
16      if (m/^(\S+)\s/){
17          # we use the first word as index to the hash:
18          if ($htab{$1}){
19              # again this abbrev:
20              if ($htab{$1} eq "_repeated_"){
21                  print; # same as print "$_";
22              }else{
23                  # this is the first duplicate we print first
24                  # occurance of this abbreviation:
25                  print $htab{$1};
26                  # print the abbreviation line that we are currently reading:
27                  print;
28                  # mark as repeated (= appears at least twice)
29                  $htab{$1}="_repeated_";
30              }
31          }else{
32              # the first time we load the whole line:
33              $htab{$1}=$_;
34          }
35      }
36  } 
37  close FD; 
38  #
39  #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
40  sub help{
41          print "finddup -- Find abbreviations with several meanins in the
42  file abb.txt. The lines in this file must have the format:
43  abrev meaning
44  \n";
45          exit;
46  }
47  #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
48  __END__ 
¾î·ÁºÐÀº ÀÌ °÷¿¡¼­ ÀÌ ÇÁ·Î±×·¥À» ´Ù¿î ¹ÞÀ» ¼ö ÀÖ´Ù.

ÀÌ ÇÁ·Î±×·¥Àº ¾î¶»°Ô ÀÛµ¿Çϴ°¡? ÀÌ ÇÁ·Î±×·¥Àº ¶óÀÎ ´ÜÀ§·Î ÆÄÀÏÀ» Àаí, ±× ¶óÀÎÀ» %htab (line 33)¶ó´Â Çؽ¬ Å×ÀÌºí¿¡ ÀúÀåÇÑ´Ù. How does it work? We read the file line by line and store the lines in our hash called %htab (line 33). Çؽ¬ Å×À̺íÀÇ À妽º´Â ¾à¾îÀÌ´Ù. Çؽ¬ Å×À̺íÀ» »ç¿ëÇϱâ Àü¿¡ ±× ¾È¿¡ ´Ù¸¥ °ªÀÌ ÀúÀåµÇ¾î ÀÖ´ÂÁö È®ÀÎÇÑ´Ù. (line 18). ¸¸¾à Çؽ¬ Å×À̺í¾È¿¡ ´Ù¸¥ °ªÀÌ ÀÖÀ¸¸é µÎ °¡Áö °¡´É¼ºÀÌ ÀÖ´Ù.

  1. ÀÌ°ÍÀº ù¹ø° Áߺ¹ÀÌ´Ù.
  2. ÀÌ ¾à¾î´Â ÀÌ¹Ì ¿©·¯¹ø Áߺ¹µÇ¾î ÀÖ´Ù.
ÀÌ µÎ°¡Áö °æ¿ì¸¦ ±¸º°Çϱâ À§ÇØ "_repeated_"¶ó´Â ¹®ÀÚ¿­À» Çؽ¬ Å×À̺í¾È¿¡ ½á¼­ ÀÌ¹Ì Áߺ¹µÇ¾ú´Ù°í ¹ß°ßµÈ °ÍµéÀ» Ç¥½ÃÇÑ´Ù.(line 29)

ÀÌ ÄÚµå´Â ´ÙÀ½¿¡¼­ ´Ù¿î ¹ÞÀ» ¼ö ÀÖ°í Çѹø ½ÇÇàÇØ º¸±â¸¦ ¹Ù¶õ´Ù.

´ÙÀ½ ¿¬Àç¿¡¼­´Â...

À̹ø ¿¬Àç¿¡¼­ ´ç½ÅÀº ÀÌ¹Ì ÆÞ ¾ð¾îÀÇ ¸î°¡Áö ÀÚ¼¼ÇÑ ºÎºÐµéÀ» ¹è¿ü´Ù. ¾ÆÁ÷ ÆÞÀÌ °¡Áø ¸ðµç µ¥ÀÌÅÍ Å¸ÀÔÀ» ´Ù·çÁö´Â ¾Ê¾ÒÀ¸¸ç, ´ç½ÅÀÌ ÆÞ¿¡¼­ "abb.txt" ¿Í °°Àº Á¤ÇØÁø È­ÀÏ À̸§À» »ç¿ëÇÏ´Â °ÍÀ» ÇÇÇÒ ¼ö ÀÖ´ÂÁö ±Ã±ÝÇØ ÇÒ ¼ö ÀÖÁö¸¸, ´ç½ÅÀº ÀÌ¹Ì È­ÀÏ À̸§À» ÄÚµå¾È¿¡ È®Á¤½ÃÅ°¾Ê°í ¿É¼ÇÀ» »ç¿ëÇØ °¡º¯ÀûÀ¸·Î È­ÀÏ À̸§À» ÁöÁ¤ÇÏ´Â ¹æ¹ýÀ» ¾Ë°íÀÖ´Ù. (¿¹: finddup -f abb.txt) À§ÀÇ ¿¹Á¦µéÀ» ¹Ù²ã¼­ ÄÚµùÇغ¸±â¸¦ ¹Ù¶õ´Ù. ¸í·É¾î ¶óÀΰú µ¥ÀÌÅÍŸÀÔ ¹è¿­À» Àд ÀϹÝÀûÀÎ ¹æ¹ýÀº ´ÙÀ½ ¿¬Àç¿¡ ¼Ò°³µÉ °ÍÀÌ´Ù.  
º» À¥ ÆäÀÌÁö´Â ¸®´ª½ºÆ÷Ä¿½º ¿¡µðÅÍ ÆÀ¿¡ ÀÇÇØ °ü¸® µË´Ï´Ù.
© Guido Socher 
LinuxFocus 1999
¹ø¿ªÁ¤º¸:
¿ø¹® : ¿µ¾î
en -> kr : ÀÌâ¿ì

1999-11-01, generated by lfparser version 0.8