ããã¯Moritz Lenzæ°ã®Webãµã¤ãPerlgeek.deã§å ¬éããã¦ããããã°è¨äº"Perl 5 to 6" Lesson 26 - Exceptions and control exceptionsã®æ¥æ¬èªè¨³ã§ã。
åæã¯Creative Commons Attribution 3.0 Germanyã«åºã¥ãã¦å ¬éããã¦ãã¾ã。
æ¬ã¨ã³ããªã«ã¯Creative Commons Attribution 3.0 Unportedãé©ç¨ãã¾ã。
Original text: Copyright© 2008-2010 Moritz Lenz
Japanese translation: Copyright© 2011 SATOH Koichi
NAME
"Perl 5 to 6" Lesson 26 - ä¾å¤ã¨å¶å¾¡ä¾å¤
SYNOPSIS
try {
die "OH NOEZ";
CATCH {
say "there was an error: $!";
}
}
DESCRIPTION
ä¾å¤ã¯ãã®ååã«åãã¦ã¾ã£ããä¾å¤çãªãã®ã§ã¯ããã¾ãã。å®éã®ã¨ããPerl6ã§ã¯é常ã®å¶å¾¡ããã¼ã®ä¸é¨ã§ã。
ä¾å¤ã¯æ½å¨çãªã¨ã©ã¼(ä¾ãã°0é¤ç®、åå¨ããªãã¡ã½ããã®å¼ã³åºã、åãã§ãã¯å¤±æ)ã¾ãã¯die
ãã®ä»ã®é¢æ°ã®æ示çãªå¼ã³åºãã«ãã£ã¦çæããã¾ã。
ä¾å¤ãæããããã¨ããã°ã©ã ã¯å¼ã³åºããã¬ã¼ã ããCATCH
ãããã¯ãtry
ãããã¯ãæ¢ã、ã¹ã¿ãã¯ãå®å
¨ã«å·»ãæ»ãã¾ã(ã¤ã¾ãããã¾ã§ã«å¼ã³åºãããå
¨é¨ã®ãµãã«ã¼ãã³ããç¡çç¢çæ»ã£ã¦ããã¨ãããã¨ã§ã)。
ããCATCH
ãtry
ãè¦ã¤ãããªããã°ããã°ã©ã ã¯çµäºã、éãè¯ããã°å½¹ã«ç«ã¤ã¨ã©ã¼ã¡ãã»ã¼ã¸ã表示ããã¾ã。
ã©ã¡ããä¸æ¹ãè¦ã¤ãã£ãå ´åã¯ã¨ã©ã¼ã¡ãã»ã¼ã¸ã¯ç¹æ®å¤æ°$!
ã«æ ¼ç´ãã、CATCH
ãããã¯ãå®è¡ããã¾ã(try
ãããã¯ã«CATCH
ãããã¯ããªãå ´å、ãããã¯ã¯undef
ãè¿ãã¾ã)。
ããã¾ã§ã®èª¬æã§ã¯ã¾ã ä¾å¤ãä¾å¤çãªãã®ã«æããããç¥ãã¾ããã、ã¨ã©ã¼å¦çã¯äºæ«ãªã¢ããªã±ã¼ã·ã§ã³ã§ããªããã°ä¸å¯æ¬ ã§ã。
ãã ããã°ããã§ãªã、é常ã®return
æãä¾å¤ãæãã¦ããã®ã§ã!
ããã¯å¶å¾¡ä¾å¤ã¨å¼ã°ã、CONTROL
ãããã¯ã§ææãããã¨ãã§ã、ããããªãå ´åã¯ãµãã«ã¼ãã³å®£è¨ã§æé»çã«ææããã¾ã。
次ã®ä¾ãèãã¦ã¿ã¦ä¸ãã:
use v6;
my $block = -> { return "block"; say "still here" };
sub s {
$block.();
return "sub";
}
say s();
return "block"
ãå¶å¾¡ä¾å¤ãæã、ç¾å¨ã®ãããã¯ããæãã(ãããã£ã¦still here
ã¯è¡¨ç¤ºãããªã)ã®ã¿ãªãã、ãµãã«ã¼ãã³ãããæãã¾ã。ããã¯sub s...
宣è¨ã§ææããã¾ã。
ãã¤ãã¼ã——ãã®ä¾ã§ã¯æåå——ã¯æ»ãå¤ã¨ãã¦æ¸¡ãã、æå¾ã®è¡ã®say
ãããã表示ãã¾ã。
$block.()
ãtry { ... }
ãããã¯ã®ä¸ã«å
¥ãããCONTROL { ... }
ãããã¯ããµãã«ã¼ãã³ã®æ¬ä½ã«ç½®ããããããã¨ã§ä¾å¤ãææã§ãã¾ã。
ä»ã®ããã°ã©ãã³ã°è¨èªã¨ã¯éã«CATCH
/CONTROL
ãããã¯ã¯ã¨ã©ã¼ãææãããã¹ã³ã¼ãã®(å¤ã§ã¯ãªã)ä¸ã«ãã、åå¥çå¤æ°ã¸ã®å®å
¨ãªã¢ã¯ã»ã¹ãä¸ãããã¦ãã¾ã。ãã®ãã¨ã¯å½¹ã«ç«ã¤ã¨ã©ã¼ã¡ãã»ã¼ã¸ãä½ãã®ã容æã«ã、ã¾ãã¨ã©ã¼ãå¦çãããåã«DESTROY
ãããã¯ãå®è¡ããããã¨ãé²ãã¾ã。
æããããªãä¾å¤
Perl6ã¯ãã«ãã¹ã¬ããã®、ç¹ã«èªå並ååã®èããåãå ¥ãã¦ãã¾ã。 1ã¹ã¬ããã®çµäºãå ¨ã¹ã¬ããã«å½±é¿ãããã¨ããªãããã«、「ã½ãããª」ä¾å¤ãèæ¡ããã¾ãã。
é¢æ°ãfail($obj)
ãå¼ã¶ã¨ç¹å¥ãªæªå®ç¾©å¤ãè¿ãã¾ã。ããã¯ãã¤ãã¼ãã«$obj
(大æµã®å ´åã¯ã¨ã©ã¼ã¡ãã»ã¼ã¸)ã¨ããã¯ãã¬ã¼ã¹(ãã¡ã¤ã«åã¨è¡çªå·)ãæ ¼ç´ãã¦ãã¾ã。
ãã®ç¹æ®ãªæªå®ç¾©å¤ã確èªãªãã«å¦çãããã¨ããã¨é常ã®ä¾å¤ãæãããã¾ã。
my @files = </etc/passwd /etc/shadow nonexisting>;
my @handles = hyper map { open($_) }, @files;
ãã®ä¾ã®hyper
æ¼ç®åã¯map
ã«å¯è½ãªéãåä½ã並ååããããä¼ãã¾ã。
nonexisting
ãã¡ã¤ã«ã®ãªã¼ãã³ã«å¤±æããå ´å、é常ã®die "No such file or directory"
ã§ã¯ä»ã®ãã¡ã¤ã«ãªã¼ãã³å¦çãä¸æãã¦ãã¾ãã¾ã。
ããã失æãããªã¼ãã³å¦çã¯ä»£ããã«fail("No such file or directory")
ãå¼ã¶ã®ã§、å¼ã³åºãå
ã¯@handles
ã®å
容ã確èªãããã¨ãã§ã、å®å
¨ãªã¨ã©ã¼ã¡ãã»ã¼ã¸ã«ãã¢ã¯ã»ã¹ã§ãã¾ã。
ã½ãããªä¾å¤ãæ°ã«å
¥ããªãå ´å、ããã°ã©ã ã®æåã«use fatal;
ã¨æ¸ãã¨fail()
ããçããä¾å¤ãå³åº§ã«æããããããã«ãªãã¾ã。
MOTIVATION
è¯ãããã°ã©ãã³ã°è¨èªã«ã¯ã¨ã©ã¼ç¶æ ãæ±ãããã®ä¾å¤ãå¿ è¦ã§ã。 æåãããã©ããæ»ãå¤ããã¤ã確èªãããã¨ã¯åä»ã ãå¿ããã¡ã§ã。
ä¼çµ±çãªä¾å¤ã¯æé»ã®ä¸¦ååã«ã¨ã£ã¦ã¯æ害ãªãã¨ãããã®ã§、両è ã®æä¸ã®é¨åãçµã¿åããã解æ³ãå¿ è¦ã§ãã: ä¸åº¦ã«ãã¹ã¦ã殺ãã¦ãã¾ãã、ã¾ãã©ããªæ å ±ãåããã¼ãã¦ãã¾ããªãæ¹æ³ãã§ã。
ã³ã¡ã³ã
ã³ã¡ã³ããæ稿