[[TableOfContents]] = ¹ø¿ª¹®¼­Á¤º¸ = == ¿øÀúÀÚ ¹× ¹ø¿ªÀÚ == ¿øÀúÀÚ : Á¤È®È÷ ¾Ë ¼ø ¾øÁö¸¸ Perl Documentation Team ÀÏ °ÍÀÌ´Ù. [[br]] ¹ø¿ªÀÚ : redneval@kldp.org == ¿µ¹®¿øº» Ãâó == ¸µÅ© : http://perldoc.perl.org/perlsyn.html [[br]] ºÐ·ù ¹× À̸§ : Perl 5.8.8 documentation - Language reference - perlsyn == ÀúÀÛ±Ç ¹× ¶óÀ̼¾½º == º» ¹ø¿ª¹®¼­ÀÇ ¹ø¿ªºÎºÐ¿¡ ÇØ´çµÇ´Â ºÎºÐÀÇ ¿ø ÀúÀÛ±ÇÀº redneval@kldp.org ¿¡ ÀÖ´Ù. ´Ù¸¸, ÀúÀ۱ǿ¡ µû¸¥ ¸ðµç ±Ç¸®´Â Free Software Foundation (FSF) ·Î À̾çÇÑ´Ù. º» ¹ø¿ª¹®¼­´Â ¿µ¹® perldocÀÇ ¶óÀ̼¾½º¿¡ µû¶ó GPLÀ» µû¸¥´Ù. ±×·¯¹Ç·Î, º» ¹ø¿ª¹®¼­ÀÇ GPL¹öÀüÀº ¿µ¹® perldocÀÇ GPL¹öÀüÀ» µû¸¥´Ù. ¸¸¾à, ¿µ¹® perldocÀÇ GPL¹öÀüÀÌ ¹Ù²î¸é, º» ¹ø¿ª¹®¼­ ¶ÇÇÑ ±× ¹Ù²ï ¹öÀüÀ¸·Î ¹Ù²ã¼­ »ç¿ëÇÒ ¼ö ÀÖ´Ù. == ¸µÅ© == ÆÞ¿¡ °üÇÑ ´Ù¸¥ ¹®¼­¸¦ º¸°í ½Í´Ù¸é [perldoc]À» Âü°íÇ϶ó. = ¹ø¿ª¹®¼­ = == À̸§ == perlsyn - ÆÞ ¹®¹ý == ¼³¸í == ÆÞ ÇÁ·Î±×·¥Àº, ¸Ç À§¿¡¼­ºÎÅÍ ¸Ç ³¡±îÁö ¼øÂ÷ÀûÀ¸·Î ½ÇÇàµÇ´Â ÀÏ·ÃÀÇ ¼±¾ðµé°ú ½ÇÇ๮µé·Î ±¸¼ºµÈ´Ù. ´Ù¸¸, ·çÇÁ, ¼­ºê·çƾ, ±×¸®°í ´Ù¸¥ Á¦¾î±¸Á¶¸¦ ÅëÇØ ÄÚµåÀÇ ¼ø¼­¸¦ ¶Ù¾î³ÑÀ» ¼öµµ ÀÖ´Ù. ÆÞÀº ÀÚÀ¯·Î¿î Çü½ÄÀÇ ÇÁ·Î±×·¡¹Ö ¾ð¾îÀ̸ç, Æ÷¸Ë°ú µé¿©¾²±â¸¦ ¿øÇÏ´Â ¹æ½ÄÀ¸·Î ÇÒ ¼ö ÀÖ´Ù. (Æ÷¸Ë°ú µé¿©¾²±â°¡ ¾Æ´Ï¶ó) °ø¹é¹®ÀÚµéÀÌ ÁÖ·Î ÅäÅ«µéÀ» ±¸ºÐÇÏ´Â ¿ªÇÒÀ» Çϴµ¥, ÀÌ´Â Æ÷¸Ë°ú µé¿©¾²±â°¡ Áß¿äÇÑ ¹®¹ýÀÇ ÀϺθ¦ Â÷ÁöÇÏ´Â ÆÄÀ̽ã°ú °°Àº ¾ð¾îµé°ú´Â ´Ù¸£´Ù. ÆÞÀÇ ¹®¹ýÀû ¿ä¼Òµé Áß ¸¹Àº °ÍµéÀÌ ¼±ÅÃÀûÀÌ´Ù. ÇÔ¼öÈ£ÃâÀ» ÇÒ ¶§ °ýÈ£°¡ ¾ø¾îµµ µÇ°í, º¯¼ö´Â ¼±¾ðµÇÁö ¾Ê¾Æµµ µÇ´Â µî, ¸í½ÃÀûÀÎ ¿ä¼Ò¸¦ »©¹ö·Áµµ µÈ´Ù. ÀÌ·± °ÍÀ» [DWIM] (Do What I Mean)À̶ó°í Çϴµ¥, ÀÌ·± °ÍÀÌ ÇÁ·Î±×·¡¸Ó°¡ Æí¾ÈÇÑ ½ºÅ¸ÀÏ·Î ÄÚµåÀÛ¼ºÀ» Çϰųª lazyÇϵµ·Ï Çã¿ëÇÑ´Ù. ÆÞÀº ¸¹Àº ´Ù¸¥ ¾ð¾î¿¡¼­ ¹®¹ý°ú ÄÁ¼ÁÀ» ºô·Á¿Ô´Ù. [awk], [sed], C, [Bourne Shell], [Smalltalk], [Lisp] ±×¸®°í ½ÉÁö¾î´Â ¿µ¾î·ÎºÎÅÍ. ´Ù¸¥ ¾ð¾îµéµµ Æ޷κÎÅÍ ¹®¹ý(ƯÈ÷ Á¤±ÔÇ¥Çö½Ä È®Àå)À» ºô·Á°¬´Ù. ±×·¯¹Ç·Î ´Ù¸¥ ¾ð¾î·Î ÇÁ·Î±×·¡¹ÖÇÏ´õ¶óµµ, ÆÞÀÇ Ä£¼÷ÇÑ ºÎºÐÀ» º¼ ¼ö ÀÖÀ» °ÍÀÌ´Ù. === ´Ü¾î¼³¸í === * ¹®Àå ¶Ç´Â ½ÇÇ๮ ¶Ç´Â ~¹® (statement) : ÆÞ¿¡¼­ÀÇ ¹®ÀåÀº ½ÇÇ๮À» ÀǹÌÇÑ´Ù. * ¼±¾ð(declaration) : ¼±¾ðÀº ½ÇÇ๮ÀÇ ÇÑ Á¾·ù°¡ ¾Æ´Ï¶ó, ¼±¾ðÀ» ¼öÇàÇÏ´Â ºÎºÐ¸¸À» ÀǹÌÇÑ´Ù. ±×·¯¹Ç·Î ¼±¾ð¹®Àº ¼±¾ð°ú ¹®Àå(½ÇÇ๮)ÀÇ ÇÕÀ¸·Î ÀÌ·ç¾îÁø´Ù. * ÅäÅ«(token) : º¯¼ö, ¿¬»êÀÚ, ±âŸ ¹®¹ýÄÚµå µîÀ» ±¸¼ºÇÏ´Â ÇϳªÀÇ ±âº» ´ÜÀ§¸¦ ¸»ÇÑ´Ù. * Æ÷¸Ë(format) : µé¿©¾²±â, ÁÙ¹Ù²Þ µîÀÇ code conventionÀ» ÀÏÄ´´Ù. * ¼±ÅÃÀû(optional) : 'ÇʼöÀû'ÀÇ ¹Ý´ë¸»ÀÌ´Ù. * lazy : '°ÔÀ¸¸¥'ÀÌ ¾Æ´Ï°í, 'ÄÚµùÀ» ÃÖ¼ÒÈ­ÇÏ´Â'À¸·Î º½ÀÌ ¿ÇÀ» °Í °°´Ù. ÀÌ´Â º¸´Â »ç¶÷ÀÇ °ßÇØ¿¡ µû¶ó ´Ù¸£°Ô ¹ø¿ªµÉ ¼ÒÁö°¡ ÀÖÀ¸¹Ç·Î ±×³É µÎ¾î¾ß ÇÑ´Ù. * ºí¶ô(block) : 'º¹ÇÕ ½ÇÇ๮'Ç×À» ÂüÁ¶Ç϶ó. * report format : ¾Æ¸¶µµ ¸ðµâ¿¡¼­ ÇÔ¼ö¸¦ exportÇÏ´Â ºÎºÐÀ» ¸»ÇÏ´Â °Í °°´Ù. * ´Ü¼ø ½ÇÇ๮(simple statement)°ú º¹ÇÕ ½ÇÇ๮(compound statement) : º¹ÇÕ ½ÇÇ๮Àº ºí¶ô±¸Á¶¸¦ Æ÷ÇÔÇÏ´Â ½ÇÇ๮À» ÀÏÄ´´Ù. * ÂüÁ¶¹üÀ§(scope) : Àǹ̸¦ ¸íÈ®È÷ Çϱâ À§ÇØ '¹üÀ§'´ë½Å 'ÂüÁ¶¹üÀ§'¶ó´Â ´Ü¾î¸¦ ¼±ÅÃÇÏ¿´´Ù. * proper : ÀÌ ´Ü¾î´Â ¿ø·¡ ÀÇ¹Ì¿Í ´Ù¸£°Ô ¹ø¿ªµÉ ¼ÒÁö°¡ ÀÖÀ¸¹Ç·Î ±×³É µÎ¾î¾ß ÇÑ´Ù. === ¼±¾ð === ÆÞ¿¡¼­ ¼±¾ðÀ» ÇؾßÇÒ À¯ÀÏÇÑ °ÍÀº report format°ú ¼­ºê·çƾÀÌ´Ù. (¶§¶§·Î´Â ½ÉÁö¾î ¼­ºê·çƾÀÇ ¼±¾ðµµ ÇÊ¿ä¾ø´Ù.) º¯¼ö¼±¾ðÀ» Çϸé, °ªÀ» ´ëÀÔÇϱâ Àü±îÁö´Â º¯¼ö´Â undef°ª(Á¤ÀǵÇÁö ¾ÊÀº °ª)À» °¡Áø´Ù. ¸¸¾à º¯¼ö¸¦ ¼ýÀÚ·Î ´Ù·ç¸é undef´Â 0°ªÀ¸·Î ´Ù·ïÁø´Ù. ¹®ÀÚ¿­·Î ¾²ÀÎ´Ù¸é ºó ¹®ÀÚ¿­ÀÎ ""·Î ´Ù·ïÁø´Ù. ÂüÁ¶°ªÀ¸·Î ¾²ÀÎ´Ù¸é ±×°ÍÀº error·Î ´Ù·ïÁø´Ù. ¸¸¾à ¿É¼Ç(use warning)À» ÅëÇØ °æ°í±â´ÉÀ» È°¼ºÈ­Çϸé, undef¸¦ ¹®ÀÚ¿­À̳ª ¼ýÀÚ·Î ´Ù·ê¶§¸¶´Ù uninitialized value ¶ó´Â °æ°í¸Þ½ÃÁö¸¦ º¼ °ÍÀÌ´Ù. ¸¶Áö¸·À¸·Î ´ÙÀ½°ú °°ÀÌ ºÒ¸°°ª(Âü ¶Ç´Â °ÅÁþ)À¸·Î ¾²ÀÏ °æ¿ì¸¦ º¸ÀÚ. {{{#!vim perl my $a; if ($a) {} }}} ÀÌ·± °æ¿ì, °æ°í¸Þ½ÃÁö´Â ¹ß»ýÇÏÁö ¾Ê´Â´Ù. (¿Ö³Ä¸é ÀÌ·± °æ¿ì º¯¼öÀÇ °ªÀÌ Á¤ÀǵǾú´À³Ä¸¦ »ìÇÇ°í °æ°í¸¦ ÇÏ´Â °ÍÀÌ ¾Æ´Ï°í, $aÀÇ °ªÀÌ ÂüÀÎÁö¸¸À» º¸±â ¶§¹®ÀÌ´Ù.) ++ , -- , += , -= , .= °°Àº ¿¬»êÀÚµéÀÇ °æ¿ì Áº¯°ªÀÌ Á¤ÀǵÇÁö ¾Ê¾Ò´õ¶óµµ °æ°í¸Þ½ÃÁö´Â ¹ß»ýÇÏÁö ¾Ê´Â´Ù. ¿¹¸¦ µé¸é ´ÙÀ½°ú °°´Ù. {{{#!vim perl my $a; $a++; }}} ¼±¾ðÀ» À§ÇÑ Å°¿öµå(my, local µî)´Â ½ÇÇ๮ÀÌ ¿Ã ¼ö ÀÖ´Â ¾î´À À§Ä¡¿¡¼­µç ³õÀÏ ¼ö ÀÖ´Ù. ±×·¯³ª ±× ½ÇÇ๮ÀÇ ½ÇÇà¿¡´Â ¾Æ¹«·± ¿µÇâÀ» ÁÖÁö ¾Ê´Â´Ù. ¼±¾ðÀº ÄÄÆÄÀÏ ½Ã°£¿¡ ¿µÇâÀÌ ¹ß»ýÇϱ⠶§¹®ÀÌ´Ù. º¸ÅëÀº ¸ðµç ¼±¾ð¹®ÀÌ ½ºÅ©¸³Æ®ÀÇ ¸Ç ¾ÕÀ̳ª ¸Ç µÚ¿¡ ¿À°Ô µÈ´Ù. ±×·±µ¥, my Å°¿öµå·Î ¼±¾ðµÈ private º¯¼ö¸¦ »ç¿ëÇÒ ¶§, ±× º¯¼ö¿Í °°Àº ºí¶ô¿¡ Á¸ÀçÇÏ´Â ¸ðµç ÄÚµå¿Í ¼­ºê·çƾÀº ±× º¯¼ö¿¡ Á¢±ÙÇÒ ¼ö ÀÖ´Ù´Â Á¡À» ÁÖÀÇÇؾßÇÑ´Ù. ¼­ºê·çƾÀ» ¼±¾ðÇÔÀ¸·Î½á, ¼­ºê·çƾÀÌ ¸¶Ä¡ ¸®½ºÆ® ¿¬»êÀÚÀÎ °Íó·³ "sub ¼­ºê·çƾÀ̸§"À̶ó°í ÇÔÀ¸·Î½á ¼­ºê·çƾÀ» Á¤ÀÇÇÏÁö¾Ê°í ´ÜÁö ¼±¾ð¸¸ ÇÏ´Â °ÍÀÌ °¡´ÉÇÏ´Ù. {{{#!vim perl sub myname; $me = myname $0 or die "can't get myname"; }}} ÷¾ðÀ» ÇÏÀÚ¸é, myname() ÇÔ¼ö´Â ´ÜÇ× ¿¬»êÀÚ°¡ ¾Æ´Ñ ¸®½ºÆ® ¿¬»êÀÚ·Î ´Ù·ïÁø´Ù´Â °ÍÀÌ´Ù. ±×·¯¹Ç·Î À§ÀÇ ¿¹¿¡¼­ || ´ë½Å¿¡ or ¸¦ »ç¿ëÇßÀ½¿¡ À¯ÀÇÇÏÀÚ. ±×·¯³ª, ¸¸¾à "sub myname ($)"·Î ¼±¾ðÀ» Çß´Ù¸é myname() ÇÔ¼ö´Â ´ÜÇ× ¿¬»êÀÚó·³ µ¿ÀÛÇϹǷΠ|| ¸»°íµµ or ¶ÇÇÑ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¼­ºê·çƾ ¼±¾ðÀº ¶ÇÇÑ require¹® ¶Ç´Â use¹®À» »ç¿ëÇÏ¿© ºÒ·¯¿Ã ¼ö ÀÖ´Ù. ÀÌ¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ »çÇ×Àº [perlmod]¸¦ º¸±â ¹Ù¶õ´Ù. ½ÇÇ๮µéÀº º¯¼öµéÀÇ ¼±¾ðÀ» Æ÷ÇÔÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª º¯¼ö¸¦ ¼±¾ðÇÏ´Â °Í°ú´Â º°°³·Î, ¼±¾ð¹®Àº ÀϹÝÀûÀÎ ½ÇÇ๮ÀÇ ¿ªÇÒÀ» ÇÑ´Ù. ÀÌ°ÍÀº ÄÄÆÄÀÏŸÀÓÈ¿°ú/·±Å¸ÀÓÈ¿°ú µÑ ¸ðµÎ¸¦ °¡Áö°í ÀÖ´Ù´Â ¶æÀÌ´Ù. #·Î ½ÃÀÛÇÏ´Â ºÎºÐºÎÅÍ ÁÙÀÇ ¸¶Áö¸·±îÁö°¡ ÁÖ¼®ÀÌ µÇ°í, ÀÌ ºÎºÐÀº ¹«½ÃµÈ´Ù. ´Ù¸¸ ¹®ÀÚ¿­À̳ª Á¤±ÔÇ¥Çö½Ä ³»ºÎÀÇ #Àº ¿¹¿ÜÀÌ´Ù. ¸ðµç ´Ü¼ø ½ÇÇ๮Àº ¼¼¹ÌÄÝ·ÐÀ¸·Î ³¡³­´Ù. ´Ù¸¸, ºí¶ôÀÇ ¸¶Áö¸· ½ÇÇ๮Àº ¿¹¿ÜÀ̸ç, ÀÌ °æ¿ì¿¡´Â ¼¼¹ÌÄÝ·ÐÀº ¼±ÅÃÀûÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù. ÇÏÁö¸¸ ³ªÁß¿¡ ºí¶ôÀÇ ³¡¿¡ Ãß°¡ÀûÀÎ ½ÇÇ๮À» Ãß°¡ÇÏ´Â °æ¿ì°¡ »ý±æ ¼ö ÀÖÀ¸¹Ç·Î, ¼¼¹ÌÄÝ·ÐÀ» ¾²±â¸¦ ±ÇÀåÇÑ´Ù. ÷¾ðÀ» ÇÏÀÚ¸é, eval {} ¿Í do {} °°Àº ¿¬»êÀÚµéÀº º¹ÇÕ ½ÇÇ๮°°ÀÌ »ý°åÁö¸¸, ½ÇÁ¦·Î´Â ¾Æ´Ï´Ù. ±×·¯¹Ç·Î ÀÌ ¿¬»êÀÚ°¡ ½ÇÇ๮ÀÇ ¸¶Áö¸·¿¡ À§Ä¡ÇÑ´Ù¸é, ¸í½ÃÀû Á¾·á¹®ÀÚÀÎ ¼¼¹ÌÄÝ·ÐÀÌ ÇÊ¿äÇÏ´Ù. === Âü(true)°ú °ÅÁþ(false) === ¼ýÀÚ 0, ¹®ÀÚ¿­ "0" ¶Ç´Â "", ºó ¸®½ºÆ® (), ±×¸®°í undef´Â booleanÀ¸·Î ´Ù·ïÁú ¶§, false°ªÀ» °®´Â´Ù. ÀÌ 5°¡Áö °æ¿ì¸¦ Á¦¿ÜÇÑ ¸ðµç ´Ù¸¥ °ªÀº true°ªÀ» °¡Áö°Ô µÈ´Ù. true¿¡ Negate¿¬»êÀÚÀÎ !°ú notÀÇ ¿¬»êÀ» ÃëÇϸé Ư¼öÇÑ false°ªÀ» °¡Áö°Ô µÈ´Ù. ÀÌ Æ¯¼öÇÑ false °ªÀº ¹®ÀÚ¿­·Î´Â "", ¼ýÀڷδ 0À¸·Î ´Ù·ïÁø´Ù. === ½ÇÇ๮ ¼ö½Ä¾î === ´Ü¼ø ½ÇÇ๮ µÚ¿¡´Â ¼±ÅÃÀûÀ¸·Î ÇϳªÀÇ ¼ö½Ä¾î°¡ ¿Ã ¼ö ÀÖ´Ù. ¼ö½Ä¾îÀÇ À§Ä¡´Â ½ÇÇ๮ µÚ, ¼¼¹ÌÄÝ·ÐÀÇ ¹Ù·Î ¾ÕÀÌ µÈ´Ù. °¡´ÉÇÑ ¼ö½Ä¾î´Â ´ÙÀ½°ú °°´Ù. {{{#!vim perl if EXPR unless EXPR while EXPR until EXPR foreach LIST }}} EXPRÀº "Á¶°Ç(¹®)"À̶ó°í ºÎ¸¥´Ù. ±×°ÍÀÇ Âü/°ÅÁþ °ª¿¡ µû¶ó¼­ ±× ¼ö½Ä¾î°¡ ¾î¶»°Ô µ¿ÀÛÇÏ´ÂÁö °áÁ¤ÇϰԵȴÙ. if·Î ½ÃÀ۵Ǵ ¼ö½Ä¾î´Â ±× Á¶°ÇÀÌ Âü°ªÀ» °¡Áú °æ¿ì(¿¡¸¸) ½ÇÇ๮À» ÇÑ ¹ø ½ÇÇàÇÑ´Ù. unlessÀÇ °æ¿ì´Â ¹Ý´ë·Î µ¿ÀÛÇÑ´Ù. Áï, Á¶°ÇÀÌ °ÅÁþ°ªÀ» °¡Áú °æ¿ì(¿¡¸¸) ½ÇÇ๮À» ÇÑ ¹ø ½ÇÇàÇÑ´Ù. {{{#!vim perl print "Basset hounds got long ears" if length $ear >= 10; go_outside() and play() unless $is_raining; }}} foreach ¼ö½Ä¾î´Â ÀÏÁ¾ÀÇ ¹Ýº¹¹®ÀÌ´Ù. LISTÀÇ °¢°¢ÀÇ ¿ä¼Ò¿¡ ´ëÇØ ½ÇÇ๮À» Çѹø¾¿ ½ÇÇàÇÑ´Ù. À̶§, ½ÇÇ๮ ³»¿¡¼­ °¢°¢ÀÇ ¿ä¼Ò´Â $_¶ó´Â º¯¼ö¸¦ ÅëÇØ ´Ù·ê ¼ö ÀÖ´Ù. {{{#!vim perl print "Hello $_!\n" foreach qw(world Dolly nurse); }}} while ¼ö½Ä¾î´Â EXPRÀÌ Âü°ªÀ» °¡Áö´Â µ¿¾È¿¡ ½ÇÇ๮À» ¹Ýº¹ÇÏ¿© ½ÇÇàÇÑ´Ù. untilÀº ±× ¹Ý´ë·Î µ¿ÀÛÇÑ´Ù. until ¼ö½Ä¾î´Â EXPRÀÌ °ÅÁþ°ªÀ» °¡Áö´Â µ¿¾È¿¡ ½ÇÇ๮À» ¹Ýº¹ÇÏ¿© ½ÇÇàÇÑ´Ù. {{{#!vim perl # Both of these count from 0 to 10. print $i++ while $i <= 10; print $j++ until $j > 10; }}} while°ú until¼ö½Ä¾î¿¡¼­ Á¶°Ç¹®Àº ½ÇÇ๮ÀÌ ½ÇÇàµÇ±â Àü¿¡ ¸ÕÀú °è»êµÈ´Ù. ÇÏÁö¸¸ do {} ±¸¹®À» »ç¿ëÇÏ¸é ½ÇÇ๮À» ¸ÕÀú ½ÇÇàÇÒ ¼ö ÀÖ´Ù. Áö±ÝÀº ¾²Áö¸» °ÍÀ» ±ÇÇÏ´Â do-SUBROUTINE ±¸¹®ÀÇ °æ¿ìµµ ¸¶Âù°¡Áö·Î ¼­ºê·çƾÀÌ ¸ÕÀú ½ÇÇàµÈ´Ù. ±×·¡¼­ ´ÙÀ½°ú °°ÀÌ ·çÇÁ¸¦ ¾µ ¼ö ÀÖ´Ù. {{{#!vim perl do { $line = ; ... } until $line eq ".\n"; }}} ÀÚ¼¼ÇÑ °ÍÀº do ÇÔ¼ö¿¡ °üÇÑ ¹®¼­¸¦ º¸¶ó. ÷¾ðÇÏÀÚ¸é, ¹Ø¿¡¼­ ´Ù·ç°Ô µÉ ·çÇÁ Á¦¾î ½ÇÇ๮(next, last)Àº do {} ±¸¹®À» Áö¿øÇÏÁö ¾ÊÀ½À» ¹àÈù´Ù. ¿Ö³ÄÇϸé, ¼ö½Ä¾î´Â ·çÇÁ ¶óº§À» °®Áö ¾Ê±â ¶§¹®ÀÌ´Ù. ÀÌ Á¡Àº À¯°¨ÀÌ´Ù. ±×·¡¼­ next¸¦ »ç¿ëÇÏ¿© ±×·± ±â´ÉÀ» ±¸ÇöÇÏ·Á¸é do {} ±¸¹® ¾È¿¡ ¶Ç ´Ù¸¥ ºí¶ôÀÌ ÇÊ¿äÇÏ°í, lastÀÇ °æ¿ì´Â do {} ±¸¹® ¹Û¿¡ ¶Ç ´Ù¸¥ ºí¶ôÀÌ ÇÊ¿äÇÏ´Ù. ±×·¯¹Ç·Î nextÀÇ °æ¿ì´Â ´ÜÁö ÀÌÁß °ýÈ£¸¦ »ç¿ëÇÏ¸é µÈ´Ù. {{{#!vim perl do {{ next if $x == $y; # do something here }} until $x++ > $z; }}} lastÀÇ °æ¿ì´Â Á¶±Ý ´õ º¹ÀâÇÏ°Ô Ã³¸®ÇØ¾ß ÇÑ´Ù. {{{#!vim perl LOOP: { do { last if $x = $y**2; # do something here } while $x++ <= $z; } }}} °æ°í : my ¼±¾ð¹®À» ½ÇÇ๮ ¼ö½Ä¾î¿Í °°ÀÌ ¾²Áö ¸»¾Æ¶ó. Áï, "my $x if ... "°ú °°ÀÌ Á¶°ÇºÎ ¼±¾ð¹®À» »ç¿ëÇÏÁö ¸»¾Æ¶ó. ÀÌ·± ½ÇÇ๮¿¡ ´ëÇØ perlÀÇ µ¿ÀÛÀÌ Á¤ÀǵÇÁö ¾Ê¾Ò±â ¶§¹®ÀÌ´Ù. ¾î¼¸é perlÀÇ ¹öÀü¿¡ µû¶ó ´Ù¸£°Ô µ¿ÀÛÇÒÁöµµ ¸ð¸¥´Ù. === º¹ÇÕ ½ÇÇ๮ === ÆÞ¿¡¼­´Â, ÀÏ·ÃÀÇ ½ÇÇ๮¿¡ ºí¶ôÀ̶ó°í ºÒ¸®´Â ÂüÁ¶¹üÀ§¸¦ ¼³Á¤ÇÒ ¼ö ÀÖ´Ù. ¶§¶§·Î ºí¶ôÀº ½ÇÇ๮À» Æ÷ÇÔÇÏ°í ÀÖ´Â ÆÄÀÏ¿¡ ÀÇÇؼ­ ¼³Á¤µÈ´Ù. ±×¸®°í ¶§¶§·Î´Â (¿¹¸¦ µé¾î eval ÇÔ¼öÀÇ °æ¿ì) ¹®ÀÚ¿­ÀÇ ¹üÀ§¿¡ ÀÇÇØ ¼³Á¤µÈ´Ù. ±×·¯³ª ÀϹÝÀûÀ¸·Î ºí¶ôÀº Áß°ýÈ£¶ó°í ºÒ¸®´Â '{' ¿Í '}' ¿¡ ÀÇÇؼ­ ¼³Á¤µÈ´Ù. À̸¦ BLOCKÀ̶ó°í ºÎ¸£°Ú´Ù. ´ÙÀ½ÀÇ º¹ÇÕ ½ÇÇ๮À» »ç¿ëÇÏ¿© ½ÇÇàÈ帧À» Á¦¾îÇÒ ¼ö ÀÖ´Ù. {{{#!vim perl 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 ¿Í °°Àº½ÄÀ¸·Î Áß°ýÈ£ ¾øÀÌ ¾µ ¼ö´Â ¾ø´Ù´Â ¶æÀÌ´Ù. Áß°ýÈ£¸¦ »ç¿ëÇÏÁö ¾Ê°í Á¶°Ç¹®À» ¾²·Á¸é ´Ù¸¥ ¹æ¹ýÀ» ½á¾ßÇÑ´Ù. {{{#!vim perl 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 ÀÌ ½ÇÇàµÈ´Ù. === ·çÇÁ Á¦¾î === next¹®Àº ·çÇÁÀÇ ´ÙÀ½ ¹Ýº¹¹®À» ½ÇÇàÇÏ°Ô ÇÑ´Ù. {{{#!vim perl LINE: while () { next LINE if /^#/; # discard comments ... } }}} last¹®Àº Áï½Ã ·çÇÁ¸¦ ºüÁ®³ª°¡°Ô ÇÑ´Ù. À̶§´Â continue ºí¶ôÀº ½ÇÇàµÇÁö ¾Ê´Â´Ù. {{{#!vim perl LINE: while () { last LINE if /^$/; # exit when done with header ... } }}} redo¹®Àº Á¶°Ç¹®ÀÌ Âü/°ÅÁþÀÎÁö º¸Áö ¾Ê°í ·çÇÁ¸¦ ´Ù½Ã ½ÇÇàÇÑ´Ù. À̶§ continue ºí¶ôÀº ½ÇÇàµÇÁö ¾Ê´Â´Ù. ÀÔ·ÂÀÌ ¹«¾ùÀ̾ú´ÂÁö¿¡ µû¶ó ¿¹¿ÜÀûÀ¸·Î ó¸®ÇÏ°í ½Í¾îÇÏ´Â ÇÁ·Î±×·¥¿¡ ÀÇÇØ redo¹®ÀÌ »ç¿ëµÈ´Ù. ¿¹¸¦µé¾î, /etc/termcap°ú °°ÀÌ ÆÄÀÏÀ» ó¸®ÇÒ ¶§, ÀÔ·ÂÀÇ ¸¶Áö¸· ¹®ÀÚ°¡ ¹é½½·¡½¬·Î ´ÙÀ½ ÁÙÀÌ ´õ ÀÖÀ½À» ¾Ë¸± ¶§, À̸¦ °Ç³Ê¶Ù°í ´ÙÀ½ ÁÙÀ» ÀÔ·ÂÀ¸·Î ¹Þ°í ½ÍÀ» °ÍÀÌ´Ù. {{{#!vim perl while (<>) { chomp; if (s/\\$//) { $_ .= <>; redo unless eof(); } # now process $_ } }}} ÀÌ´Â Ãà¾à¹öÀüÀÌ°í, ¸í½ÃÀûÀΠǥÇöÀ» »ç¿ëÇÏ¿© ´Ù½Ã ÀÛ¼ºÇÏ¸é ´ÙÀ½°ú °°´Ù. {{{#!vim perl LINE: while (defined($line = )) { chomp($line); if ($line =~ s/\\$//) { $line .= ; redo LINE unless eof(); # not eof(ARGV)! } # now process $line } }}} ÷¾ðÀ» ÇÏÀÚ¸é, ¸¸¾à À§ÀÇ Äڵ忡 continue ºí¶ôÀÌ »ç¿ëµÇ¾ú´Ù¸é, if¹®ÀÇ Á¶°Ç¹®ÀÇ °ªÀÌ false°ªÀÎ ÁÙ(Áï, ¹é½½·¡½¬·Î ³¡³ªÁö¾Ê´Â ÁÙ)¿¡ ´ëÇؼ­¸¸ ±× ºí¶ôÀÌ ½ÇÇàµÈ´Ù (redo¹®Àº continueºí¶ôÀ» ½ÇÇàÇÏÁö ¾ÊÀ¸¹Ç·Î). continue¹®Àº line counter¸¦ ÃʱâÈ­Çϰųª ?PATTERN? ¿¬»êÀÚ¸¦ ÃʱâÈ­ÇÒ ¶§ Á¾Á¾ »ç¿ëµÈ´Ù. {{{#!vim perl # 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 ¾È¿¡¼­ ·çÇÁÁ¦¾î¹®Àº µ¿ÀÛÇÏÁö ¾Ê´Â´Ù. ¿Ö³Ä¸é ±×°Ç ·çÇÁ°¡ ¾Æ´Ï±â ¶§¹®ÀÌ´Ù. '½ÇÇ๮ ¼ö½Ä¾î'Ç׿¡¼­ º¸¾ÒµíÀÌ, ÀÌÁß Áß°ýÈ£¸¦ »ç¿ëÇÔÀ¸·Î½á ·çÇÁÁ¦¾î¹®À» »ç¿ëÇÒ ¼ö ÀÖ´Ù. {{{#!vim perl 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) ÀÇ ÇüÅ·Π¹Ù²ã¶ó. === For·çÇÁ === ÆÞ·Î ÀÛ¼ºÇÑ C¹æ½ÄÀÇ for·çÇÁ´Â ´ÙÀ½°ú °°°í, {{{#!vim perl for ($i = 1; $i < 10; $i++) { ... } }}} ÀÌ´Â ´ÙÀ½°ú µ¿ÀÏÇÏ´Ù. {{{#!vim perl $i = 1; while ($i < 10) { ... } continue { $i++; } }}} À§ µÑ¿¡´Â ¾à°£ÀÇ ´Ù¸¥ Á¡ÀÌ ÀÖ´Ù. for·çÇÁ¿¡¼­ myÅ°¿öµå¸¦ ÅëÇØ ¼±¾ðµÈ º¯¼öÀÇ ÂüÁ¶¹üÀ§´Â Á¤È®È÷ for·çÇÁ°¡ µÈ´Ù. º¸ÅëÀÇ ¹è¿­À妽º¸¦ »ç¿ëÇÏ´Â ·çÇÁ¿Í´Â ´Ù¸£°Ô, for¹®Àº ÇÑ °¡Áö ±â´ÉÀÌ ´õ ÀÖ´Ù. ´ÙÀ½ ¿¹ÀÇ for¹®ÀÇ Á¶°Ç¹®À» º¸¸é, ¸í½ÃÀûÀ¸·Î STDINÀÇ EOF¸¦ È®ÀÎÇÏÁö ¾Ê°í, ´ÜÁö ¸¦ »ç¿ëÇÏ´Â °Í¸¸À¸·Îµµ ¾Ï½ÃÀûÀ¸·Î ±× ±â´ÉÀ» ¼öÇàÇÏ°í ÀÖ´Ù. {{{#!vim perl $on_a_tty = -t STDIN && -t STDOUT; sub prompt { print "yes? " if $on_a_tty } for ( prompt(); ; prompt() ) { # do something } }}} Áï, for·çÇÁ¿¡¼­ readline ¶Ç´Â ·Î ÀÔ·ÂÀ» Á¶°Ç¹®¿¡ »ç¿ëÇÏ´Â °ÍÀº ´ÙÀ½°ú µ¿ÀÏÇÑ °á°ú¸¦ ³º´Â´Ù. ÀÌ·¯ÇÑ Æ¯¼ºÀº while·çÇÁÀÇ Á¶°Ç¹®¿¡ ´ëÇؼ­µµ ¸¶Âù°¡ÁöÀÌ´Ù. {{{#!vim perl for ( prompt(); defined( $_ = ); prompt() ) { # do something } }}} === 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¹®À» ¾î¶»°Ô »ç¿ëÇÏ´ÂÁö º¸¿©ÁÖ±â À§ÇÑ ¿¹Á¦ÀÌ´Ù. {{{#!vim perl 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 ÇÁ·Î±×·¡¸Ó°¡ ÆÞ·Î ÀÛ¼ºÇÑ´Ù¸é ¾Æ¸¶ ´ÙÀ½°ú °°ÀÌ ÇÒ °ÍÀÌ´Ù. {{{#!vim perl 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 } }}} ¹Ý¸é¿¡ ÆÞ ÇÁ·Î±×·¡¸Ó°¡ °ü¿ë¾î±¸¸¦ »ç¿ëÇÏ¿© Á»´õ Æí¾ÈÇÑ ¹æ½ÄÀ¸·Î ÀÛ¼ºÇÑ´Ù¸é ´ÙÀ½°ú °°À» °ÍÀÌ´Ù. {{{#!vim perl OUTER: for my $wid (@ary1) { INNER: for my $jet (@ary2) { next OUTER if $wid > $jet; $wid += $jet; } } }}} ¾î¶² °ÍÀÌ ´õ ½¬¿öº¸À̴°¡? µÎ¹ø° ¹æ½ÄÀº ´õ ±ò²ûÇÏ°í, ¾ÈÀüÇϸç, ºü¸£´Ù. µÎ ¹ø° ¹æ½ÄÀÌ °¡µ¶¼ºÀÌ ´õ ³ôÀ¸¹Ç·Î Äڵ尡 ±ò²ûÇÏ´Ù. ¾ÈÂÊ·çÇÁ¿Í ¹Ù±ùÂÊ·çÇÁÀÇ »çÀÌ¿¡ »õ·Î¿î Äڵ带 µ¡ºÙÀÌ´Â °æ¿ì, ±× »õ·Î¿î Äڵ尡 ½Ç¼ö·Î ½ÇÇàµÇÁö ¾ÊÀ» ¼öµµ ÀÖ´Ù. µÎ ¹ø° ¹æ½Ä¿¡¼­ next¹®Àº ¾ÈÂÊ·çÇÁ¸¦ Á¾·áÇÏ´Â ¹æ½ÄÀÌ ¾Æ´Ï¶ó ¸í½ÃÀûÀ¸·Î ¹Ù±ùÂÊ ·çÇÁ¸¦ ½ÇÇàÇÑ´Ù. ±×·¯¹Ç·Î ´õ ¾ÈÀüÇÏ´Ù. ±×¸®°í ÆÞÀº for¹æ½ÄÀÇ ·çÇÁº¸´Ù foreach¹æ½ÄÀÇ ·çÇÁ¸¦ ´õ ºü¸£°Ô ½ÇÇàÇÑ´Ù. === ±âº» BLOCK°ú Switch¹® === BLOCKÀº ¶óº§ÀÌ ÀÖ°Ç ¾ø°Ç ±× ÀÚü·Î "Çѹø ½ÇÇàµÇ´Â ·çÇÁ"¿Í °°´Ù. ±×·¯¹Ç·Î ºí¶ôÀ» ºüÁ®³ª°¡°Å³ª ´Ù½Ã ½ÇÇàÇϴµ¥ ·çÇÁÁ¦¾î¹®À» »ç¿ëÇÒ ¼ö ÀÖ´Ù. eval{}°ú sub{} ±×¸®°í (»ç¶÷µéÀÇ ±â´ë¿Í´Â ´Ù¸£°Ô) do{} ¿¡ ´ëÇؼ­´Â ¿¹¿Ü°¡ µÈ´Ù. continue ºí¶ôÀº ¼±ÅÃÀûÀÌ´Ù. BLOCK±¸Á¶´Â switch¹®À» ¸¸µå´Âµ¥ ƯÈ÷ ÁÁ´Ù. {{{#!vim perl 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 È®Àå±â´ÉÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. {{{#!vim perl use Switch; }}} ÇÏÁö¸¸ À̸¦ »ç¿ëÇÑ switch¹®Àº ÃÖ´ëÇÑÀÇ ¼Óµµ¸¦ ³»Áö´Â ¸øÇÑ´Ù. ¿Ö³Ä¸é ±×·¸°Ô »ç¿ëÇÑ switch¹®Àº ¾ð¾î¸¦ ±¸¼ºÇÏ´Â ºÎºÐÀº ¾Æ´Ï±â ¶§¹®ÀÌ´Ù. (½ÇÁ¦ ±¸ÇöÀº source filterÀ» ÅëÇØ ÀÌ·ç¾îÁ®ÀÖ´Ù.) ±×·¯³ª ¾Æ¹«Æ° ÀÌ·± ¹æ½Äµµ »ç¿ë°¡´ÉÇÏ°í, ±×°ÍÀº ¸Å¿ì À¯¿¬ÇÏ°Ô µ¿ÀÛÇÑ´Ù. À§¿¡¼­ÀÇ BLOCK±¸Á¶¿Ü¿¡µµ, ´ÙÀ½°ú °°ÀÌ ¾µ ¼ö ÀÖ´Ù. {{{#!vim perl SWITCH: { $abc = 1, last SWITCH if /^abc/; $def = 1, last SWITCH if /^def/; $xyz = 1, last SWITCH if /^xyz/; $nothing = 1; } }}} (¸¸¾à ·çÇÁÁ¦¾î'¿¬»êÀÚ'¸¦ ÇÑ Ç¥Çö¾È¿¡ »ç¿ëÇÒ ¼ö ÀÖ´Ù´Â Á¡À» »ý°¢Çϸé, Àú°ÍÀº º¸±âº¸´Ù ÀÌ»óÇÏÁö ¾Ê´Ù. Àú°ÍÀº ÀÌÁø ÄÞ¸¶ ¿¬»êÀÚ¸¦ »ç¿ëÇÑ °ÍÀÌ´Ù. [perlop]ÀÇ 'ÄÞ¸¶ ¿¬»êÀÚ'¸¦ ÂüÁ¶Ç϶ó.) ¶Ç´Â {{{#!vim perl SWITCH: { /^abc/ && do { $abc = 1; last SWITCH; }; /^def/ && do { $def = 1; last SWITCH; }; /^xyz/ && do { $xyz = 1; last SWITCH; }; $nothing = 1; } }}} ¶Ç´Â Á» ´õ "proper" switch¹®¿¡ °¡±õµµ·Ï ´ÙÀ½°ú °°ÀÌ ¾µ ¼ö ÀÖ´Ù. {{{#!vim perl SWITCH: { /^abc/ && do { $abc = 1; last SWITCH; }; /^def/ && do { $def = 1; last SWITCH; }; /^xyz/ && do { $xyz = 1; last SWITCH; }; $nothing = 1; } }}} ¶Ç´Â {{{#!vim perl SWITCH: { /^abc/ and $abc = 1, last SWITCH; /^def/ and $def = 1, last SWITCH; /^xyz/ and $xyz = 1, last SWITCH; $nothing = 1; } }}} ¶Ç´Â ½ÉÁö¾î ²ûÁ÷ÇÏ°Ô {{{#!vim perl if (/^abc/) { $abc = 1 } elsif (/^def/) { $def = 1 } elsif (/^xyz/) { $xyz = 1 } else { $nothing = 1 } }}} switch¹®ÀÇ ÀϹÝÀûÀÎ °ü¿ë¾î¸¦ »ìÆ캸ÀÚ. Á¤±ÔÇ¥Çö½ÄÀ» ÆíÇÏ°Ô »ç¿ëÇϱâÀ§ÇØ, º¯¼ö¸¦ Àӽ÷Π$_º¯¼ö¿¡ ÇÒ´çÇÏ´Â foreachÀÇ ±â´ÉÀ» ÀÌ¿ëÇÑ ´ÙÀ½ ¹æ½ÄÀÌ ÀÖ´Ù. {{{#!vim perl 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 ºí¶ôÀ» »ç¿ëÇÏ¿© °ªÀ» ¸®ÅÏÇÏ´Â ¹æ½ÄÀÌ´Ù. {{{#!vim perl $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+" } } }; }}} ¶Ç´Â {{{#!vim perl print do { ($flags & O_WRONLY) ? "write-only" : ($flags & O_RDWR) ? "read-write" : "read-only"; }; }}} ¶Ç´Â ¸¸¾à ¹Ýȯ°ªµéÀÌ ¸ðµÎ Âü°ªÀ» °¡Áö´Â °æ¿ì¶ó¸é, ´ÙÀ½°ú °°Àº ¹æ½ÄÀ» ¾µ ¼ö ÀÖ´Ù. {{{#!vim perl #!/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¹® ´ë½Å¿¡ ¼­ºê·çƾÀÇ ÂüÁ¶°ªÀ» °¡Áö´Â Çؽ¬¸¦ »ç¿ëÇصµ µÈ´Ù. === Goto¹® === (¿ªÀÚ ÁÖ: »ç½Ç À̺κÐÀº ¹ø¿ª¿¡¼­ »©°í ½ÍÀº ºÎºÐÀÌ´Ù. Goto´Â ´ëºÎºÐÀÇ °æ¿ì »ç¿ëÇÏÁö ¾ÊÀ» °ÍÀ» ±ÇÇϱ⠶§¹®ÀÌ´Ù. ÇÏÁö¸¸ ¿ÏÀüÈ÷ »©¹ö¸®±â º¸´Ù´Â Áß¿äÇÑ ºÎºÐ¸¸ ¹ø¿ªÇϱâ·Î ÇÏ°Ú´Ù.) ÆÞÀº goto¹®À» Áö¿øÇÑ´Ù. ÀÌ´Â ¼¼°¡Áö ÇüÅ°¡ ÀÖ´Ù. goto-LABEL, goto-EXPR, and goto-&NAME ÀÌ´Ù. ·çÇÁÀÇ LABELÀº goto¸¦ »ç¿ëÇÒ ¼ö ¾ø´Ù. ±×°Ç ´ÜÁö ·çÇÁÀÇ À̸§ÀÏ »ÓÀÌ´Ù. goto-LABELÀº LABEL·Î À̸§ ºÙ¿©Áø ½ÇÇ๮À» ã¾Æ¼­ °Å±â¼­ºÎÅÍ °è¼Ó ½ÇÇà½ÃŲ´Ù. ±×°ÍÀº ÃʱâÈ­°¡ ÇÊ¿äÇÑ ±¸Á¶¿¡¼­ »ç¿ëµÉ ¼ö ÀÖ´Ù. ¿¹¸¦µé¸é ¼­ºê·çƾÀ̳ª foreach·çÇÁ°¡ ÀÖ´Ù. goto¹®Àº µ¿Àû ÂüÁ¶¹üÀ§ ¾îµð·Î°Ç Á¡ÇÁÇÒ ¼ö ÀÖ´Ù. ±×°ÍÀº ¼­ºê·çƾ ¹ÛÀÌ µÉ ¼öµµ ÀÖ´Ù. ±×·¯³ª ´ëºÎºÐÀÇ °æ¿ì last³ª die¸¦ ¾²´Â °ÍÀÌ ´õ ³´´Ù. ÆÞÀÇ ÀúÀÚ´Â goto-LABELÀÇ Çʿ伺À» ÀüÇô ´À³¢Áö ¾Ê°í ÀÖ´Ù. (ÀÌ´Â ÆÞ¿¡ ÇØ´çµÇ´Â °ÍÀÌ°í, C¿Í´Â ´Ù¸¥ ¹®Á¦´Ù.) goto-EXPR´Â µ¿ÀûÀÎ ¶óº§À̸§À» »ç¿ëÇÒ ¼ö ÀÖ´Ù. À¯Áöº¸¼ö¼ºÀ» »ý°¢ÇÑ´Ù¸é, »ç¿ëÇÏÁö ¾Ê´Â °ÍÀ» ±ÇÇÑ´Ù. {{{#!vim perl goto(("FOO", "BAR", "GLARCH")[$i]); }}} °ÅÀÇ ¸ðµç °æ¿ì¿¡ À־ goto¸¦ »ç¿ëÇÏ´Â °Íº¸´Ù´Â next, last, redo¸¦ »ç¿ëÇÏ´Â °ÍÀÌ ¸Å¿ì ¸Å¿ì ÈξÀ ³´´Ù. ¸¶Âù°¡Áö·Î ¿¡·¯ ó¸®ÇÏ´Â °æ¿ì¿¡ À־µµ goto¸¦ »ç¿ëÇÏ´Â °Íº¸´Ù´Â catch/throw¸¦ »ç¿ëÇÏ´Â °ÍÀÌ Çö¸íÇÏ´Ù. === POD: ÇÁ·Î±×·¥ ³»Àå ¹®¼­ === ÆÞÀº ¼Ò½º ÄÚµå¿Í ¹®¼­¸¦ ¼¯´Â ¹æ½ÄÀ» Á¦°øÇÑ´Ù. ÁÙÀÇ °¡Á¤ óÀ½¿¡ '='±âÈ£¿Í ´Ü¾î¸¦ ³Ö´Â °ÍÀ¸·Î ¹®¼­ÀÇ ½ÃÀÛÀ» ¾Ë¸°´Ù. {{{#!vim perl =head1 Here There Be Pods! }}} ±×·¯¸é =cutÀ̶ó´Â ºÎºÐÀÌ ³ªÅ¸³¯ ¶§±îÁö ¹®¼­·Î °£ÁֵǹǷΠÄÄÆÄÀÏ·¯´Â ±× ºÎºÐÀ» ¹«½ÃÇÏ°Ô µÈ´Ù. ³»Àå ¹®¼­ÀÇ Æ÷¸Ë¿¡ ÀÚ¼¼ÇÑ »çÇ×Àº [perlpod]À» ÂüÁ¶Ç϶ó. ´ÙÀ½°ú °°ÀÌ ÇÏ¿© ¼Ò½º ÄÚµå¿Í ¹®¼­¸¦ ¼¯À» ¼ö ÀÖ´Ù. {{{#!vim perl =item snazzle($) }}} {{{#!vim perl The snazzle() function will behave in the most spectacular form that you can possibly imagine, not even excepting cybernetic pyrotechnics. }}} {{{#!vim perl =cut back to the compiler, nuff of this pod stuff! }}} {{{#!vim perl sub snazzle($) { my $thingie = shift; ......... } }}} pod ¹ø¿ª±â´Â pod¸í·É¾î·Î ½ÃÀÛÇÏ´Â ´Ü¶ô¸¸À» ó¸®ÇÑ´Ù. ±×·¯¹Ç·Î ´ÙÀ½ ¿¹¿¡¼­ warn ¸í·É¾î´Â pod ¹ø¿ª±â¿Í ÄÄÆÄÀÏ·¯ ¸ðµÎ¿¡°Ô ¹«½ÃµÈ´Ù. {{{#!vim perl $a=3; =secret stuff warn "Neither POD nor CODE!?" =cut back print "got $a\n"; }}} ±×·¯³ª ¾ðÁ¦±îÁö³ª ÀÌ·± ¹æ½ÄÀ¸·Î µ¿ÀÛÇÒ °ÍÀ̶ó°í(warnÀÌ ¹«½ÃµÈ´Ù°í) ±â´ëÇÏÁö ¸»¾Æ¶ó. ¸ðµç pod ¹ø¿ª±â°¡ ÀÌ·± ¹æ½ÄÀ¸·Î Àß µ¿À۵Ǵ °Íµµ ¾Æ´Ï°í, ¾î¼¸é Èʳ¯¿¡´Â ÄÄÆÄÀÏ·¯°¡ ÀÌ·± ºÎºÐÀ» ±î´Ù·Ó°Ô Á¦ÇÑÇÒÁöµµ ¸ð¸¥´Ù. ÁÖ¼®À» ºü¸£°Ô ÀÛ¼ºÇÏ·Á´Â ¿ëµµ·Î pod ¸í·É¾î°¡ »ç¿ëµÇ±âµµ ÇÑ´Ù. === Plain Old Comments (Not!) === (¿ªÀÚÁÖ: ÀÌ ºÎºÐÀº ¹ø¿ª¿¡¼­ Á¦¿ÜÇÏ´Â °ÍÀÌ ÁÁ°Ú´Ù.)