· KLDP.org · KLDP.net · KLDP Wiki · KLDP BBS ·
perldoc/perlsyn


1. ¹ø¿ª¹®¼­Á¤º¸

1.1. ¿øÀúÀÚ ¹× ¹ø¿ªÀÚ

¿øÀúÀÚ : Á¤È®È÷ ¾Ë ¼ø ¾øÁö¸¸ Perl Documentation Team ÀÏ °ÍÀÌ´Ù.
¹ø¿ªÀÚ : redneval@kldp.org

1.2. ¿µ¹®¿øº» Ãâó

¸µÅ© : http://perldoc.perl.org/perlsyn.html
ºÐ·ù ¹× À̸§ : Perl 5.8.8 documentation - Language reference - perlsyn

1.3. ÀúÀÛ±Ç ¹× ¶óÀ̼¾½º

º» ¹ø¿ª¹®¼­ÀÇ ¹ø¿ªºÎºÐ¿¡ ÇØ´çµÇ´Â ºÎºÐÀÇ ¿ø ÀúÀÛ±ÇÀº redneval@kldp.org ¿¡ ÀÖ´Ù. ´Ù¸¸, ÀúÀ۱ǿ¡ µû¸¥ ¸ðµç ±Ç¸®´Â Free Software Foundation (FSF) ·Î À̾çÇÑ´Ù.

º» ¹ø¿ª¹®¼­´Â ¿µ¹® perldocÀÇ ¶óÀ̼¾½º¿¡ µû¶ó GPLÀ» µû¸¥´Ù. ±×·¯¹Ç·Î, º» ¹ø¿ª¹®¼­ÀÇ GPL¹öÀüÀº ¿µ¹® perldocÀÇ GPL¹öÀüÀ» µû¸¥´Ù. ¸¸¾à, ¿µ¹® perldocÀÇ GPL¹öÀüÀÌ ¹Ù²î¸é, º» ¹ø¿ª¹®¼­ ¶ÇÇÑ ±× ¹Ù²ï ¹öÀüÀ¸·Î ¹Ù²ã¼­ »ç¿ëÇÒ ¼ö ÀÖ´Ù.

1.4. ¸µÅ©

ÆÞ¿¡ °üÇÑ ´Ù¸¥ ¹®¼­¸¦ º¸°í ½Í´Ù¸é perldocÀ» Âü°íÇ϶ó.

2. ¹ø¿ª¹®¼­

2.1. À̸§

perlsyn - ÆÞ ¹®¹ý

2.2. ¼³¸í

ÆÞ ÇÁ·Î±×·¥Àº, ¸Ç À§¿¡¼­ºÎÅÍ ¸Ç ³¡±îÁö ¼øÂ÷ÀûÀ¸·Î ½ÇÇàµÇ´Â ÀÏ·ÃÀÇ ¼±¾ðµé°ú ½ÇÇ๮µé·Î ±¸¼ºµÈ´Ù. ´Ù¸¸, ·çÇÁ, ¼­ºê·çƾ, ±×¸®°í ´Ù¸¥ Á¦¾î±¸Á¶¸¦ ÅëÇØ ÄÚµåÀÇ ¼ø¼­¸¦ ¶Ù¾î³ÑÀ» ¼öµµ ÀÖ´Ù.

ÆÞÀº ÀÚÀ¯·Î¿î Çü½ÄÀÇ ÇÁ·Î±×·¡¹Ö ¾ð¾îÀ̸ç, Æ÷¸Ë°ú µé¿©¾²±â¸¦ ¿øÇÏ´Â ¹æ½ÄÀ¸·Î ÇÒ ¼ö ÀÖ´Ù. (Æ÷¸Ë°ú µé¿©¾²±â°¡ ¾Æ´Ï¶ó) °ø¹é¹®ÀÚµéÀÌ ÁÖ·Î ÅäÅ«µéÀ» ±¸ºÐÇÏ´Â ¿ªÇÒÀ» Çϴµ¥, ÀÌ´Â Æ÷¸Ë°ú µé¿©¾²±â°¡ Áß¿äÇÑ ¹®¹ýÀÇ ÀϺθ¦ Â÷ÁöÇÏ´Â ÆÄÀ̽ã°ú °°Àº ¾ð¾îµé°ú´Â ´Ù¸£´Ù.

ÆÞÀÇ ¹®¹ýÀû ¿ä¼Òµé Áß ¸¹Àº °ÍµéÀÌ ¼±ÅÃÀûÀÌ´Ù. ÇÔ¼öÈ£ÃâÀ» ÇÒ ¶§ °ýÈ£°¡ ¾ø¾îµµ µÇ°í, º¯¼ö´Â ¼±¾ðµÇÁö ¾Ê¾Æµµ µÇ´Â µî, ¸í½ÃÀûÀÎ ¿ä¼Ò¸¦ »©¹ö·Áµµ µÈ´Ù. ÀÌ·± °ÍÀ» DWIM (Do What I Mean)À̶ó°í Çϴµ¥, ÀÌ·± °ÍÀÌ ÇÁ·Î±×·¡¸Ó°¡ Æí¾ÈÇÑ ½ºÅ¸ÀÏ·Î ÄÚµåÀÛ¼ºÀ» Çϰųª lazyÇϵµ·Ï Çã¿ëÇÑ´Ù.

ÆÞÀº ¸¹Àº ´Ù¸¥ ¾ð¾î¿¡¼­ ¹®¹ý°ú ÄÁ¼ÁÀ» ºô·Á¿Ô´Ù. awk, sed, C, Bourne Shell, Smalltalk, Lisp ±×¸®°í ½ÉÁö¾î´Â ¿µ¾î·ÎºÎÅÍ. ´Ù¸¥ ¾ð¾îµéµµ Æ޷κÎÅÍ ¹®¹ý(ƯÈ÷ Á¤±ÔÇ¥Çö½Ä È®Àå)À» ºô·Á°¬´Ù. ±×·¯¹Ç·Î ´Ù¸¥ ¾ð¾î·Î ÇÁ·Î±×·¡¹ÖÇÏ´õ¶óµµ, ÆÞÀÇ Ä£¼÷ÇÑ ºÎºÐÀ» º¼ ¼ö ÀÖÀ» °ÍÀÌ´Ù.


2.2.1. ´Ü¾î¼³¸í

  • ¹®Àå ¶Ç´Â ½ÇÇ๮ ¶Ç´Â ~¹® (statement) : ÆÞ¿¡¼­ÀÇ ¹®ÀåÀº ½ÇÇ๮À» ÀǹÌÇÑ´Ù.
  • ¼±¾ð(declaration) : ¼±¾ðÀº ½ÇÇ๮ÀÇ ÇÑ Á¾·ù°¡ ¾Æ´Ï¶ó, ¼±¾ðÀ» ¼öÇàÇÏ´Â ºÎºÐ¸¸À» ÀǹÌÇÑ´Ù. ±×·¯¹Ç·Î ¼±¾ð¹®Àº ¼±¾ð°ú ¹®Àå(½ÇÇ๮)ÀÇ ÇÕÀ¸·Î ÀÌ·ç¾îÁø´Ù.
  • ÅäÅ«(token) : º¯¼ö, ¿¬»êÀÚ, ±âŸ ¹®¹ýÄÚµå µîÀ» ±¸¼ºÇÏ´Â ÇϳªÀÇ ±âº» ´ÜÀ§¸¦ ¸»ÇÑ´Ù.
  • Æ÷¸Ë(format) : µé¿©¾²±â, ÁÙ¹Ù²Þ µîÀÇ code conventionÀ» ÀÏÄ´´Ù.
  • ¼±ÅÃÀû(optional) : 'ÇʼöÀû'ÀÇ ¹Ý´ë¸»ÀÌ´Ù.
  • lazy : '°ÔÀ¸¸¥'ÀÌ ¾Æ´Ï°í, 'ÄÚµùÀ» ÃÖ¼ÒÈ­ÇÏ´Â'À¸·Î º½ÀÌ ¿ÇÀ» °Í °°´Ù. ÀÌ´Â º¸´Â »ç¶÷ÀÇ °ßÇØ¿¡ µû¶ó ´Ù¸£°Ô ¹ø¿ªµÉ ¼ÒÁö°¡ ÀÖÀ¸¹Ç·Î ±×³É µÎ¾î¾ß ÇÑ´Ù.
  • ºí¶ô(block) : 'º¹ÇÕ ½ÇÇ๮'Ç×À» ÂüÁ¶Ç϶ó.
  • report format : ¾Æ¸¶µµ ¸ðµâ¿¡¼­ ÇÔ¼ö¸¦ exportÇÏ´Â ºÎºÐÀ» ¸»ÇÏ´Â °Í °°´Ù.
  • ´Ü¼ø ½ÇÇ๮(simple statement)°ú º¹ÇÕ ½ÇÇ๮(compound statement) : º¹ÇÕ ½ÇÇ๮Àº ºí¶ô±¸Á¶¸¦ Æ÷ÇÔÇÏ´Â ½ÇÇ๮À» ÀÏÄ´´Ù.
  • ÂüÁ¶¹üÀ§(scope) : Àǹ̸¦ ¸íÈ®È÷ Çϱâ À§ÇØ '¹üÀ§'´ë½Å 'ÂüÁ¶¹üÀ§'¶ó´Â ´Ü¾î¸¦ ¼±ÅÃÇÏ¿´´Ù.
  • proper : ÀÌ ´Ü¾î´Â ¿ø·¡ ÀÇ¹Ì¿Í ´Ù¸£°Ô ¹ø¿ªµÉ ¼ÒÁö°¡ ÀÖÀ¸¹Ç·Î ±×³É µÎ¾î¾ß ÇÑ´Ù.


2.2.2. ¼±¾ð

ÆÞ¿¡¼­ ¼±¾ðÀ» ÇؾßÇÒ À¯ÀÏÇÑ °ÍÀº report format°ú ¼­ºê·çƾÀÌ´Ù. (¶§¶§·Î´Â ½ÉÁö¾î ¼­ºê·çƾÀÇ ¼±¾ðµµ ÇÊ¿ä¾ø´Ù.) º¯¼ö¼±¾ðÀ» Çϸé, °ªÀ» ´ëÀÔÇϱâ Àü±îÁö´Â º¯¼ö´Â undef°ª(Á¤ÀǵÇÁö ¾ÊÀº °ª)À» °¡Áø´Ù. ¸¸¾à º¯¼ö¸¦ ¼ýÀÚ·Î ´Ù·ç¸é undef´Â 0°ªÀ¸·Î ´Ù·ïÁø´Ù. ¹®ÀÚ¿­·Î ¾²ÀÎ´Ù¸é ºó ¹®ÀÚ¿­ÀÎ ""·Î ´Ù·ïÁø´Ù. ÂüÁ¶°ªÀ¸·Î ¾²ÀÎ´Ù¸é ±×°ÍÀº error·Î ´Ù·ïÁø´Ù. ¸¸¾à ¿É¼Ç(use warning)À» ÅëÇØ °æ°í±â´ÉÀ» È°¼ºÈ­Çϸé, undef¸¦ ¹®ÀÚ¿­À̳ª ¼ýÀÚ·Î ´Ù·ê¶§¸¶´Ù uninitialized value ¶ó´Â °æ°í¸Þ½ÃÁö¸¦ º¼ °ÍÀÌ´Ù. ¸¶Áö¸·À¸·Î ´ÙÀ½°ú °°ÀÌ ºÒ¸°°ª(Âü ¶Ç´Â °ÅÁþ)À¸·Î ¾²ÀÏ °æ¿ì¸¦ º¸ÀÚ.

    my $a;
    if ($a) {}

ÀÌ·± °æ¿ì, °æ°í¸Þ½ÃÁö´Â ¹ß»ýÇÏÁö ¾Ê´Â´Ù. (¿Ö³Ä¸é ÀÌ·± °æ¿ì º¯¼öÀÇ °ªÀÌ Á¤ÀǵǾú´À³Ä¸¦ »ìÇÇ°í °æ°í¸¦ ÇÏ´Â °ÍÀÌ ¾Æ´Ï°í, $aÀÇ °ªÀÌ ÂüÀÎÁö¸¸À» º¸±â ¶§¹®ÀÌ´Ù.) ++ , -- , += , -= , .= °°Àº ¿¬»êÀÚµéÀÇ °æ¿ì Áº¯°ªÀÌ Á¤ÀǵÇÁö ¾Ê¾Ò´õ¶óµµ °æ°í¸Þ½ÃÁö´Â ¹ß»ýÇÏÁö ¾Ê´Â´Ù. ¿¹¸¦ µé¸é ´ÙÀ½°ú °°´Ù.

    my $a;
    $a++;

¼±¾ðÀ» À§ÇÑ Å°¿öµå(my, local µî)´Â ½ÇÇ๮ÀÌ ¿Ã ¼ö ÀÖ´Â ¾î´À À§Ä¡¿¡¼­µç ³õÀÏ ¼ö ÀÖ´Ù. ±×·¯³ª ±× ½ÇÇ๮ÀÇ ½ÇÇà¿¡´Â ¾Æ¹«·± ¿µÇâÀ» ÁÖÁö ¾Ê´Â´Ù. ¼±¾ðÀº ÄÄÆÄÀÏ ½Ã°£¿¡ ¿µÇâÀÌ ¹ß»ýÇϱ⠶§¹®ÀÌ´Ù. º¸ÅëÀº ¸ðµç ¼±¾ð¹®ÀÌ ½ºÅ©¸³Æ®ÀÇ ¸Ç ¾ÕÀ̳ª ¸Ç µÚ¿¡ ¿À°Ô µÈ´Ù. ±×·±µ¥, my Å°¿öµå·Î ¼±¾ðµÈ private º¯¼ö¸¦ »ç¿ëÇÒ ¶§, ±× º¯¼ö¿Í °°Àº ºí¶ô¿¡ Á¸ÀçÇÏ´Â ¸ðµç ÄÚµå¿Í ¼­ºê·çƾÀº ±× º¯¼ö¿¡ Á¢±ÙÇÒ ¼ö ÀÖ´Ù´Â Á¡À» ÁÖÀÇÇؾßÇÑ´Ù.

¼­ºê·çƾÀ» ¼±¾ðÇÔÀ¸·Î½á, ¼­ºê·çƾÀÌ ¸¶Ä¡ ¸®½ºÆ® ¿¬»êÀÚÀÎ °Íó·³ "sub ¼­ºê·çƾÀ̸§"À̶ó°í ÇÔÀ¸·Î½á ¼­ºê·çƾÀ» Á¤ÀÇÇÏÁö¾Ê°í ´ÜÁö ¼±¾ð¸¸ ÇÏ´Â °ÍÀÌ °¡´ÉÇÏ´Ù.

    sub myname;
    $me = myname $0             or die "can't get myname";

÷¾ðÀ» ÇÏÀÚ¸é, myname() ÇÔ¼ö´Â ´ÜÇ× ¿¬»êÀÚ°¡ ¾Æ´Ñ ¸®½ºÆ® ¿¬»êÀÚ·Î ´Ù·ïÁø´Ù´Â °ÍÀÌ´Ù. ±×·¯¹Ç·Î À§ÀÇ ¿¹¿¡¼­ || ´ë½Å¿¡ or ¸¦ »ç¿ëÇßÀ½¿¡ À¯ÀÇÇÏÀÚ. ±×·¯³ª, ¸¸¾à "sub myname ($)"·Î ¼±¾ðÀ» Çß´Ù¸é myname() ÇÔ¼ö´Â ´ÜÇ× ¿¬»êÀÚó·³ µ¿ÀÛÇϹǷΠ|| ¸»°íµµ or ¶ÇÇÑ »ç¿ëÇÒ ¼ö ÀÖ´Ù.

¼­ºê·çƾ ¼±¾ðÀº ¶ÇÇÑ require¹® ¶Ç´Â use¹®À» »ç¿ëÇÏ¿© ºÒ·¯¿Ã ¼ö ÀÖ´Ù. ÀÌ¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ »çÇ×Àº perlmod¸¦ º¸±â ¹Ù¶õ´Ù.

½ÇÇ๮µéÀº º¯¼öµéÀÇ ¼±¾ðÀ» Æ÷ÇÔÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª º¯¼ö¸¦ ¼±¾ðÇÏ´Â °Í°ú´Â º°°³·Î, ¼±¾ð¹®Àº ÀϹÝÀûÀÎ ½ÇÇ๮ÀÇ ¿ªÇÒÀ» ÇÑ´Ù. ÀÌ°ÍÀº ÄÄÆÄÀÏŸÀÓÈ¿°ú/·±Å¸ÀÓÈ¿°ú µÑ ¸ðµÎ¸¦ °¡Áö°í ÀÖ´Ù´Â ¶æÀÌ´Ù.

#·Î ½ÃÀÛÇÏ´Â ºÎºÐºÎÅÍ ÁÙÀÇ ¸¶Áö¸·±îÁö°¡ ÁÖ¼®ÀÌ µÇ°í, ÀÌ ºÎºÐÀº ¹«½ÃµÈ´Ù. ´Ù¸¸ ¹®ÀÚ¿­À̳ª Á¤±ÔÇ¥Çö½Ä ³»ºÎÀÇ #Àº ¿¹¿ÜÀÌ´Ù.

¸ðµç ´Ü¼ø ½ÇÇ๮Àº ¼¼¹ÌÄÝ·ÐÀ¸·Î ³¡³­´Ù. ´Ù¸¸, ºí¶ôÀÇ ¸¶Áö¸· ½ÇÇ๮Àº ¿¹¿ÜÀ̸ç, ÀÌ °æ¿ì¿¡´Â ¼¼¹ÌÄÝ·ÐÀº ¼±ÅÃÀûÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù. ÇÏÁö¸¸ ³ªÁß¿¡ ºí¶ôÀÇ ³¡¿¡ Ãß°¡ÀûÀÎ ½ÇÇ๮À» Ãß°¡ÇÏ´Â °æ¿ì°¡ »ý±æ ¼ö ÀÖÀ¸¹Ç·Î, ¼¼¹ÌÄÝ·ÐÀ» ¾²±â¸¦ ±ÇÀåÇÑ´Ù. ÷¾ðÀ» ÇÏÀÚ¸é, eval {} ¿Í do {} °°Àº ¿¬»êÀÚµéÀº º¹ÇÕ ½ÇÇ๮°°ÀÌ »ý°åÁö¸¸, ½ÇÁ¦·Î´Â ¾Æ´Ï´Ù. ±×·¯¹Ç·Î ÀÌ ¿¬»êÀÚ°¡ ½ÇÇ๮ÀÇ ¸¶Áö¸·¿¡ À§Ä¡ÇÑ´Ù¸é, ¸í½ÃÀû Á¾·á¹®ÀÚÀÎ ¼¼¹ÌÄÝ·ÐÀÌ ÇÊ¿äÇÏ´Ù.


2.2.3. Âü(true)°ú °ÅÁþ(false)

¼ýÀÚ 0, ¹®ÀÚ¿­ "0" ¶Ç´Â "", ºó ¸®½ºÆ® (), ±×¸®°í undef´Â booleanÀ¸·Î ´Ù·ïÁú ¶§, false°ªÀ» °®´Â´Ù. ÀÌ 5°¡Áö °æ¿ì¸¦ Á¦¿ÜÇÑ ¸ðµç ´Ù¸¥ °ªÀº true°ªÀ» °¡Áö°Ô µÈ´Ù. true¿¡ Negate¿¬»êÀÚÀÎ !°ú notÀÇ ¿¬»êÀ» ÃëÇϸé Ư¼öÇÑ false°ªÀ» °¡Áö°Ô µÈ´Ù. ÀÌ Æ¯¼öÇÑ false °ªÀº ¹®ÀÚ¿­·Î´Â "", ¼ýÀڷδ 0À¸·Î ´Ù·ïÁø´Ù.


2.2.4. ½ÇÇ๮ ¼ö½Ä¾î

´Ü¼ø ½ÇÇ๮ µÚ¿¡´Â ¼±ÅÃÀûÀ¸·Î ÇϳªÀÇ ¼ö½Ä¾î°¡ ¿Ã ¼ö ÀÖ´Ù. ¼ö½Ä¾îÀÇ À§Ä¡´Â ½ÇÇ๮ µÚ, ¼¼¹ÌÄÝ·ÐÀÇ ¹Ù·Î ¾ÕÀÌ µÈ´Ù. °¡´ÉÇÑ ¼ö½Ä¾î´Â ´ÙÀ½°ú °°´Ù.

    if EXPR
    unless EXPR
    while EXPR
    until EXPR
    foreach LIST

EXPRÀº "Á¶°Ç(¹®)"À̶ó°í ºÎ¸¥´Ù. ±×°ÍÀÇ Âü/°ÅÁþ °ª¿¡ µû¶ó¼­ ±× ¼ö½Ä¾î°¡ ¾î¶»°Ô µ¿ÀÛÇÏ´ÂÁö °áÁ¤ÇϰԵȴÙ.

if·Î ½ÃÀ۵Ǵ ¼ö½Ä¾î´Â ±× Á¶°ÇÀÌ Âü°ªÀ» °¡Áú °æ¿ì(¿¡¸¸) ½ÇÇ๮À» ÇÑ ¹ø ½ÇÇàÇÑ´Ù. unlessÀÇ °æ¿ì´Â ¹Ý´ë·Î µ¿ÀÛÇÑ´Ù. Áï, Á¶°ÇÀÌ °ÅÁþ°ªÀ» °¡Áú °æ¿ì(¿¡¸¸) ½ÇÇ๮À» ÇÑ ¹ø ½ÇÇàÇÑ´Ù.

    print "Basset hounds got long ears" if length $ear >= 10;
    go_outside() and play() unless $is_raining;

foreach ¼ö½Ä¾î´Â ÀÏÁ¾ÀÇ ¹Ýº¹¹®ÀÌ´Ù. LISTÀÇ °¢°¢ÀÇ ¿ä¼Ò¿¡ ´ëÇØ ½ÇÇ๮À» Çѹø¾¿ ½ÇÇàÇÑ´Ù. À̶§, ½ÇÇ๮ ³»¿¡¼­ °¢°¢ÀÇ ¿ä¼Ò´Â $_¶ó´Â º¯¼ö¸¦ ÅëÇØ ´Ù·ê ¼ö ÀÖ´Ù.

    print "Hello $_!\n" foreach qw(world Dolly nurse);

while ¼ö½Ä¾î´Â EXPRÀÌ Âü°ªÀ» °¡Áö´Â µ¿¾È¿¡ ½ÇÇ๮À» ¹Ýº¹ÇÏ¿© ½ÇÇàÇÑ´Ù. untilÀº ±× ¹Ý´ë·Î µ¿ÀÛÇÑ´Ù. until ¼ö½Ä¾î´Â EXPRÀÌ °ÅÁþ°ªÀ» °¡Áö´Â µ¿¾È¿¡ ½ÇÇ๮À» ¹Ýº¹ÇÏ¿© ½ÇÇàÇÑ´Ù.

    # Both of these count from 0 to 10.
    print $i++ while $i <= 10;
    print $j++ until $j >  10;

while°ú until¼ö½Ä¾î¿¡¼­ Á¶°Ç¹®Àº ½ÇÇ๮ÀÌ ½ÇÇàµÇ±â Àü¿¡ ¸ÕÀú °è»êµÈ´Ù. ÇÏÁö¸¸ do {} ±¸¹®À» »ç¿ëÇÏ¸é ½ÇÇ๮À» ¸ÕÀú ½ÇÇàÇÒ ¼ö ÀÖ´Ù. Áö±ÝÀº ¾²Áö¸» °ÍÀ» ±ÇÇÏ´Â do-SUBROUTINE ±¸¹®ÀÇ °æ¿ìµµ ¸¶Âù°¡Áö·Î ¼­ºê·çƾÀÌ ¸ÕÀú ½ÇÇàµÈ´Ù. ±×·¡¼­ ´ÙÀ½°ú °°ÀÌ ·çÇÁ¸¦ ¾µ ¼ö ÀÖ´Ù.

    do {
        $line = <STDIN>;
        ...
    } until $line  eq ".\n";

ÀÚ¼¼ÇÑ °ÍÀº do ÇÔ¼ö¿¡ °üÇÑ ¹®¼­¸¦ º¸¶ó. ÷¾ðÇÏÀÚ¸é, ¹Ø¿¡¼­ ´Ù·ç°Ô µÉ ·çÇÁ Á¦¾î ½ÇÇ๮(next, last)Àº do {} ±¸¹®À» Áö¿øÇÏÁö ¾ÊÀ½À» ¹àÈù´Ù. ¿Ö³ÄÇϸé, ¼ö½Ä¾î´Â ·çÇÁ ¶óº§À» °®Áö ¾Ê±â ¶§¹®ÀÌ´Ù. ÀÌ Á¡Àº À¯°¨ÀÌ´Ù. ±×·¡¼­ next¸¦ »ç¿ëÇÏ¿© ±×·± ±â´ÉÀ» ±¸ÇöÇÏ·Á¸é do {} ±¸¹® ¾È¿¡ ¶Ç ´Ù¸¥ ºí¶ôÀÌ ÇÊ¿äÇÏ°í, lastÀÇ °æ¿ì´Â do {} ±¸¹® ¹Û¿¡ ¶Ç ´Ù¸¥ ºí¶ôÀÌ ÇÊ¿äÇÏ´Ù. ±×·¯¹Ç·Î nextÀÇ °æ¿ì´Â ´ÜÁö ÀÌÁß °ýÈ£¸¦ »ç¿ëÇÏ¸é µÈ´Ù.

    do {{
        next if $x == $y;
        # do something here
    }} until $x++ > $z;

lastÀÇ °æ¿ì´Â Á¶±Ý ´õ º¹ÀâÇÏ°Ô Ã³¸®ÇØ¾ß ÇÑ´Ù.

    LOOP: {
            do {
                last if $x = $y**2;
                # do something here
            } while $x++ <= $z;
    }

°æ°í : my ¼±¾ð¹®À» ½ÇÇ๮ ¼ö½Ä¾î¿Í °°ÀÌ ¾²Áö ¸»¾Æ¶ó. Áï, "my $x if ... "°ú °°ÀÌ Á¶°ÇºÎ ¼±¾ð¹®À» »ç¿ëÇÏÁö ¸»¾Æ¶ó. ÀÌ·± ½ÇÇ๮¿¡ ´ëÇØ perlÀÇ µ¿ÀÛÀÌ Á¤ÀǵÇÁö ¾Ê¾Ò±â ¶§¹®ÀÌ´Ù. ¾î¼¸é perlÀÇ ¹öÀü¿¡ µû¶ó ´Ù¸£°Ô µ¿ÀÛÇÒÁöµµ ¸ð¸¥´Ù.


2.2.5. º¹ÇÕ ½ÇÇ๮

ÆÞ¿¡¼­´Â, ÀÏ·ÃÀÇ ½ÇÇ๮¿¡ ºí¶ôÀ̶ó°í ºÒ¸®´Â ÂüÁ¶¹üÀ§¸¦ ¼³Á¤ÇÒ ¼ö ÀÖ´Ù. ¶§¶§·Î ºí¶ôÀº ½ÇÇ๮À» Æ÷ÇÔÇÏ°í ÀÖ´Â ÆÄÀÏ¿¡ ÀÇÇؼ­ ¼³Á¤µÈ´Ù. ±×¸®°í ¶§¶§·Î´Â (¿¹¸¦ µé¾î eval ÇÔ¼öÀÇ °æ¿ì) ¹®ÀÚ¿­ÀÇ ¹üÀ§¿¡ ÀÇÇØ ¼³Á¤µÈ´Ù.

±×·¯³ª ÀϹÝÀûÀ¸·Î ºí¶ôÀº Áß°ýÈ£¶ó°í ºÒ¸®´Â '{' ¿Í '}' ¿¡ ÀÇÇؼ­ ¼³Á¤µÈ´Ù. À̸¦ BLOCKÀ̶ó°í ºÎ¸£°Ú´Ù.

´ÙÀ½ÀÇ º¹ÇÕ ½ÇÇ๮À» »ç¿ëÇÏ¿© ½ÇÇàÈ帧À» Á¦¾îÇÒ ¼ö ÀÖ´Ù.

    if (EXPR) BLOCK
    if (EXPR) BLOCK else BLOCK
    if (EXPR) BLOCK elsif (EXPR) BLOCK ... else BLOCK
    LABEL while (EXPR) BLOCK
    LABEL while (EXPR) BLOCK continue BLOCK
    LABEL until (EXPR) BLOCK
    LABEL until (EXPR) BLOCK continue BLOCK
    LABEL for (EXPR; EXPR; EXPR) BLOCK
    LABEL foreach VAR (LIST) BLOCK
    LABEL foreach VAR (LIST) BLOCK continue BLOCK
    LABEL BLOCK continue BLOCK

÷¾ðÇϸé, C³ª ÆĽºÄ®°ú´Â ´Ù¸£°Ô, À§ÀÇ Á¦¾î¹®¿¡ µé¾î°¡°Ô µÇ´Â BLOCKÀº ´Ü¼ø ½ÇÇ๮À¸·Î ´ëüÇÒ ¼ö ¾ø´Ù. ¿¹¸¦µé¾î, if (EXPR) STATEMENT ¿Í °°Àº½ÄÀ¸·Î Áß°ýÈ£ ¾øÀÌ ¾µ ¼ö´Â ¾ø´Ù´Â ¶æÀÌ´Ù. Áß°ýÈ£¸¦ »ç¿ëÇÏÁö ¾Ê°í Á¶°Ç¹®À» ¾²·Á¸é ´Ù¸¥ ¹æ¹ýÀ» ½á¾ßÇÑ´Ù.

    if (!open(FOO)) { die "Can't open $FOO: $!"; }
    die "Can't open $FOO: $!" unless open(FOO);
    open(FOO) or die "Can't open $FOO: $!";     # FOO or bust!
    open(FOO) ? 'hi mom' : die "Can't open $FOO: $!";
                        # a bit exotic, that last one

if¹®ÀÇ µ¿ÀÛÀº ¾Ë¾Æº¸±â ½±´Ù. ¿Ö³ÄÇϸé BLOCKÀº Ç×»ó Áß°ýÈ£·Î µÑ·¯½ÎÀ̹ǷÎ, if-else¹®¿¡´Â ¾î¶°ÇÑ ¸ðÈ£ÇÔµµ Á¸ÀçÇÏÁö ¾Ê°Ô µÈ´Ù. (if-else¹®ÀÇ µ¿ÀÛ¹æ½ÄÀº ¿µ¾î´Ü¾î 'if'¿Í 'else'ÀÇ ´Ü¾î¶æ°ú ÀÏÄ¡ÇϹǷΠ¿µ¾î¸¦ ¾È´Ù¸é ½±°Ô ÀÌÇØÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.) ¸¸¾à if ´ë½Å¿¡ unless¸¦ »ç¿ëÇϸé Á¶°Ç¹®Àº ¹Ý´ëÀÇ Àǹ̸¦ °®´Â´Ù. (À§ÀÇ '½ÇÇ๮ ¼ö½Ä¾î'Æí¿¡¼­ unless´Â if¿Í ¹Ý´ë·Î µ¿ÀÛÇÔÀ» ÀÌ¹Ì ¼³¸íÇÏ¿´´Ù.)

while¹®Àº EXPRÀÌ Âü°ªÀ» °®´Â µ¿¾È BLOCKÀ» °è¼ÓÇÏ¿© ½ÇÇàÇÑ´Ù. until¹®Àº EXPRÀÌ °ÅÁþ°ªÀ» °®´Â µ¿¾È BLOCKÀ» °è¼ÓÇÏ¿© ½ÇÇàÇÑ´Ù. LABELÀº ¼±ÅÃÀûÀÌ´Ù. ¸¸¾à LABELÀ» »ç¿ëÇÑ´Ù¸é ½Äº°ÀÚ¿Í ±× µÚ¿¡ ÄÝ·Ð ':' À» ¾²¸é µÈ´Ù. LABEL ½Äº°ÀÚ´Â next, last, redo °°Àº ·çÇÁÁ¦¾î¹®ÀÌ ·çÇÁ¸¦ ±¸ºÐÇϴµ¥ ÀÌ¿ëµÈ´Ù. LABELÀ» »ý·«ÇÏ¸é ·çÇÁÁ¦¾î¹®Àº ±×°ÍÀ» Æ÷ÇÔÇÑ °¡Àå ¾ÈÂÊÀÇ ·çÇÁ¿¡ ´ëÇØ ÀÛ¿ëÇÏ°Ô µÈ´Ù. LABELÀ» ã±â À§Çؼ­ ·±Å¸Àӽÿ¡ µ¿ÀûÀ¸·Î call-stackÀ» ãÀ» ¼öµµ ÀÖ´Ù. ÀÌ·± ¹«¸ðÇÑ ÇàÀ§´Â use warnings ¶Ç´Â -w ¿É¼ÇÀ» »ç¿ëÇÑ´Ù¸é °æ°í¸Þ½ÃÁö¸¦ ¶ç¿ì°Ô µÈ´Ù.

¸¸¾à continue BLOCK ±¸¹®À» »ç¿ëÇÑ´Ù¸é, ·çÇÁÀÇ Á¶°Ç¹®ÀÌ ´Ù½Ã ½ÇÇàµÇ±â Á÷Àü¿¡ BLOCK ÀÌ ´Ù½Ã ½ÇÇàµÈ´Ù. ±×·¯¹Ç·Î ·çÇÁ º¯¼öÀÇ °ªÀ» Áõ°¡½ÃÅ°´Âµ¥ »ç¿ëÇÒ ¼ö ÀÖ´Ù. next¹®¿¡ ÀÇÇؼ­ ´Ù½Ã ·çÇÁ°¡ ½ÇÇàµÉ ¶§µµ BLOCK ÀÌ ½ÇÇàµÈ´Ù.


2.2.6. ·çÇÁ Á¦¾î

next¹®Àº ·çÇÁÀÇ ´ÙÀ½ ¹Ýº¹¹®À» ½ÇÇàÇÏ°Ô ÇÑ´Ù.

    LINE: while (<STDIN>) {
        next LINE if /^#/;      # discard comments
        ...
    }

last¹®Àº Áï½Ã ·çÇÁ¸¦ ºüÁ®³ª°¡°Ô ÇÑ´Ù. À̶§´Â continue ºí¶ôÀº ½ÇÇàµÇÁö ¾Ê´Â´Ù.

    LINE: while (<STDIN>) {
        last LINE if /^$/;      # exit when done with header
        ...
    }

redo¹®Àº Á¶°Ç¹®ÀÌ Âü/°ÅÁþÀÎÁö º¸Áö ¾Ê°í ·çÇÁ¸¦ ´Ù½Ã ½ÇÇàÇÑ´Ù. À̶§ continue ºí¶ôÀº ½ÇÇàµÇÁö ¾Ê´Â´Ù. ÀÔ·ÂÀÌ ¹«¾ùÀ̾ú´ÂÁö¿¡ µû¶ó ¿¹¿ÜÀûÀ¸·Î ó¸®ÇÏ°í ½Í¾îÇÏ´Â ÇÁ·Î±×·¥¿¡ ÀÇÇØ redo¹®ÀÌ »ç¿ëµÈ´Ù.

¿¹¸¦µé¾î, /etc/termcap°ú °°ÀÌ ÆÄÀÏÀ» ó¸®ÇÒ ¶§, ÀÔ·ÂÀÇ ¸¶Áö¸· ¹®ÀÚ°¡ ¹é½½·¡½¬·Î ´ÙÀ½ ÁÙÀÌ ´õ ÀÖÀ½À» ¾Ë¸± ¶§, À̸¦ °Ç³Ê¶Ù°í ´ÙÀ½ ÁÙÀ» ÀÔ·ÂÀ¸·Î ¹Þ°í ½ÍÀ» °ÍÀÌ´Ù.

    while (<>) {
        chomp;
        if (s/\\$//) {
            $_ .= <>;
            redo unless eof();
        }
        # now process $_
    }

ÀÌ´Â Ãà¾à¹öÀüÀÌ°í, ¸í½ÃÀûÀΠǥÇöÀ» »ç¿ëÇÏ¿© ´Ù½Ã ÀÛ¼ºÇÏ¸é ´ÙÀ½°ú °°´Ù.

    LINE: while (defined($line = <ARGV>)) {
        chomp($line);
        if ($line =~ s/\\$//) {
            $line .= <ARGV>;
            redo LINE unless eof(); # not eof(ARGV)!
        }
        # now process $line
    }

÷¾ðÀ» ÇÏÀÚ¸é, ¸¸¾à À§ÀÇ Äڵ忡 continue ºí¶ôÀÌ »ç¿ëµÇ¾ú´Ù¸é, if¹®ÀÇ Á¶°Ç¹®ÀÇ °ªÀÌ false°ªÀÎ ÁÙ(Áï, ¹é½½·¡½¬·Î ³¡³ªÁö¾Ê´Â ÁÙ)¿¡ ´ëÇؼ­¸¸ ±× ºí¶ôÀÌ ½ÇÇàµÈ´Ù (redo¹®Àº continueºí¶ôÀ» ½ÇÇàÇÏÁö ¾ÊÀ¸¹Ç·Î). continue¹®Àº line counter¸¦ ÃʱâÈ­Çϰųª PATTERN? ¿¬»êÀÚ¸¦ ÃʱâÈ­ÇÒ ¶§ Á¾Á¾ »ç¿ëµÈ´Ù.

    # inspired by :1,$g/fred/s//WILMA/
    while (<>) {
        ?(fred)?    && s//WILMA $1 WILMA/;
        ?(barney)?  && s//BETTY $1 BETTY/;
        ?(homer)?   && s//MARGE $1 MARGE/;
    } continue {
        print "$ARGV $.: $_";
        close ARGV  if eof();           # reset $.
        reset       if eof();           # reset ?pat?
    }

untilÀº whileÀÇ ¹Ý´ë°¡ µÈ´Ù. ±×·¯³ª ù ·çÇÁ¸¦ µ¹±â Àü¿¡ Á¶°Ç¹®À» È®ÀÎÇÏ´Â °ÍÀº ¸¶Âù°¡ÁöÀÌ´Ù.

if ³ª unless ¾È¿¡¼­ ·çÇÁÁ¦¾î¹®Àº µ¿ÀÛÇÏÁö ¾Ê´Â´Ù. ¿Ö³Ä¸é ±×°Ç ·çÇÁ°¡ ¾Æ´Ï±â ¶§¹®ÀÌ´Ù. '½ÇÇ๮ ¼ö½Ä¾î'Ç׿¡¼­ º¸¾ÒµíÀÌ, ÀÌÁß Áß°ýÈ£¸¦ »ç¿ëÇÔÀ¸·Î½á ·çÇÁÁ¦¾î¹®À» »ç¿ëÇÒ ¼ö ÀÖ´Ù.

    if (/pattern/) {{
        last if /fred/;
        next if /barney/; # same effect as "last", but doesn't document as well
        # do something here
    }}

ÀÌ´Â ºí¶ôÀº ½ÇÇàÀ» ÇÑ ¹øÇÏ´Â ·çÇÁ¿Í °°±â ¶§¹®¿¡ °¡´ÉÇÏ´Ù. '±âº» BLOCK°ú Switch¹®'À» ÂüÁ¶Ç϶ó.

ÆÞ 4¿¡¼­ »ç¿ëÇÒ ¼ö ÀÖ¾ú´ø while/if BLOCK BLOCK Àº ÆÞ 5¿¡¼­´Â »ç¿ëÇÒ ¼ö ¾ø´Ù. if BLOCK Àº if (do BLOCK) ÀÇ ÇüÅ·Π¹Ù²ã¶ó.


2.2.7. For·çÇÁ

ÆÞ·Î ÀÛ¼ºÇÑ C¹æ½ÄÀÇ for·çÇÁ´Â ´ÙÀ½°ú °°°í,

    for ($i = 1; $i < 10; $i++) {
        ...
    }

ÀÌ´Â ´ÙÀ½°ú µ¿ÀÏÇÏ´Ù.

    $i = 1;
    while ($i < 10) {
        ...
    } continue {
        $i++;
    }

À§ µÑ¿¡´Â ¾à°£ÀÇ ´Ù¸¥ Á¡ÀÌ ÀÖ´Ù. for·çÇÁ¿¡¼­ myÅ°¿öµå¸¦ ÅëÇØ ¼±¾ðµÈ º¯¼öÀÇ ÂüÁ¶¹üÀ§´Â Á¤È®È÷ for·çÇÁ°¡ µÈ´Ù.

º¸ÅëÀÇ ¹è¿­À妽º¸¦ »ç¿ëÇÏ´Â ·çÇÁ¿Í´Â ´Ù¸£°Ô, for¹®Àº ÇÑ °¡Áö ±â´ÉÀÌ ´õ ÀÖ´Ù. ´ÙÀ½ ¿¹ÀÇ for¹®ÀÇ Á¶°Ç¹®À» º¸¸é, ¸í½ÃÀûÀ¸·Î STDINÀÇ EOF¸¦ È®ÀÎÇÏÁö ¾Ê°í, ´ÜÁö <STDIN>¸¦ »ç¿ëÇÏ´Â °Í¸¸À¸·Îµµ ¾Ï½ÃÀûÀ¸·Î ±× ±â´ÉÀ» ¼öÇàÇÏ°í ÀÖ´Ù.

    $on_a_tty = -t STDIN && -t STDOUT;
    sub prompt { print "yes? " if $on_a_tty }
    for ( prompt(); <STDIN>; prompt() ) {
        # do something
    }

Áï, for·çÇÁ¿¡¼­ readline ¶Ç´Â <EXPR> ·Î ÀÔ·ÂÀ» Á¶°Ç¹®¿¡ »ç¿ëÇÏ´Â °ÍÀº ´ÙÀ½°ú µ¿ÀÏÇÑ °á°ú¸¦ ³º´Â´Ù. ÀÌ·¯ÇÑ Æ¯¼ºÀº while·çÇÁÀÇ Á¶°Ç¹®¿¡ ´ëÇؼ­µµ ¸¶Âù°¡ÁöÀÌ´Ù.

    for ( prompt(); defined( $_ = <STDIN> ); prompt() ) {
        # do something
    }


2.2.8. Foreach·çÇÁ

foreach·çÇÁ´Â list¿¡ ´ëÇؼ­ ¹Ýº¹¹®À» ¼öÇàÇÏ°í, ±× listÀÇ °¢°¢ÀÇ ¿ä¼Ò¸¦ Â÷·Ê·Î VAR·Î ¼³Á¤ÇÑ´Ù. ¸¸¾à º¯¼ö°¡ my Å°¿öµå¿Í ÇÔ²² ¿Â´Ù¸é, ÂüÁ¶¹üÀ§´Â ±× ·çÇÁ°¡ µÈ´Ù. ±×·¸Áö ¾Ê´Ù¸é, ±× º¯¼ö´Â ¾Ï½ÃÀûÀ¸·Î ·çÇÁ¿¡ ´ëÇÑ Áö¿ªº¯¼ö°¡ µÇ¸ç, ·çÇÁ¸¦ ºüÁ®³ª°¥¶§ ·çÇÁ°¡ ½ÇÇàµÇ±â ÀüÀÇ °ªÀ» °®°Ô µÈ´Ù. ¸¸¾à ±× º¯¼ö°¡ ÀÌÀü¿¡ my·Î ¼±¾ðµÇ¾ú´Ù¸é, Àü¿ªº¯¼ö ´ë½Å¿¡ ±× º¯¼ö¸¦ »ç¿ëÇÏ°Ô µÈ´Ù. ±×·¯³ª ÀÌ °æ¿ì¿¡µµ ·çÇÁÀÇ Áö¿ªº¯¼ö·Î »ç¿ëµÈ´Ù. ÀÌ ¾Ï½ÃÀû Áö¿ªº¯¼öÈ­´Â foreach·çÇÁ ³»¿¡¼­¸¸ È¿·ÂÀ» ¹ÌÄ£´Ù.

foreach´Â »ç½Ç»ó forÅ°¿öµå¿Í µ¿ÀÏÇÏ´Ù. ±×·¯¹Ç·Î °¡µ¶¼ºÀ» À§ÇØ foreach¸¦ »ç¿ëÇÏ´ø°¡ °£°áÇÔÀ» À§ÇØ for¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¸¸¾à VAR°¡ »ý·«µÇ¸é °¢°¢ÀÇ ¿ä¼Ò´Â $_·Î ¼³Á¤µÈ´Ù.

LISTÀÇ ¿ä¼Ò´Â Áº¯°ªÀÌ µÉ ¼ö ÀÖ´Ù. Áï VAR°ªÀ» ¼öÁ¤ÇÔÀ¸·Î½á LISTÀÇ ¿ä¼ÒÀÇ °ªÀ» ¹Ù²Ü ¼ö ÀÖ´Ù. ¸¸¾à LISTÀÇ ¿ä¼Ò´Â Áº¯°ªÀÌ ¾Æ´Ñ °æ¿ì´Â, ±× ¿ä¼ÒÀÇ °ªÀ» ¹Ù²Ü ¼ö ¾ø´Ù. Áï, foreach·çÇÁÀÇ index º¯¼ö´Â ±× ¸®½ºÆ®ÀÇ °¢°¢ÀÇ ¿ä¼ÒÀÇ ¾Ï½ÃÀûÀÎ º°¸íÀÌ µÈ´Ù.

°æ°í: ¸¸¾à LISTÀÇ ÀϺκÐÀÌ ¹è¿­ÀÎ °æ¿ì´Â, ·çÇÁ ³»¿¡¼­ ¿ä¼Ò¸¦ ´õÇϰųª »¬ ¶§(¿¹¸¦ µé¾î splice¸¦ »ç¿ëÇÏ¿©) foreach°¡ ¾î¶»°Ô µ¿ÀÛÇؾßÇÒÁö È¥¶õ½º·¯¿öÇÑ´Ù. ±×·¯¹Ç·Î ±×·¸°Ô ÇÏÁö ¸»¾Æ¶ó.

tie¸¦ »ç¿ëÇÑ º¯¼ö³ª Ư¼öº¯¼ö¸¦ VARÀÇ º¯¼ö·Î »ç¿ëÇÏÁö ¸»¾Æ¶ó.

´ÙÀ½Àº for¹®À» ¾î¶»°Ô »ç¿ëÇÏ´ÂÁö º¸¿©ÁÖ±â À§ÇÑ ¿¹Á¦ÀÌ´Ù.

    for (@ary) { s/foo/bar/ }

    for my $elem (@elements) {
        $elem *= 2;
    }

    for $count (10,9,8,7,6,5,4,3,2,1,'BOOM') {
        print $count, "\n"; sleep(1);
    }

    for (1..15) { print "Merry Christmas\n"; }

    foreach $item (split(/:[\\\n:]*/, $ENV{TERMCAP})) {
        print "Item: $item\n";
    }

¾î¶² ¾Ë°í¸®ÁòÀ» C ÇÁ·Î±×·¡¸Ó°¡ ÆÞ·Î ÀÛ¼ºÇÑ´Ù¸é ¾Æ¸¶ ´ÙÀ½°ú °°ÀÌ ÇÒ °ÍÀÌ´Ù.

    for (my $i = 0; $i < @ary1; $i++) {
        for (my $j = 0; $j < @ary2; $j++) {
            if ($ary1[$i] > $ary2[$j]) {
                last; # can't go to outer :-(
            }
            $ary1[$i] += $ary2[$j];
        }
        # this is where that last takes me
    }

¹Ý¸é¿¡ ÆÞ ÇÁ·Î±×·¡¸Ó°¡ °ü¿ë¾î±¸¸¦ »ç¿ëÇÏ¿© Á»´õ Æí¾ÈÇÑ ¹æ½ÄÀ¸·Î ÀÛ¼ºÇÑ´Ù¸é ´ÙÀ½°ú °°À» °ÍÀÌ´Ù.

    OUTER: for my $wid (@ary1) {
    INNER:   for my $jet (@ary2) {
                next OUTER if $wid > $jet;
                $wid += $jet;
             }
          }

¾î¶² °ÍÀÌ ´õ ½¬¿öº¸À̴°¡? µÎ¹ø° ¹æ½ÄÀº ´õ ±ò²ûÇÏ°í, ¾ÈÀüÇϸç, ºü¸£´Ù. µÎ ¹ø° ¹æ½ÄÀÌ °¡µ¶¼ºÀÌ ´õ ³ôÀ¸¹Ç·Î Äڵ尡 ±ò²ûÇÏ´Ù. ¾ÈÂÊ·çÇÁ¿Í ¹Ù±ùÂÊ·çÇÁÀÇ »çÀÌ¿¡ »õ·Î¿î Äڵ带 µ¡ºÙÀÌ´Â °æ¿ì, ±× »õ·Î¿î Äڵ尡 ½Ç¼ö·Î ½ÇÇàµÇÁö ¾ÊÀ» ¼öµµ ÀÖ´Ù. µÎ ¹ø° ¹æ½Ä¿¡¼­ next¹®Àº ¾ÈÂÊ·çÇÁ¸¦ Á¾·áÇÏ´Â ¹æ½ÄÀÌ ¾Æ´Ï¶ó ¸í½ÃÀûÀ¸·Î ¹Ù±ùÂÊ ·çÇÁ¸¦ ½ÇÇàÇÑ´Ù. ±×·¯¹Ç·Î ´õ ¾ÈÀüÇÏ´Ù. ±×¸®°í ÆÞÀº for¹æ½ÄÀÇ ·çÇÁº¸´Ù foreach¹æ½ÄÀÇ ·çÇÁ¸¦ ´õ ºü¸£°Ô ½ÇÇàÇÑ´Ù.


2.2.9. ±âº» BLOCK°ú Switch¹®

BLOCKÀº ¶óº§ÀÌ ÀÖ°Ç ¾ø°Ç ±× ÀÚü·Î "Çѹø ½ÇÇàµÇ´Â ·çÇÁ"¿Í °°´Ù. ±×·¯¹Ç·Î ºí¶ôÀ» ºüÁ®³ª°¡°Å³ª ´Ù½Ã ½ÇÇàÇϴµ¥ ·çÇÁÁ¦¾î¹®À» »ç¿ëÇÒ ¼ö ÀÖ´Ù. eval{}°ú sub{} ±×¸®°í (»ç¶÷µéÀÇ ±â´ë¿Í´Â ´Ù¸£°Ô) do{} ¿¡ ´ëÇؼ­´Â ¿¹¿Ü°¡ µÈ´Ù. continue ºí¶ôÀº ¼±ÅÃÀûÀÌ´Ù.

BLOCK±¸Á¶´Â switch¹®À» ¸¸µå´Âµ¥ ƯÈ÷ ÁÁ´Ù.

    SWITCH: {
        if (/^abc/) { $abc = 1; last SWITCH; }
        if (/^def/) { $def = 1; last SWITCH; }
        if (/^xyz/) { $xyz = 1; last SWITCH; }
        $nothing = 1;
    }

ÆÞ¿¡´Â °ø½ÄÀûÀÎ switch¹®ÀÌ ¾ø´Ù. ¿Ö³ÄÇϸé ÀÌ¹Ì switch¹®°ú ¸¶Âù°¡Áö·Î µ¿ÀÛÇÏ´Â ¸î °¡Áö ¹æ¹ýÀÌ ÀÌ¹Ì Àֱ⠶§¹®ÀÌ´Ù.

´Ù¸¸, ÆÞ 5.8ºÎÅÍ´Â ´ÙÀ½°ú °°ÀÌ Çϸé Switch È®Àå±â´ÉÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù.

        use Switch;

ÇÏÁö¸¸ À̸¦ »ç¿ëÇÑ switch¹®Àº ÃÖ´ëÇÑÀÇ ¼Óµµ¸¦ ³»Áö´Â ¸øÇÑ´Ù. ¿Ö³Ä¸é ±×·¸°Ô »ç¿ëÇÑ switch¹®Àº ¾ð¾î¸¦ ±¸¼ºÇÏ´Â ºÎºÐÀº ¾Æ´Ï±â ¶§¹®ÀÌ´Ù. (½ÇÁ¦ ±¸ÇöÀº source filterÀ» ÅëÇØ ÀÌ·ç¾îÁ®ÀÖ´Ù.) ±×·¯³ª ¾Æ¹«Æ° ÀÌ·± ¹æ½Äµµ »ç¿ë°¡´ÉÇÏ°í, ±×°ÍÀº ¸Å¿ì À¯¿¬ÇÏ°Ô µ¿ÀÛÇÑ´Ù.

À§¿¡¼­ÀÇ BLOCK±¸Á¶¿Ü¿¡µµ, ´ÙÀ½°ú °°ÀÌ ¾µ ¼ö ÀÖ´Ù.

    SWITCH: {
        $abc = 1, last SWITCH  if /^abc/;
        $def = 1, last SWITCH  if /^def/;
        $xyz = 1, last SWITCH  if /^xyz/;
        $nothing = 1;
    }

(¸¸¾à ·çÇÁÁ¦¾î'¿¬»êÀÚ'¸¦ ÇÑ Ç¥Çö¾È¿¡ »ç¿ëÇÒ ¼ö ÀÖ´Ù´Â Á¡À» »ý°¢Çϸé, Àú°ÍÀº º¸±âº¸´Ù ÀÌ»óÇÏÁö ¾Ê´Ù. Àú°ÍÀº ÀÌÁø ÄÞ¸¶ ¿¬»êÀÚ¸¦ »ç¿ëÇÑ °ÍÀÌ´Ù. perlopÀÇ 'ÄÞ¸¶ ¿¬»êÀÚ'¸¦ ÂüÁ¶Ç϶ó.)

¶Ç´Â

    SWITCH: {
        /^abc/ && do { $abc = 1; last SWITCH; };
        /^def/ && do { $def = 1; last SWITCH; };
        /^xyz/ && do { $xyz = 1; last SWITCH; };
        $nothing = 1;
    }

¶Ç´Â Á» ´õ "proper" switch¹®¿¡ °¡±õµµ·Ï ´ÙÀ½°ú °°ÀÌ ¾µ ¼ö ÀÖ´Ù.

    SWITCH: {
        /^abc/      && do {
                            $abc = 1;
                            last SWITCH;
                       };

        /^def/      && do {
                            $def = 1;
                            last SWITCH;
                       };

        /^xyz/      && do {
                            $xyz = 1;
                            last SWITCH;
                        };
        $nothing = 1;
    }

¶Ç´Â

    SWITCH: {
        /^abc/ and $abc = 1, last SWITCH;
        /^def/ and $def = 1, last SWITCH;
        /^xyz/ and $xyz = 1, last SWITCH;
        $nothing = 1;
    }

¶Ç´Â ½ÉÁö¾î ²ûÁ÷ÇÏ°Ô

    if (/^abc/)
        { $abc = 1 }
    elsif (/^def/)
        { $def = 1 }
    elsif (/^xyz/)
        { $xyz = 1 }
    else
        { $nothing = 1 }

switch¹®ÀÇ ÀϹÝÀûÀÎ °ü¿ë¾î¸¦ »ìÆ캸ÀÚ. Á¤±ÔÇ¥Çö½ÄÀ» ÆíÇÏ°Ô »ç¿ëÇϱâÀ§ÇØ, º¯¼ö¸¦ Àӽ÷Π$_º¯¼ö¿¡ ÇÒ´çÇÏ´Â foreachÀÇ ±â´ÉÀ» ÀÌ¿ëÇÑ ´ÙÀ½ ¹æ½ÄÀÌ ÀÖ´Ù.

    SWITCH: for ($where) {
                /In Card Names/     && do { push @flags, '-e'; last; };
                /Anywhere/          && do { push @flags, '-h'; last; };
                /In Rulings/        && do {                    last; };
                die "unknown value for form variable where: `$where'";
            }

¶Ç ´Ù¸¥ Àç¹ÌÀÖ´Â ¹æ½ÄÀº, do ºí¶ôÀ» »ç¿ëÇÏ¿© °ªÀ» ¸®ÅÏÇÏ´Â ¹æ½ÄÀÌ´Ù.

    $amode = do {
        if     ($flag & O_RDONLY) { "r" }       # XXX: isn't this 0?
        elsif  ($flag & O_WRONLY) { ($flag & O_APPEND) ? "a" : "w" }
        elsif  ($flag & O_RDWR)   {
            if ($flag & O_CREAT)  { "w+" }
            else                  { ($flag & O_APPEND) ? "a+" : "r+" }
        }
    };

¶Ç´Â

        print do {
            ($flags & O_WRONLY) ? "write-only"          :
            ($flags & O_RDWR)   ? "read-write"          :
                                  "read-only";
        };

¶Ç´Â ¸¸¾à ¹Ýȯ°ªµéÀÌ ¸ðµÎ Âü°ªÀ» °¡Áö´Â °æ¿ì¶ó¸é, ´ÙÀ½°ú °°Àº ¹æ½ÄÀ» ¾µ ¼ö ÀÖ´Ù.

    #!/usr/bin/perl
    # pick out jargon file page based on browser
    $dir = 'http://www.wins.uva.nl/~mes/jargon';
    for ($ENV{HTTP_USER_AGENT}) {
        $page  =    /Mac/            && 'm/Macintrash.html'
                 || /Win(dows )?NT/  && 'e/evilandrude.html'
                 || /Win|MSIE|WebTV/ && 'm/MicroslothWindows.html'
                 || /Linux/          && 'l/Linux.html'
                 || /HP-UX/          && 'h/HP-SUX.html'
                 || /SunOS/          && 's/ScumOS.html'
                 ||                     'a/AppendixB.html';
    }
    print "Location: $dir/$page\015\012\015\012";

Àú ¹æ½ÄÀº ¸ðµç °æ¿ìÀÇ ¹Ýȯ°ªµéÀÌ Âü°ªÀ» °¡Áø´Ù°í È®½ÅÇÏ´Â °æ¿ì¿¡ ¾µ ¼ö ÀÖ°í, ¾Æ´Ï¶ó¸é ¾Õ¿¡¼­ ³ª¿Â ?: ¸¦ »ç¿ëÇؾßÇÑ´Ù.

¸¶Áö¸·À¸·Î, switch¹® ´ë½Å¿¡ ¼­ºê·çƾÀÇ ÂüÁ¶°ªÀ» °¡Áö´Â Çؽ¬¸¦ »ç¿ëÇصµ µÈ´Ù.


2.2.10. Goto¹®

(¿ªÀÚ ÁÖ: »ç½Ç À̺κÐÀº ¹ø¿ª¿¡¼­ »©°í ½ÍÀº ºÎºÐÀÌ´Ù. Goto´Â ´ëºÎºÐÀÇ °æ¿ì »ç¿ëÇÏÁö ¾ÊÀ» °ÍÀ» ±ÇÇϱ⠶§¹®ÀÌ´Ù. ÇÏÁö¸¸ ¿ÏÀüÈ÷ »©¹ö¸®±â º¸´Ù´Â Áß¿äÇÑ ºÎºÐ¸¸ ¹ø¿ªÇϱâ·Î ÇÏ°Ú´Ù.)

ÆÞÀº goto¹®À» Áö¿øÇÑ´Ù. ÀÌ´Â ¼¼°¡Áö ÇüÅ°¡ ÀÖ´Ù. goto-LABEL, goto-EXPR, and goto-&NAME ÀÌ´Ù. ·çÇÁÀÇ LABELÀº goto¸¦ »ç¿ëÇÒ ¼ö ¾ø´Ù. ±×°Ç ´ÜÁö ·çÇÁÀÇ À̸§ÀÏ »ÓÀÌ´Ù.

goto-LABELÀº LABEL·Î À̸§ ºÙ¿©Áø ½ÇÇ๮À» ã¾Æ¼­ °Å±â¼­ºÎÅÍ °è¼Ó ½ÇÇà½ÃŲ´Ù. ±×°ÍÀº ÃʱâÈ­°¡ ÇÊ¿äÇÑ ±¸Á¶¿¡¼­ »ç¿ëµÉ ¼ö ÀÖ´Ù. ¿¹¸¦µé¸é ¼­ºê·çƾÀ̳ª foreach·çÇÁ°¡ ÀÖ´Ù. goto¹®Àº µ¿Àû ÂüÁ¶¹üÀ§ ¾îµð·Î°Ç Á¡ÇÁÇÒ ¼ö ÀÖ´Ù. ±×°ÍÀº ¼­ºê·çƾ ¹ÛÀÌ µÉ ¼öµµ ÀÖ´Ù. ±×·¯³ª ´ëºÎºÐÀÇ °æ¿ì last³ª die¸¦ ¾²´Â °ÍÀÌ ´õ ³´´Ù. ÆÞÀÇ ÀúÀÚ´Â goto-LABELÀÇ Çʿ伺À» ÀüÇô ´À³¢Áö ¾Ê°í ÀÖ´Ù. (ÀÌ´Â ÆÞ¿¡ ÇØ´çµÇ´Â °ÍÀÌ°í, C¿Í´Â ´Ù¸¥ ¹®Á¦´Ù.)

goto-EXPR´Â µ¿ÀûÀÎ ¶óº§À̸§À» »ç¿ëÇÒ ¼ö ÀÖ´Ù. À¯Áöº¸¼ö¼ºÀ» »ý°¢ÇÑ´Ù¸é, »ç¿ëÇÏÁö ¾Ê´Â °ÍÀ» ±ÇÇÑ´Ù.

    goto(("FOO", "BAR", "GLARCH")[$i]);

°ÅÀÇ ¸ðµç °æ¿ì¿¡ À־ goto¸¦ »ç¿ëÇÏ´Â °Íº¸´Ù´Â next, last, redo¸¦ »ç¿ëÇÏ´Â °ÍÀÌ ¸Å¿ì ¸Å¿ì ÈξÀ ³´´Ù. ¸¶Âù°¡Áö·Î ¿¡·¯ ó¸®ÇÏ´Â °æ¿ì¿¡ À־µµ goto¸¦ »ç¿ëÇÏ´Â °Íº¸´Ù´Â catch/throw¸¦ »ç¿ëÇÏ´Â °ÍÀÌ Çö¸íÇÏ´Ù.


2.2.11. POD: ÇÁ·Î±×·¥ ³»Àå ¹®¼­

ÆÞÀº ¼Ò½º ÄÚµå¿Í ¹®¼­¸¦ ¼¯´Â ¹æ½ÄÀ» Á¦°øÇÑ´Ù. ÁÙÀÇ °¡Á¤ óÀ½¿¡ '='±âÈ£¿Í ´Ü¾î¸¦ ³Ö´Â °ÍÀ¸·Î ¹®¼­ÀÇ ½ÃÀÛÀ» ¾Ë¸°´Ù.

    =head1 Here There Be Pods!

±×·¯¸é =cutÀ̶ó´Â ºÎºÐÀÌ ³ªÅ¸³¯ ¶§±îÁö ¹®¼­·Î °£ÁֵǹǷΠÄÄÆÄÀÏ·¯´Â ±× ºÎºÐÀ» ¹«½ÃÇÏ°Ô µÈ´Ù. ³»Àå ¹®¼­ÀÇ Æ÷¸Ë¿¡ ÀÚ¼¼ÇÑ »çÇ×Àº perlpodÀ» ÂüÁ¶Ç϶ó.

´ÙÀ½°ú °°ÀÌ ÇÏ¿© ¼Ò½º ÄÚµå¿Í ¹®¼­¸¦ ¼¯À» ¼ö ÀÖ´Ù.

    =item snazzle($)

    The snazzle() function will behave in the most spectacular
    form that you can possibly imagine, not even excepting
    cybernetic pyrotechnics.
    =cut back to the compiler, nuff of this pod stuff!
    sub snazzle($) {
        my $thingie = shift;
        .........
    }

pod ¹ø¿ª±â´Â pod¸í·É¾î·Î ½ÃÀÛÇÏ´Â ´Ü¶ô¸¸À» ó¸®ÇÑ´Ù. ±×·¯¹Ç·Î ´ÙÀ½ ¿¹¿¡¼­ warn ¸í·É¾î´Â pod ¹ø¿ª±â¿Í ÄÄÆÄÀÏ·¯ ¸ðµÎ¿¡°Ô ¹«½ÃµÈ´Ù.

    $a=3;
    =secret stuff
     warn "Neither POD nor CODE!?"
    =cut back
    print "got $a\n";

±×·¯³ª ¾ðÁ¦±îÁö³ª ÀÌ·± ¹æ½ÄÀ¸·Î µ¿ÀÛÇÒ °ÍÀ̶ó°í(warnÀÌ ¹«½ÃµÈ´Ù°í) ±â´ëÇÏÁö ¸»¾Æ¶ó. ¸ðµç pod ¹ø¿ª±â°¡ ÀÌ·± ¹æ½ÄÀ¸·Î Àß µ¿À۵Ǵ °Íµµ ¾Æ´Ï°í, ¾î¼¸é Èʳ¯¿¡´Â ÄÄÆÄÀÏ·¯°¡ ÀÌ·± ºÎºÐÀ» ±î´Ù·Ó°Ô Á¦ÇÑÇÒÁöµµ ¸ð¸¥´Ù.

ÁÖ¼®À» ºü¸£°Ô ÀÛ¼ºÇÏ·Á´Â ¿ëµµ·Î pod ¸í·É¾î°¡ »ç¿ëµÇ±âµµ ÇÑ´Ù.


2.2.12. Plain Old Comments (Not!)

(¿ªÀÚÁÖ: ÀÌ ºÎºÐÀº ¹ø¿ª¿¡¼­ Á¦¿ÜÇÏ´Â °ÍÀÌ ÁÁ°Ú´Ù.)



sponsored by andamiro
sponsored by cdnetworks
sponsored by HP

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2009-03-05 16:13:52
Processing time 0.0171 sec