perlfunc - Perl ÁȤ߹þ¤ß´Ø¿ô
¤³¤ÎÀá¤Î´Ø¿ô¤Ï¡¢¼°¤ÎÃæ¤Ç¹à¤È¤·¤Æ»È¤¦¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
¤³¤ì¤é¤Ï¡¢Â礤¯ 2 ¤Ä¤Ëʬ¤±¤é¤ì¤Þ¤¹:
¥ê¥¹¥È±é»»»Ò¤È̾Á°Éդñ¹à±é»»»Ò¤Ç¤¹¡£
¤³¤ì¤é¤Î°ã¤¤¤Ï¡¢¤½¤Î¸å¤Ë½Ð¤ÆÍè¤ë¥³¥ó¥Þ¤È¤ÎÍ¥Àè½ç°Ì¤Î´Ø·¸¤Ë¤¢¤ê¤Þ¤¹¡£¡¡
(perlop ¤ÎÍ¥Àè½ç°Ì¤Îɽ¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£)
¥ê¥¹¥È±é»»»Ò¤Ï 2 ¸Ä°Ê¾å¤Î°ú¿ô¤ò¤È¤ë¤Î¤ËÂФ·¤Æ¡¢
ñ¹à±é»»»Ò¤¬Ê£¿ô¤Î°ú¿ô¤ò¤È¤ë¤³¤È¤Ï¤¢¤ê¤Þ¤»¤ó¡£
¤Ä¤Þ¤ê¡¢¥³¥ó¥Þ¤Ïñ¹à±é»»»Ò¤Î°ú¿ô¤Î½ª¤ï¤ê¤È¤Ê¤ê¤Þ¤¹¤¬¡¢
¥ê¥¹¥È±é»»»Ò¤Î¾ì¹ç¤Ë¤Ï¡¢°ú¿ô¤Î¶èÀÚ¤ê¤Ç¤·¤«¤¢¤ê¤Þ¤»¤ó¡£
ñ¹à±é»»»Ò¤Ï°ìÈ̤ˡ¢
°ú¿ô¤ËÂФ·¤Æ¥¹¥«¥é¥³¥ó¥Æ¥¥¹¥È¤òÍ¿¤¨¤ë¤Î¤ËÂФ·¤Æ¡¢
¥¹¥«¥é±é»»»Ò¤Î¾ì¹ç¤Ë¤Ï¡¢°ú¿ô¤ËÂФ·¤Æ¥¹¥«¥é¥³¥ó¥Æ¥¥¹¥È¤òÍ¿¤¨¤ë¾ì¹ç¤â¡¢
¥ê¥¹¥È¥³¥ó¥Æ¥¥¹¥È¤òÍ¿¤¨¤ë¾ì¹ç¤â¤¢¤ê¤Þ¤¹¡£
1 ¤Ä¤Î¥ê¥¹¥È±é»»»Ò¤¬
ξÊý¤Î¥³¥ó¥Æ¥¥¹¥È¤òÍ¿¤¨¤ë¾ì¹ç¤Ë¤Ï¡¢¥¹¥«¥é°ú¿ô¤¬¤¤¤¯¤Ä¤«Ê¤ӡ¢
ºÇ¸å¤Ë¥ê¥¹¥È°ú¿ô¤¬ 1 ¤Ä³¤¤Þ¤¹¡£
(¥ê¥¹¥È°ú¿ô¤Ï 1 ¤Ä¤À¤±¤Ç¤¹¡£)
¤¿¤È¤¨¤Ð¡¢splice() ¤Ï 3 ¤Ä¤Î¥¹¥«¥é°ú¿ô¤Ë 1 ¤Ä¤Î¥ê¥¹¥È°ú¿ô¤¬Â³¤¤Þ¤¹¡£
°ìÊý gethostbyname() ¤Ï 4 ¤Ä¤Î¥¹¥«¥é°ú¿ô¤ò»ý¤Á¤Þ¤¹¡£
¸å¤ËºÜ¤»¤ë¹½Ê¸µ½Ò¤Ç¤Ï¡¢¥ê¥¹¥È¤ò¤È¤ê (¤½¤Î¥ê¥¹¥È¤ÎÍ×ÁǤ˥ꥹ¥È¥³¥ó¥Æ¥¥¹¥È¤òÍ¿¤¨¤ë) ¥ê¥¹¥È±é»»»Ò¤Ï¡¢°ú¿ô¤È¤·¤Æ LIST ¤ò¤È¤ë¤è¤¦¤Ë½ñ¤¤¤Æ¤¤¤Þ¤¹¡£ ¤½¤Î¤è¤¦¤Ê¥ê¥¹¥È¤Ë¤Ï¡¢Ç¤°Õ¤Î¥¹¥«¥é°ú¿ô¤ÎÁȤ߹ç¤ï¤»¤ä¥ê¥¹¥ÈÃͤò ´Þ¤á¤ë¤³¤È¤¬¤Ç¤¡¢¥ê¥¹¥ÈÃͤϥꥹ¥È¤ÎÃæ¤Ë¡¢ ¸Ä¡¹¤ÎÍ×ÁǤ¬Å¸³«¤µ¤ì¤¿¤è¤¦¤ËËä¤á¹þ¤Þ¤ì¤Þ¤¹¡£ 1 ¼¡¸µ¤ÎŤ¤¥ê¥¹¥ÈÃͤ¬·ÁÀ®¤µ¤ì¤ë¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£ LIST ¤ÎÍ×ÁǤϡ¢¥³¥ó¥Þ¤Ç¶èÀÚ¤é¤ì¤Þ¤¹¡£
°Ê²¼¤Î¥ê¥¹¥È¤Î´Ø¿ô¤Ï¤¹¤Ù¤Æ¡¢°ú¿ô¤ÎÁ°¸å¤Î³ç¸Ì¤Ï¾Êά²Äǽ¤È ¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£ (¹½Ê¸µ½Ò¤Ç¤Ï¾Êά¤·¤Æ¤¤¤Þ¤¹¡£) ³ç¸Ì¤ò»È¤¦¤È¤¤Ë¤Ï¡¢ ñ½ã¤Ê (¤·¤«¤·¡¢¤È¤¤Ë¤Ï¶Ã¤¯·ë²Ì¤È¤Ê¤ë) µ¬Â§¤¬Å¬ÍѤǤ¤Þ¤¹: ´Ø¿ô¤Ë¸«¤¨¤ë¤Ê¤é¤Ð¡¢¤½¤ì¤Ï´Ø¿ô¤Ç¡¢Í¥Àè½ç°Ì¤Ï´Ø·¸¤¢¤ê¤Þ¤»¤ó¡£ ¤½¤¦¸«¤¨¤Ê¤±¤ì¤Ð¡¢¤½¤ì¤Ï¥ê¥¹¥È±é»»»Ò¤«Ã±¹à±é»»»Ò¤Ç¡¢Í¥Àè½ç°Ì¤¬ ´Ø·¸¤·¤Þ¤¹¡£ ¤Þ¤¿¡¢´Ø¿ô¤È³«¤³ç¸Ì¤Î´Ö¤Î¶õÇò¤Ï´Ø·¸¤¢¤ê¤Þ¤»¤ó¤Î¤Ç¡¢ ¤È¤¤Ëµ¤¤òÉÕ¤±¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó:
print 1+2+4; # Prints 7.
print(1+2) + 4; # Prints 3.
print (1+2)+4; # Also prints 3!
print +(1+2)+4; # Prints 7.
print ((1+2)+4); # Prints 7.
Perl ¤Ë -w ¥¹¥¤¥Ã¥Á¤òÉÕ¤±¤Æ¼Â¹Ô¤¹¤ì¤Ð¡¢¤³¤¦¤¤¤Ã¤¿¤â¤Î¤Ë¤Ï ·Ù¹ð¤ò½Ð¤·¤Æ¤¯¤ì¤Þ¤¹¡£ ¤¿¤È¤¨¤Ð¡¢¾åµ¤Î 3 ¤Ä¤á¤Ï¡¢°Ê²¼¤Î¤è¤¦¤Ê·Ù¹ð¤¬½Ð¤Þ¤¹:
print (...) interpreted as function at - line 1.
Useless use of integer addition in void context at - line 1.
¤¤¤¯¤Ä¤«¤Î´Ø¿ô¤Ï°ú¿ô¤òÁ´¤¯¤È¤é¤Ê¤¤¤Î¤Ç¡¢Ã±¹à±é»»»Ò¤È¤·¤Æ¤â
¥ê¥¹¥È±é»»»Ò¤È¤·¤Æ¤âưºî¤·¤Þ¤»¤ó¡£
¤³¤Î¤è¤¦¤Ê´Ø¿ô¤È¤·¤Æ¤Ï time ¤ä endpwent ¤¬¤¢¤ê¤Þ¤¹¡£
Î㤨¤Ð¡¢time+86_400 ¤Ï¾ï¤Ë time() + 86_400 ¤È¤·¤Æ°·¤ï¤ì¤Þ¤¹¡£
¥¹¥«¥é¥³¥ó¥Æ¥¥¹¥È¤Ç¤â¡¢¥ê¥¹¥È¥³¥ó¥Æ¥¥¹¥È¤Ç¤â»È¤¨¤ë´Ø¿ô¤Ï¡¢ Ã×̿Ū¤Ç¤Ê¤¤¥¨¥é¡¼¤ò¼¨¤¹¤¿¤á¤Ë¡¢¥¹¥«¥é¥³¥ó¥Æ¥¥¹¥È¤Ç¤Ï ̤ÄêµÁÃͤòÊÖ¤·¡¢¥ê¥¹¥È¥³¥ó¥Æ¥¥¹¥È¤Ç¤Ï¶õ¥ê¥¹¥È¤òÊÖ¤·¤Þ¤¹¡£
°Ê²¼¤Ë½Ò¤Ù¤ë½ÅÍפʥ롼¥ë¤ò˺¤ì¤Ê¤¤¤Ç²¼¤µ¤¤: ¥ê¥¹¥È¥³¥ó¥Æ¥¥¹¥È¤Ç¤Î ¿¶¤ëÉñ¤¤¤È¥¹¥«¥é¥³¥ó¥Æ¥¥¹¥È¤Ç¤Î¿¶¤ëÉñ¤¤¤Î´Ø·¸¡¢¤¢¤ë¤¤¤Ï¤½¤ÎµÕ¤Ë ¥ë¡¼¥ë¤Ï¤¢¤ê¤Þ¤»¤ó¡£ 2 ¤Ä¤ÎÁ´¤¯°Û¤Ê¤Ã¤¿¤³¤È¤¬¤¢¤ê¤Þ¤¹¡£ ¤½¤ì¤¾¤ì¤Î±é»»»Ò¤È´Ø¿ô¤Ï¡¢¥¹¥«¥é¥³¥ó¥Æ¥¥¹¥È¤Ç¤Ï¡¢¤â¤Ã¤È¤âŬÀÚ¤È »×¤ï¤ì¤ëÃͤòÊÖ¤·¤Þ¤¹¡£ ¥ê¥¹¥È¥³¥ó¥Æ¥¥¹¥È¤ÇÊÖ¤¹»þ¤Î¥ê¥¹¥È¤ÎŤµ¤òÊÖ¤¹±é»»»Ò¤â¤¢¤ê¤Þ¤¹¡£ ¥ê¥¹¥È¤ÎºÇ½é¤ÎÃͤòÊÖ¤¹±é»»»Ò¤â¤¢¤ê¤Þ¤¹¡£ ¥ê¥¹¥È¤ÎºÇ¸å¤ÎÃͤòÊÖ¤¹±é»»»Ò¤â¤¢¤ê¤Þ¤¹¡£ À®¸ù¤·¤¿Áàºî¤Î¿ô¤òÊÖ¤¹±é»»»Ò¤â¤¢¤ê¤Þ¤¹¡£ °ìÈÌŪ¤Ë¤Ï¡¢°ì´ÓÀ¤òµá¤á¤Ê¤¤¸Â¤ê¡¢¤³¤Á¤é¤¬µá¤á¤ë¤³¤È¤ò¤·¤Þ¤¹¡£
¥¹¥«¥é¥³¥ó¥Æ¥¥¹¥È¤Ç¤Î̾Á°ÉÕ¤ÇÛÎó¤Ï¡¢¥¹¥«¥é¥³¥ó¥Æ¥¥¹¥È¤Ç¤Î¥ê¥¹¥È¤ò
°ìÌܸ«¤¿¤â¤Î¤È¤ÏÁ´¤¯°ã¤¤¤Þ¤¹¡£
¥³¥ó¥Ñ¥¤¥é¤Ï¥³¥ó¥Ñ¥¤¥ë»þ¤Ë¥³¥ó¥Æ¥¥¹¥È¤òÃΤäƤ¤¤ë¤Î¤Ç¡¢
(1,2,3) ¤Î¤è¤¦¤Ê¥ê¥¹¥È¤ò¥¹¥«¥é¥³¥ó¥Æ¥¥¹¥È¤ÇÆÀ¤ë¤³¤È¤Ï¤Ç¤¤Þ¤»¤ó¡£
¤³¤ì¤Ï¥¹¥«¥é¥³¥ó¥Þ±é»»»Ò¤òÀ¸À®¤·¡¢¥³¥ó¥Þ¤Î¥ê¥¹¥ÈºîÀ®ÈǤǤϤ¢¤ê¤Þ¤»¤ó¡£
¤³¤ì¤Ï½é¤á¤«¤é¥ê¥¹¥È¤Ç¤¢¤ë¤³¤È¤Ï¤Ê¤¤¤³¤È¤ò°ÕÌ£¤·¤Þ¤¹¡£
°ìÈÌŪ¤Ë¡¢Æ±¤¸Ì¾Á°¤Î¥·¥¹¥Æ¥à¥³¡¼¥ë¤Î¥é¥Ã¥Ñ¡¼¤È¤·¤ÆÆ°ºî¤¹¤ë Perl ¤Î´Ø¿ô
(chown(2), fork(2), closedir(2) ¤Ê¤É)¤Ï¡¢°Ê²¼¤Ë½Ò¤Ù¤ë¤è¤¦¤Ë¡¢
À®¸ù»þ¤Ë¿¿¤òÊÖ¤·¡¢¤½¤¦¤Ç¤Ê¤±¤ì¤Ð undef ¤òÊÖ¤·¤Þ¤¹¡£
¤³¤ì¤Ï¼ºÇÔ»þ¤Ë -1 ¤òÊÖ¤¹ C ¤Î¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤È¤Ï°ã¤¤¤Þ¤¹¡£
¤³¤Î¥ë¡¼¥ë¤ÎÎã³°¤Ï wait, waitpid, syscall ¤Ç¤¹¡£
¥·¥¹¥Æ¥à¥³¡¼¥ë¤Ï¼ºÇÔ»þ¤ËÆÃ¼ìÊÑ¿ô $! ¤ò¥»¥Ã¥È¤·¤Þ¤¹¡£
¤½¤Î¾¤Î´Ø¿ô¤Ï¡¢»ö¸Î¤ò½ü¤¤¤Æ¡¢¥»¥Ã¥È¤·¤Þ¤»¤ó¡£
°Ê²¼¤Ë¡¢¥«¥Æ¥´¥êÊ̤δؿô(¥¡¼¥ï¡¼¥É¤ä̾Á°ÉÕ¤±é»»»Ò¤Î¤è¤¦¤Ê¡¢ ´Ø¿ô¤Î¤è¤¦¤Ë¸«¤¨¤ë¤â¤Î¤â´Þ¤ß¤Þ¤¹)¤ò¼¨¤·¤Þ¤¹¡£ Ê£¿ô¤Î¾ì½ê¤Ë¸½¤ì¤ë´Ø¿ô¤â¤¢¤ê¤Þ¤¹¡£
(¥¹¥«¥é¤äʸ»úÎó¤Î¤¿¤á¤Î´Ø¿ô)
chomp, chop, chr, crypt, hex, index, lc, lcfirst,
length, oct, ord, pack, q//, qq//, reverse,
rindex, sprintf, substr, tr///, uc, ucfirst, y///
(Àµµ¬É½¸½¤È¥Ñ¥¿¡¼¥ó¥Þ¥Ã¥Á¥ó¥°)
(¿ôÃÍ´Ø¿ô)
abs, atan2, cos, exp, hex, int, log, oct, rand,
sin, sqrt, srand
(¼ÂÇÛÎó¤Î¤¿¤á¤Î´Ø¿ô)
(¥ê¥¹¥È¥Ç¡¼¥¿¤Î¤¿¤á¤Î´Ø¿ô)
(¼Â¥Ï¥Ã¥·¥å¤Î¤¿¤á¤Î´Ø¿ô)
(Æþ½ÐÎÏ´Ø¿ô)
binmode, close, closedir, dbmclose, dbmopen, die, eof,
fileno, flock, format, getc, print, printf, read,
readdir, rewinddir, say, seek, seekdir, select, syscall,
sysread, sysseek, syswrite, tell, telldir, truncate,
warn, write
(¸ÇÄêĹ¥Ç¡¼¥¿¤ä¥ì¥³¡¼¥É¤Î¤¿¤á¤Î´Ø¿ô)
(¥Õ¥¡¥¤¥ë¥Ï¥ó¥É¥ë¡¢¥Õ¥¡¥¤¥ë¡¢¥Ç¥£¥ì¥¯¥È¥ê¤Î¤¿¤á¤Î´Ø¿ô)
-X, chdir, chmod, chown, chroot, fcntl, glob,
ioctl, link, lstat, mkdir, open, opendir,
readlink, rename, rmdir, stat, symlink, sysopen,
umask, unlink, utime
(¥×¥í¥°¥é¥à¤Îή¤ì¤òÀ©¸æ¤¹¤ë¤³¤È¤Ë´ØÏ¢¤¹¤ë¥¡¼¥ï¡¼¥É)
caller, continue, die, do, dump, eval, exit,
goto, last, next, redo, return, sub, wantarray
(switch ¤Ë´ØÏ¢¤¹¤ë¥¡¼¥ï¡¼¥É)
(¤³¤ì¤é¤Ï "switch" µ¡Ç½¤¬Í¸ú¤Î¾ì¹ç¤Ë¤Î¤ßÍøÍѲÄǽ¤Ç¤¹¡£ feature ¤È Switch statements in perlsyn ¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£)
(¥¹¥³¡¼¥×¤Ë´Ø¤¹¤ë¥¡¼¥ï¡¼¥É)
(state ¤Ï "state" µ¡Ç½¤¬Í¸ú¤Î¾ì¹ç¤Ë¤Î¤ßÍøÍѲÄǽ¤Ç¤¹¡£
feature ¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£)
(¤µ¤Þ¤¶¤Þ¤Ê´Ø¿ô)
defined, dump, eval, formline, local, my, our,
reset, scalar, state, undef, wantarray
(¥×¥í¥»¥¹¤È¥×¥í¥»¥¹¥°¥ë¡¼¥×¤Î¤¿¤á¤Î´Ø¿ô)
alarm, exec, fork, getpgrp, getppid, getpriority, kill,
pipe, qx//, setpgrp, setpriority, sleep, system,
times, wait, waitpid
(perl ¥â¥¸¥å¡¼¥ë¤Ë´Ø¤¹¤ë¥¡¼¥ï¡¼¥É)
(¥¯¥é¥¹¤È¥ª¥Ö¥¸¥§¥¯¥È»Ø¸þ¤Ë´Ø¤¹¤ë¥¡¼¥ï¡¼¥É)
bless, dbmclose, dbmopen, package, ref, tie, tied,
untie, use
(Äã¥ì¥Ù¥ë¥½¥±¥Ã¥È´Ø¿ô)
accept, bind, connect, getpeername, getsockname,
getsockopt, listen, recv, send, setsockopt, shutdown,
socket, socketpair
(System V ¥×¥í¥»¥¹´ÖÄÌ¿®´Ø¿ô)
msgctl, msgget, msgrcv, msgsnd, semctl, semget, semop,
shmctl, shmget, shmread, shmwrite
(¥æ¡¼¥¶¡¼¤È¥°¥ë¡¼¥×¤Î¾ðÊó¼èÆÀ)
endgrent, endhostent, endnetent, endpwent, getgrent,
getgrgid, getgrnam, getlogin, getpwent, getpwnam,
getpwuid, setgrent, setpwent
(¥Í¥Ã¥È¥ï¡¼¥¯¾ðÊó¼èÆÀ)
endprotoent, endservent, gethostbyaddr, gethostbyname,
gethostent, getnetbyaddr, getnetbyname, getnetent,
getprotobyname, getprotobynumber, getprotoent,
getservbyname, getservbyport, getservent, sethostent,
setnetent, setprotoent, setservent
(»þ¹ï¤Ë´Ø¤¹¤ë´Ø¿ô)
(perl5 ¤Ç¿·Àߤµ¤ì¤¿´Ø¿ô)
abs, bless, break, chomp, chr, continue, default,
exists, formline, given, glob, import, lc, lcfirst,
lock, map, my, no, our, prototype, qr//, qw//, qx//,
readline, readpipe, ref, sub*, sysopen, tie, tied, uc,
ucfirst, untie, use, when
* - sub ¤Ï perl4 ¤Ç¤Ï¥¡¼¥ï¡¼¥É¤Ç¤¹¤¬¡¢perl5 ¤Ç¤Ï±é»»»Ò¤Ê¤Î¤Ç¡¢
¼°¤Ç»È¤¨¤Þ¤¹¡£
(perl5 ¤Ç¤Ï¸Å¤¤¤â¤Î¤È¤Ê¤Ã¤¿´Ø¿ô)
Perl ¤Ï Unix ´Ä¶¤ÇÀ¸¤Þ¤ì¤¿¤Î¤Ç¡¢Á´¤Æ¤Î¶¦Ä̤¹¤ë Unix ¥·¥¹¥Æ¥à¥³¡¼¥ë¤Ë ¥¢¥¯¥»¥¹¤·¤Þ¤¹¡£Èó Unix ´Ä¶¤Ç¤Ï¡¢¤¤¤¯¤Ä¤«¤Î Unix ¥·¥¹¥Æ¥à¥³¡¼¥ë¤Î µ¡Ç½¤¬»È¤¨¤Ê¤«¤Ã¤¿¤ê¡¢»È¤¨¤ëµ¡Ç½¤Î¾ÜºÙ¤¬Â¿¾¯°Û¤Ê¤Ã¤¿¤ê¤·¤Þ¤¹¡£ ¤³¤ì¤Ë¤è¤ë±Æ¶Á¤ò¼õ¤±¤ë Perl ´Ø¿ô¤Ï°Ê²¼¤Î¤â¤Î¤Ç¤¹:
-X, binmode, chmod, chown, chroot, crypt,
dbmclose, dbmopen, dump, endgrent, endhostent,
endnetent, endprotoent, endpwent, endservent, exec,
fcntl, flock, fork, getgrent, getgrgid, gethostbyname,
gethostent, getlogin, getnetbyaddr, getnetbyname, getnetent,
getppid, getpgrp, getpriority, getprotobynumber,
getprotoent, getpwent, getpwnam, getpwuid,
getservbyport, getservent, getsockopt, glob, ioctl,
kill, link, lstat, msgctl, msgget, msgrcv,
msgsnd, open, pipe, readlink, rename, select, semctl,
semget, semop, setgrent, sethostent, setnetent,
setpgrp, setpriority, setprotoent, setpwent,
setservent, setsockopt, shmctl, shmget, shmread,
shmwrite, socket, socketpair,
stat, symlink, syscall, sysopen, system,
times, truncate, umask, unlink,
utime, wait, waitpid
¤³¤ì¤é¤Î´Ø¿ô¤Î°Ü¿¢À¤Ë´Ø¤¹¤ë¤µ¤é¤Ê¤ë¾ðÊó¤Ë¤Ä¤¤¤Æ¤Ï¡¢ perlport ¤È¤½¤Î¾¤Î¥×¥é¥Ã¥È¥Û¡¼¥à¸ÇͤΥɥ¥å¥á¥ó¥È¤ò»²¾È¤·¤Æ²¼¤µ¤¤¡£
X ¤Ï°Ê²¼¤Ë¤¢¤²¤ëʸ»ú¤Ç¡¢¥Õ¥¡¥¤¥ë¥Æ¥¹¥È¤ò¹Ô¤Ê¤¤¤Þ¤¹¡£
¤³¤Îñ¹à±é»»»Ò¤Ï¡¢¥Õ¥¡¥¤¥ë̾¤«¥Õ¥¡¥¤¥ë¥Ï¥ó¥É¥ë¤òÍ£°ì¤Î
°ú¿ô¤È¤·¤ÆÆ°ºî¤·¡¢¡Ö¤¢¤ë¤³¤È¡×¤Ë¤Ä¤¤¤Æ¿¿¤Ç¤¢¤ë¤«Èݤ«¤ò
ȽÄꤷ¤¿·ë²Ì¤òÊÖ¤·¤Þ¤¹¡£
°ú¿ô¤¬¾Êά¤µ¤ì¤ë¤È¡¢-t ¤Ç¤Ï STDIN ¤òÄ´¤Ù¤Þ¤¹¤¬¡¢¤½¤Î¾¤Ï $_ ¤òÄ´¤Ù¤Þ¤¹¡£
ÆÃ¤Ëµ½Ò¤µ¤ì¤Æ¤¤¤Ê¤±¤ì¤Ð¡¢¿¿¤È¤·¤Æ 1 ¤òÊÖ¤·¡¢µ¶¤È¤·¤Æ
'' ¤òÊÖ¤·¡¢¥Õ¥¡¥¤¥ë¤¬Â¸ºß¤·¤Ê¤±¤ì¤Ð¡¢Ì¤ÄêµÁÃͤòÊÖ¤·¤Þ¤¹¡£
¤ß¤«¤±¤ÏÊѤï¤Ã¤Æ¤¤¤Þ¤¹¤¬¡¢Í¥Àè½ç°Ì¤Ï̾Á°Éդñ¹à±é»»»Ò¤ÈƱ¤¸¤Ç¡¢
¾¤Îñ¹à±é»»»Ò¤ÈƱ¤¸¤¯¡¢°ú¿ô¤ò³ç¸Ì¤Ç³ç¤ë¤³¤È¤â¤Ç¤¤Þ¤¹¡£
±é»»»Ò¤Ë¤Ï°Ê²¼¤Î¤â¤Î¤¬¤¢¤ê¤Þ¤¹:
-r ¥Õ¥¡¥¤¥ë¤¬¼Â¸ú uid/gid ¤ÇÆÉ¤ß½Ð¤·²Ä
-w ¥Õ¥¡¥¤¥ë¤¬¼Â¸ú uid/gid ¤Ç½ñ¤¹þ¤ß²Ä
-x ¥Õ¥¡¥¤¥ë¤¬¼Â¸ú uid/gid ¤Ç¼Â¹Ô²Ä
-o ¥Õ¥¡¥¤¥ë¤¬¼Â¸ú uid ¤Î½êÍʪ
-R ¥Õ¥¡¥¤¥ë¤¬¼Â uid/gid ¤ÇÆÉ¤ß½Ð¤·²Ä
-W ¥Õ¥¡¥¤¥ë¤¬¼Â uid/gid ¤Ç½ñ¤¹þ¤ß²Ä
-X ¥Õ¥¡¥¤¥ë¤¬¼Â uid/gid ¤Ç¼Â¹Ô²Ä
-O ¥Õ¥¡¥¤¥ë¤¬¼Â uid ¤Î½êÍʪ
-e ¥Õ¥¡¥¤¥ë¤¬Â¸ºß¤¹¤ë
-z ¥Õ¥¡¥¤¥ë¤ÎÂ礤µ¤¬¥¼¥í(¶õ)
-s ¥Õ¥¡¥¤¥ë¤ÎÂ礤µ¤¬¥¼¥í°Ê³° (¥Ð¥¤¥Èñ°Ì¤Ç¤ÎÂ礤µ¤òÊÖ¤¹)
-f ¥Õ¥¡¥¤¥ë¤ÏÄ̾ï¥Õ¥¡¥¤¥ë
-d ¥Õ¥¡¥¤¥ë¤Ï¥Ç¥£¥ì¥¯¥È¥ê
-l ¥Õ¥¡¥¤¥ë¤Ï¥·¥ó¥Ü¥ê¥Ã¥¯¥ê¥ó¥¯
-p ¥Õ¥¡¥¤¥ë¤Ï̾Á°ÉÕ¤¥Ñ¥¤¥× (FIFO) ¤Þ¤¿¤Ï¥Õ¥¡¥¤¥ë¥Ï¥ó¥É¥ë¤Ï¥Ñ¥¤¥×
-S ¥Õ¥¡¥¤¥ë¤Ï¥½¥±¥Ã¥È
-b ¥Õ¥¡¥¤¥ë¤Ï¥Ö¥í¥Ã¥¯ÆÃ¼ì¥Õ¥¡¥¤¥ë
-c ¥Õ¥¡¥¤¥ë¤Ï¥¥ã¥é¥¯¥¿ÆÃ¼ì¥Õ¥¡¥¤¥ë
-t ¥Õ¥¡¥¤¥ë¥Ï¥ó¥É¥ë¤Ï tty ¤Ë¥ª¡¼¥×¥ó¤µ¤ì¤Æ¤¤¤ë
-u ¥Õ¥¡¥¤¥ë¤Î setuid ¥Ó¥Ã¥È¤¬¥»¥Ã¥È¤µ¤ì¤Æ¤¤¤ë
-g ¥Õ¥¡¥¤¥ë¤Î setgid ¥Ó¥Ã¥È¤¬¥»¥Ã¥È¤µ¤ì¤Æ¤¤¤ë
-k ¥Õ¥¡¥¤¥ë¤Î sticky ¥Ó¥Ã¥È¤¬¥»¥Ã¥È¤µ¤ì¤Æ¤¤¤ë
-T ¥Õ¥¡¥¤¥ë¤Ï ASCII ¥Æ¥¥¹¥È¥Õ¥¡¥¤¥ë (ȯ¸«Åª¤Ë¿ä¬¤·¤Þ¤¹)
-B ¥Õ¥¡¥¤¥ë¤Ï¡Ö¥Ð¥¤¥Ê¥ê¡×¥Õ¥¡¥¤¥ë (-T ¤ÎÈ¿ÂÐ)
-M ¥¹¥¯¥ê¥×¥È¼Â¹Ô³«»Ï»þ¹ï¤«¤é¥Õ¥¡¥¤¥ë½¤Àµ»þ¹ï¤ò°ú¤¤¤¿¤â¤Î(Æüñ°Ì)
-A ƱÍͤ˥¢¥¯¥»¥¹¤¬¤¢¤Ã¤Æ¤«¤é¤ÎÆü¿ô
-C ƱÍͤË(Unix ¤Ç¤Ï) inode ¤¬Êѹ¹¤µ¤ì¤Æ¤«¤é¤ÎÆü¿ô(¤½¤ì°Ê³°¤Î¥×¥é¥Ã¥È¥Õ¥©¡¼¥à¤Ç¤Ï°ã¤¦¤«¤â¤·¤ì¤Þ¤»¤ó)
Îã:
while (<>) {
chomp;
next unless -f $_; # ignore specials
#...
}
¥Õ¥¡¥¤¥ë¤Î¥Ñ¡¼¥ß¥Ã¥·¥ç¥ó±é»»»Ò -r, -R, -w, -W, -x,
-X ¤Î²ò¼á¤Ï¡¢¥Õ¥¡¥¤¥ë¤Î¥â¡¼¥É¤È¥æ¡¼¥¶¤Î¼Â¸ú¡¿¼Â uid ¤È
¼Â¸ú¡¿¼Â gid ¤Î¤ß¤«¤éȽÃǤµ¤ì¤Þ¤¹¡£
¼ÂºÝ¤Ë¥Õ¥¡¥¤¥ë¤¬ÆÉ¤á¤¿¤ê¡¢½ñ¤±¤¿¤ê¡¢¼Â¹Ô¤Ç¤¤¿¤ê¤¹¤ë¤¿¤á¤Ë¤Ï¡¢
Ê̤ξò·ï¤¬É¬Íפ«¤â¤·¤ì¤Þ¤»¤ó:
Î㤨¤Ð¡¢¥Í¥Ã¥È¥ï¡¼¥¯¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¥¢¥¯¥»¥¹¥³¥ó¥È¥í¡¼¥ë¡¢
ACL(¥¢¥¯¥»¥¹¥³¥ó¥È¥í¡¼¥ë¥ê¥¹¥È)¡¢ÆÉ¤ß¹þ¤ßÀìÍÑ¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¡¢
ǧ¼±¤Ç¤¤Ê¤¤¼Â¹Ô¥Õ¥¡¥¤¥ë¥Õ¥©¡¼¥Þ¥Ã¥È¡¢¤Ê¤É¤Ç¤¹¡£
¤³¤ì¤é¤Î 6 ¤Ä¤Î±é»»»Ò¤ò¡¢ÆÃÄê¤ÎÁàºî¤¬²Äǽ¤«¤É¤¦¤«¤ò³Îǧ¤¹¤ë¤¿¤á¤Ë»È¤¦¤Î¤Ï
Ä̾ï¤Ï¸í¤ê¤Ç¤¢¤ë¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤; ¤Ê¤¼¤Ê¤é¡¢¤³¤ì¤é¤Ï¶¥¹ç¾ò·ï¤ò
¾·¤¤ä¤¹¤¤¤«¤é¤Ç¤¹¡£
¥í¡¼¥«¥ë¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤Î¥¹¡¼¥Ñ¡¼¥æ¡¼¥¶¤Ë¤Ï¡¢
-r, -R, -w, -W ¤ËÂФ·¤Æ¡¢¾ï¤Ë 1 ¤¬Ê֤ꡢ¥â¡¼¥ÉÃæ¤Î
¤¤¤º¤ì¤«¤Î¼Â¹Ôµö²Ä¥Ó¥Ã¥È¤¬Î©¤Ã¤Æ¤¤¤ì¤Ð¡¢-x, -X ¤Ë¤â 1 ¤¬
Ê֤뤳¤È¤Ë¤âÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£
¥¹¡¼¥Ñ¡¼¥æ¡¼¥¶¤¬¼Â¹Ô¤¹¤ë¥¹¥¯¥ê¥×¥È¤Ç¤Ï¡¢¥Õ¥¡¥¤¥ë¤Î¥â¡¼¥É¤òÄ´¤Ù¤ë¤¿¤á¤Ë¤Ï¡¢
stat() ¤ò¹Ô¤Ê¤¦¤«¡¢¼Â¸ú uid ¤ò°ì»þŪ¤ËÊ̤Τâ¤Î¤Ë¤¹¤ë
ɬÍפ¬¤¢¤ë¤Ç¤·¤ç¤¦¡£
ACL ¤ò»È¤Ã¤Æ¤¤¤ë¾ì¹ç¤Ï¡¢À¸¤Î stat() ¥â¡¼¥É¥Ó¥Ã¥È¤è¤ê
ÀºÅ٤ι⤤·ë²Ì¤òºîÀ®¤¹¤ë filetest ¥×¥é¥°¥Þ¤¬¤¢¤ê¤Þ¤¹¡£
use filetest 'access' ¤È¤·¤¿¾ì¹ç¡¢¾å½Ò¤·¤¿¥Õ¥¡¥¤¥ë¥Æ¥¹¥È¤Ï
¥·¥¹¥Æ¥à¥³¡¼¥ë¤Î access() ¥Õ¥¡¥ß¥ê¡¼¤ò»È¤Ã¤Æ¸¢¸Â¤¬Í¿¤¨¤é¤ì¤Æ¤¤¤ë¤«
¤É¤¦¤«¤ò¥Æ¥¹¥È¤·¤Þ¤¹¡£
¤Þ¤¿¡¢¤³¤Î¥×¥é¥°¥Þ¤¬»ØÄꤵ¤ì¤Æ¤¤¤ë¾ì¹ç¡¢-x ¤È -X ¤Ï
¤¿¤È¤¨¼Â¹Ôµö²Ä¥Ó¥Ã¥È(¤Þ¤¿¤ÏÄɲäμ¹Եö²Ä ACL)¤¬¥»¥Ã¥È¤µ¤ì¤Æ¤¤¤Ê¤¤
¾ì¹ç¤Ç¤â¿¿¤òÊÖ¤¹¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£
¤³¤Îµóư¤Ï»ÈÍѤ¹¤ë¥·¥¹¥Æ¥à¥³¡¼¥ë¤ÎÄêµÁ¤Ë¤è¤ë¤â¤Î¤Ç¤¹¡£
use filetest 'access' ¤Î¼ÂÁõ¤Ë¤è¤ê¡¢¤³¤Î¥×¥é¥°¥Þ¤¬Í¸ú¤Î¾ì¹ç¤Ï
_ ÆÃ¼ì¥Õ¥¡¥¤¥ë¥Ï¥ó¥É¥ë¤Ï¥Õ¥¡¥¤¥ë¥Æ¥¹¥È¤Î·ë²Ì¤ò¥¥ã¥Ã¥·¥å¤·¤Ê¤¤¤³¤È¤Ë
Ãí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£
¤µ¤é¤Ê¤ë¾ðÊó¤Ë¤Ä¤¤¤Æ¤Ï filetest ¥×¥é¥°¥Þ¤Î¥É¥¥å¥á¥ó¥È¤ò
»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£
-s/a/b ¤Ï¡¢ÃÖ´¹±é»» (s///) ¤ÎÉä¹æÈ¿Å¾¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£
¤·¤«¤·¡¢-exp($foo) ¤Ï´üÂԤɤª¤ê¤Ëưºî¤·¤Þ¤¹¡£
¥Þ¥¤¥Ê¥¹µ¹æ¤Î¸å¤Ë±Ñ»ú¤¬ 1 »ú³¤¯¤È¤¤Ë¤Î¤ß¡¢¥Õ¥¡¥¤¥ë¥Æ¥¹¥È¤È
²ò¼á¤µ¤ì¤Þ¤¹¡£
¥Õ¥¡¥¤¥ë¥Æ¥¹¥È -T ¤È -B ¤Îưºî¸¶Íý¤Ï¡¢¼¡¤Î¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£
¥Õ¥¡¥¤¥ë¤ÎºÇ½é¤Î¿ô¥Ö¥í¥Ã¥¯¤òÄ´¤Ù¤Æ¡¢ÊѤï¤Ã¤¿À©¸æ¥³¡¼¥É¤ä
¾å°Ì¥Ó¥Ã¥È¤¬¥»¥Ã¥È¤µ¤ì¤Æ¤¤¤ë¤è¤¦¤Ê¡¢Ä̾ï¤Î¥Æ¥¥¹¥È¤Ë¤Ï¸½¤ì¤Ê¤¤Ê¸»ú¤òõ¤·¤Þ¤¹¡£
¤½¤Î¤è¤¦¤Êʸ»ú¤¬¡¢¤¿¤¯¤µ¤ó (>30%) ¸«¤Ä¤«¤ë¤è¤¦¤Ç¤¢¤ì¤Ð¡¢
¤½¤Î¥Õ¥¡¥¤¥ë¤Ï -B ¥Õ¥¡¥¤¥ë¤Ç¤¢¤ë¤ÈȽÃǤµ¤ì¤Þ¤¹;
¤µ¤â¤Ê¤±¤ì¤Ð -T ¥Õ¥¡¥¤¥ë¤È¤Ê¤ê¤Þ¤¹¡£
ºÇ½é¤Î¥Ö¥í¥Ã¥¯¤Ë¥Ì¥ëʸ»ú¤¬´Þ¤Þ¤ì¤ë¥Õ¥¡¥¤¥ë¤â¡¢
¥Ð¥¤¥Ê¥ê¥Õ¥¡¥¤¥ë¤È¤ß¤Ê¤µ¤ì¤Þ¤¹¡£
-T ¤ä -B ¤ò¥Õ¥¡¥¤¥ë¥Ï¥ó¥É¥ë¤ËÂФ·¤ÆÍѤ¤¤ë¤È¡¢
ºÇ½é¤Î¥Ö¥í¥Ã¥¯¤òÄ´¤Ù¤ëÂå¤ï¤ê¤Ë¡¢IO ¥Ð¥Ã¥Õ¥¡¤òÄ´¤Ù¤Þ¤¹¡£
Ä´¤Ù¤¿¥Õ¥¡¥¤¥ë¤ÎÃæ¿È¤¬²¿¤â¤Ê¤¤¤È¤¤ä¡¢
¥Õ¥¡¥¤¥ë¥Ï¥ó¥É¥ë¤òÄ´¤Ù¤¿¤È¤¤Ë EOF ¤Ë㤷¤Æ
¤¤¤¿¤È¤¤Ë¤Ï¡¢-T ¤â -B ¤â¡Ö¿¿¡×¤òÊÖ¤·¤Þ¤¹¡£
-T ¥Æ¥¹¥È¤ò¤¹¤ë¤¿¤á¤Ë¤Ï¥Õ¥¡¥¤¥ë¤òÆÉ¤ß¹þ¤Þ¤Ê¤¤¤È¤¤¤±¤Ê¤¤¤Î¤Ç¡¢
¤¿¤¤¤Æ¤¤¤Ï next unless -f $file && -T $file ¤È¤¤¤¦¤è¤¦¤Ê·Á¤Ç
¤Þ¤ºÄ´¤Ù¤¿¤¤¥Õ¥¡¥¤¥ë¤ËÂФ·¤Æ -f ¤ò»È¤¤¤¿¤¤¤Ï¤º¤Ç¤¹¡£
¤É¤Î¥Õ¥¡¥¤¥ë¥Æ¥¹¥È (¤¢¤ë¤¤¤Ï¡¢stat ¤ä lstat) ±é»»»Ò¤Ë¤â¡¢
²¼Àþ¤À¤±¤«¤éÀ®¤ëÆÃÊ̤ʥե¡¥¤¥ë¥Ï¥ó¥É¥ë¤òÍ¿¤¨¤ë¤È¡¢
Á°²ó¤Î¥Õ¥¡¥¤¥ë¥Æ¥¹¥È (¤ä stat) ¤Î stat ¹½Â¤ÂΤ¬»È¤ï¤ì¡¢
¥·¥¹¥Æ¥à¥³¡¼¥ë¤ò¾Ê¤¤Þ¤¹¡£
(-t ¤Ë¤Ï»È¤¨¤Þ¤»¤ó¤·¡¢lstat() ¤ä -l ¤Ï¼Â¥Õ¥¡¥¤¥ë¤Ç¤Ï¤Ê¤¯¡¢
¥·¥ó¥Ü¥ê¥Ã¥¯¥ê¥ó¥¯¤Î¾ðÊó¤ò stat ¹½Â¤ÂΤ˻Ĥ¹¤³¤È¤ò
³Ð¤¨¤Æ¤ª¤¯É¬Íפ¬¤¢¤ê¤Þ¤¹¡£)
(¤Þ¤¿¡¢stat ¥Ð¥Ã¥Õ¥¡¤¬ lstat ¸Æ¤Ó½Ð¤·¤ÇËä¤Þ¤Ã¤¿¾ì¹ç¡¢
-T ¤È -B ¤Î·ë²Ì¤Ï stat _ ¤Î·ë²Ì¤Ç¥ê¥»¥Ã¥È¤µ¤ì¤Þ¤¹¡£
Îã:
print "Can do.\n" if -r $a || -w _ || -x _;
stat($filename);
print "Readable\n" if -r _;
print "Writable\n" if -w _;
print "Executable\n" if -x _;
print "Setuid\n" if -u _;
print "Setgid\n" if -g _;
print "Sticky\n" if -k _;
print "Text\n" if -T _;
print "Binary\n" if -B _;
Perl 5.9.1 ¤«¤é¡¢½ã¿è¤Ë¥·¥ó¥¿¥Ã¥¯¥¹¥·¥å¥¬¡¼¤È¤·¤Æ¡¢¥Õ¥¡¥¤¥ë¥Æ¥¹¥È±é»»»Ò¤ò
¥¹¥¿¥Ã¥¯¤µ¤»¤ë¤³¤È¤¬¤Ç¤¤ë¤Î¤Ç¡¢-f -w -x $file ¤Ï
-x $file && -w _ && -f _ ¤ÈÅù²Á¤Ç¤¹¡£
(¤³¤ì¤Ðʸˡ¾å¤À¤±¤ÎÏäǤ¹; ¤â¤· -f $file ¤ÎÊÖ¤êÃͤò¾¤Î¥Õ¥¡¥¤¥ë¥Æ¥¹¥È
±é»»»Ò¤Î°ú¿ô¤È¤·¤Æ»È¤¦¾ì¹ç¤Ï¡¢²¿¤ÎÆÃÊ̤ʤ³¤È¤âµ¯¤¤Þ¤»¤ó¡£)
°ú¿ô¤ÎÀäÂÐÃͤòÊÖ¤·¤Þ¤¹¡£
VALUE ¤¬¾Êά¤µ¤ì¤¿¾ì¹ç¤Ï¡¢$_ ¤ò»È¤¤¤Þ¤¹¡£
accept(2) ¥·¥¹¥Æ¥à¥³¡¼¥ë¤ÈƱÍͤˡ¢Ãå¿®¤¹¤ë¥½¥±¥Ã¥È¤ÎÀܳ¤ò¼õ¤±ÉÕ¤±¤Þ¤¹¡£
À®¸ù»þ¤Ë¤Ï¥Ñ¥Ã¥¯¤µ¤ì¤¿¥¢¥É¥ì¥¹¤òÊÖ¤·¡¢¼ºÇÔ¤¹¤ì¤Ðµ¶¤òÊÖ¤·¤Þ¤¹¡£
Sockets: Client/Server Communication in perlipc ¤Î
Îã¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£
¥Õ¥¡¥¤¥ë¤ËÂФ¹¤ë close-on-exec ¥Õ¥é¥°¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤ë¥·¥¹¥Æ¥à¤Ç¤Ï¡¢ ¥Õ¥é¥°¤Ï $^F ¤ÎÃͤǷèÄꤵ¤ì¤ë¡¢¿·¤·¤¯¥ª¡¼¥×¥ó¤µ¤ì¤¿¥Õ¥¡¥¤¥ëµ½Ò»Ò¤ËÂФ·¤Æ ¥»¥Ã¥È¤µ¤ì¤Þ¤¹¡£$^F in perlvar ¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£
»ØÄꤷ¤¿ÊÉ»þ·×Éÿô¤¬·Ð²á¤·¤¿¸å¤Ë¡¢¼«¥×¥í¥»¥¹¤Ë SIGALRM ¤¬
Á÷¤é¤ì¤Æ¤¯¤ë¤è¤¦¤Ë¤·¤Þ¤¹¡£SECONDS ¤¬»ØÄꤵ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ï¡¢
$_¤Ë³ÊǼ¤µ¤ì¤Æ¤¤¤ëÃͤò»È¤¤¤Þ¤¹¡£
(¥Þ¥·¥ó¤Ë¤è¤Ã¤Æ¤Ï¡¢Éäοô¤¨Êý¤¬°Û¤Ê¤ë¤¿¤á¡¢»ØÄꤷ¤¿Éÿô¤è¤ê¤â
ºÇÂç¤Ç 1 É交ì¤Þ¤¹¡£)
°ìÅÙ¤Ë¤Ï 1 ¤Ä¤Î¥¿¥¤¥Þ¤À¤±¤¬ÀßÄê²Äǽ¤Ç¤¹¡£
¸Æ¤Ó½Ð¤·¤ò¹Ô¤Ê¤¦Å٤ˡ¢°ÊÁ°¤Î¥¿¥¤¥Þ¤ò̵¸ú¤Ë¤·¤Þ¤¹¤·¡¢
¿·¤·¤¯¥¿¥¤¥Þ¤òµ¯Æ°¤·¤Ê¤¤¤Ç°ÊÁ°¤Î¥¿¥¤¥Þ¤ò¥¥ã¥ó¥»¥ë¤¹¤ë¤¿¤á¤Ë
°ú¿ô¤Ë 0 ¤ò»ØÄꤷ¤Æ¸Æ¤Ó½Ð¤¹¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
°ÊÁ°¤Î¥¿¥¤¥Þ¤Î»Ä¤ê»þ´Ö¤¬¡¢ÊÖ¤êÃͤȤʤê¤Þ¤¹¡£
1 Éäè¤êÀºÅ٤ι⤤¥¹¥ê¡¼¥×¤ò¹Ô¤Ê¤¦¤Ë¤Ï¡¢
Time::HiRes ¥â¥¸¥å¡¼¥ë(CPAN ¤«¤é¡¢¤Þ¤¿ Perl 5.8 ¤«¤é¤Ï
ɸ½àÇÛÉÛ¤µ¤ì¤Æ¤¤¤Þ¤¹) ¤¬ ualarm() ¤òÄ󶡤·¤Þ¤¹¡£
Perl ¤Î 4 °ú¿ôÈÇ select() ¤òºÇ½é¤Î 3 °ú¿ô¤ò̤ÄêµÁ¤Ë¤·¤Æ»È¤¦¤«¡¢
setitimer(2) ¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤ë¥·¥¹¥Æ¥à¤Ç¤Ï¡¢Perl ¤Î
syscall ¥¤¥ó¥¿¥Õ¥§¡¼¥¹¤ò»È¤Ã¤Æ¥¢¥¯¥»¥¹¤¹¤ë¤³¤È¤â¤Ç¤¤Þ¤¹¡£
¾Ü¤·¤¯¤Ï perlfaq8 ¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£
alarm ¤È sleep ¤òº®¤¼¤Æ»È¤¦¤Î¤ÏÉáÄ̤ϴְ㤤¤Ç¤¹¡£
(sleep ¤ÏÆâÉôŪ¤Ë alarm ¤ò»È¤Ã¤ÆÆâÉôŪ¤Ë¼ÂÁõ¤µ¤ì¤Æ¤¤¤ë¤«¤â¤·¤ì¤Þ¤»¤ó)
alarm ¤ò¥·¥¹¥Æ¥à¥³¡¼¥ë¤Î»þ´ÖÀÚ¤ì¤Î¤¿¤á¤Ë»È¤¤¤¿¤¤¤Ê¤é¡¢
eval/die ¤Î¥Ú¥¢¤Ç»È¤¦É¬Íפ¬¤¢¤ê¤Þ¤¹¡£
¥·¥¹¥Æ¥à¥³¡¼¥ë¤¬¼ºÇÔ¤·¤¿¤È¤¤Ë $! ¤Ë EINTR ¤¬¥»¥Ã¥È¤µ¤ì¤ë¤³¤È¤Ë
Íê¤Ã¤Æ¤Ï¤¤¤±¤Þ¤»¤ó¡£¤Ê¤¼¤Ê¤é¥·¥¹¥Æ¥à¤Ë¤è¤Ã¤Æ¤Ï Perl ¤Ï
¥·¥¹¥Æ¥à¥³¡¼¥ë¤òºÆ³«¤¹¤ë¤¿¤á¤Ë¥·¥°¥Ê¥ë¥Ï¥ó¥É¥é¤òÀßÄꤹ¤ë¤«¤é¤Ç¤¹¡£
eval/die ¤Ï¾ï¤Ë¤¦¤Þ¤¯Æ°¤¤Þ¤¹¡£
Ãí°ÕÅÀ¤Ë¤Ä¤¤¤Æ¤Ï Signals in perlipc ¤ò»²¾È¤·¤Æ²¼¤µ¤¤¡£
eval {
local $SIG{ALRM} = sub { die "alarm\n" }; # NB: \n required
alarm $timeout;
$nread = sysread SOCKET, $buffer, $size;
alarm 0;
};
if ($@) {
die unless $@ eq "alarm\n"; # propagate unexpected errors
# timed out
}
else {
# didn't
}
¤µ¤é¤Ê¤ë¾ðÊó¤Ë¤Ä¤¤¤Æ¤Ï perlipc ¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£
-¦Ð¤«¤é¦Ð¤ÎÈÏ°Ï¤Ç Y/X ¤ÎµÕÀµÀܤòÊÖ¤·¤Þ¤¹¡£
ÀµÀܤòµá¤á¤¿¤¤¤È¤¤Ï¡¢Math::Trig::tan ¤ò»È¤¦¤«¡¢
°Ê²¼¤Î¤è¤¯ÃΤé¤ì¤¿´Ø·¸¤ò»È¤Ã¤Æ¤¯¤À¤µ¤¤¡£
sub tan { sin($_[0]) / cos($_[0]) }
atan2(0, 0) ¤Ï̤ÄêµÁ¤Ç¤¢¤ë¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£
bind(2) ¥·¥¹¥Æ¥à¥³¡¼¥ë¤ÈƱÍͤˡ¢¥Í¥Ã¥È¥ï¡¼¥¯¥¢¥É¥ì¥¹¤ò¥½¥±¥Ã¥È¤Ë·ë¤ÓÉÕ¤±¤Þ¤¹¡£
À®¸ù»þ¤Ë¤Ï¿¿¤òÊÖ¤·¡¢¼ºÇÔ»þ¤Ë¤Ïµ¶¤òÊÖ¤·¤Þ¤¹¡£
NAME ¤Ï¡¢¥½¥±¥Ã¥È¤ËÂФ¹¤ë¡¢Å¬Àڤʷ¿¤Î¥Ñ¥Ã¥¯¤µ¤ì¤¿¥¢¥É¥ì¥¹¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£
Sockets: Client/Server Communication in perlipc ¤ÎÎã¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£
¥Ð¥¤¥Ê¥ê¥Õ¥¡¥¤¥ë¤È¥Æ¥¥¹¥È¥Õ¥¡¥¤¥ë¤ò¶èÊ̤¹¤ë OS ¤Ë¤ª¤¤¤Æ¡¢ FILEHANDLE ¤ò¡Ö¥Ð¥¤¥Ê¥ê¡×¤Þ¤¿¤Ï¡Ö¥Æ¥¥¹¥È¡×¤ÇÆÉ¤ß½ñ¤¤¹¤ë¤è¤¦¤Ë »ØÄꤷ¤Þ¤¹¡£ FILEHANDLE ¤¬¼°¤Ç¤¢¤ë¾ì¹ç¤Ë¤Ï¡¢¤½¤Î¼°¤ÎÃͤ¬¥Õ¥¡¥¤¥ë¥Ï¥ó¥É¥ë¤Î ̾Á°¤È¤·¤Æ»È¤ï¤ì¤Þ¤¹¡£
¥Æ¥¥¹¥È¥Õ¥¡¥¤¥ë¤Ç¤Ê¤¤¤â¤Î¤ò°·¤¦¾ì¹ç¤Ë binmode() ¤¬É¬ÍפÊ
¥·¥¹¥Æ¥à¤â¤¢¤ê¤Þ¤¹(°ìÈÌŪ¤Ë¤Ï DOS ¤È Windows ¥Ù¡¼¥¹¤Î¥·¥¹¥Æ¥à¤Ç¤¹)¡£
°Ü¿¢À¤Î¤¿¤á¤Ë¡¢Å¬ÀڤʤȤ¤Ë¤Ï¾ï¤Ë¤³¤ì¤ò»È¤¤¡¢Å¬ÀڤǤʤ¤¤È¤¤Ë¤Ï
·è¤·¤Æ»È¤ï¤Ê¤¤¤È¤¤¤¦¤Î¤ÏÎɤ¤¹Í¤¨¤Ç¤¹¡£
¤Þ¤¿¡¢¥Ç¥Õ¥©¥ë¥È¤È¤·¤Æ I/O ¤ò bytes ¤Ç¤Ï¤Ê¤¯ UTF-8 ¥¨¥ó¥³¡¼¥É¤µ¤ì¤¿
Unicode ¤Ë¥»¥Ã¥È¤¹¤ë¤³¤È¤â½ÐÍè¤Þ¤¹¡£
¸À¤¤´¹¤¨¤ë¤È: ¥×¥é¥Ã¥È¥Õ¥©¡¼¥à¤Ë´Ø¤ï¤é¤º¡¢
Îã¤Î¥¤¥á¡¼¥¸¤Î¤è¤¦¤Ê¥Ð¥¤¥Ê¥ê¥Õ¥¡¥¤¥ë¤ËÂФ·¤Æ¤Ï binmode() ¤ò»È¤Ã¤Æ¤¯¤À¤µ¤¤¡£
LAYER ¤¬Â¸ºß¤¹¤ë¤È¡¢¤½¤ì¤Ïñ°ì¤Îʸ»úÎó¤Ç¤¹¤¬¡¢Ê£¿ô¤Î»Ø¼¨»Ò¤ò ´Þ¤à¤³¤È¤¬¤Ç¤¤Þ¤¹¡£ »Ø¼¨»Ò¤Ï¥Õ¥¡¥¤¥ë¥Ï¥ó¥É¥ë¤Î¿¶¤ëÉñ¤¤¤òÊѹ¹¤·¤Þ¤¹¡£ LAYER ¤¬Â¸ºß¤¹¤ë¤È¡¢¥Æ¥¥¹¥È¥Õ¥¡¥¤¥ë¤Ç¤Î binmode ¤¬°ÕÌ£¤ò»ý¤Á¤Þ¤¹¡£
LAYER ¤¬¾Êά¤µ¤ì¤¿¤ê¡¢:raw ¤¬»ØÄꤵ¤ì¤ë¤È¡¢¥Õ¥¡¥¤¥ë¥Ï¥ó¥É¥ë¤Ï¥Ð¥¤¥Ê¥ê
¥Ç¡¼¥¿¤ÎÄ̲á¤ËŬ¤¹¤ë¤è¤¦¤ËÀßÄꤵ¤ì¤Þ¤¹¡£
¤³¤ì¤Ë¤Ï CRLF ÊÑ´¹¤ò¥ª¥Õ¤Ë¤·¤¿¤ê¡¢¤½¤ì¤¾¤ì¤ò(Unicode ʸ»ú¤Ç¤Ï¤Ê¤¯)
¥Ð¥¤¥È¤Ç¤¢¤ë¤È¥Þ¡¼¥¯¤·¤¿¤ê¤¹¤ë¤³¤È¤ò´Þ¤ß¤Þ¤¹¡£
"¥×¥í¥°¥é¥ß¥ó¥° Perl"(¥é¥¯¥ÀËÜ) ¤ä¤½¤Î¾¤Ç°Å¼¨¤µ¤ì¤Æ¤¤¤ë¤Ë¤â´Ø¤ï¤é¤º¡¢
:raw ¤Ïñ¤Ê¤ë :crlf ¤Î µÕ¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó -- ¥¹¥È¥ê¡¼¥à¤Î
¥Ð¥¤¥Ê¥ê¤È¤·¤Æ¤ÎÀ¼Á¤Ë±Æ¶Á¤òÍ¿¤¨¤ë ¤½¤Î¾¤ÎÁؤâ̵¸ú¤Ë¤µ¤ì¤Þ¤¹¡£
PerlIO, perlrun ¤ª¤è¤ÓPERLIO ´Ä¶ÊÑ¿ô¤Ë´Ø¤¹¤ëµÄÏÀ¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£
:bytes, :crlf, and :utf8, µÚ¤Ó¤½¤Î¾¤Î :... ·Á¼°¤Î»Ø¼¨»Ò¤Ï
I/O ÁØ ¤¬¸Æ¤Ó½Ð¤µ¤ì¤Þ¤¹¡£
open ¥×¥é¥°¥Þ¤Ï¥Ç¥Õ¥©¥ë¥È I/O Áؤò»ØÄꤹ¤ë¤¿¤á¤Ë»È¤ï¤ì¤Þ¤¹¡£
open ¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£
binmode() ´Ø¿ô¤Î LAYER ¥Ñ¥é¥á¡¼¥¿¤Ï ¡Ö¥×¥í¥°¥é¥ß¥ó¥°Perl Âè3ÈÇ¡×¤Ç¤Ï ¡Ö¥Ç¥£¥·¥×¥ê¥ó(DISCIPLINE)¡×¤Èɽ¸½¤µ¤ì¤Æ¤¤¤Þ¤·¤¿¡£ ¤·¤«¤·¡¢¡Ö¥é¥¯¥ÀËÜÂè3ÈǡפȤ·¤ÆÃΤé¤ì¤Æ¤¤¤ë¤³¤ÎËܤνÐÈǸ塢¤³¤Îµ¡Ç½¤Î̾Á°¤Ï ¡Ö¥Ç¥£¥·¥×¥ê¥ó¡×¤«¤é¡ÖÁءפËÊѹ¹¤¹¤ë¤³¤È¤Ç¹ç°Õ¤µ¤ì¤Þ¤·¤¿¡£ ½¾¤Ã¤Æ¡¢¤³¤Î¥Ð¡¼¥¸¥ç¥ó¤Î Perl ¤ÎÁ´¤Æ¤Îʸ½ñ¤Ç¤Ï¡Ö¥Ç¥£¥·¥×¥ê¥ó¡×¤Ç¤Ï¤Ê¤¯ ¡ÖÁءפȵ½Ò¤µ¤ì¤Æ¤¤¤Þ¤¹¡£¤Ç¤ÏÄ̾ï¤Î²òÀâ¤ËÌá¤ê¤Þ¤¹¡Ä¡£
FILEHANDLE ¤¬ UTF-8 ¤Ç¤¢¤ë¤È¤¤¤¦¥Þ¡¼¥¯¤ò¤Ä¤±¤ë¤Ë¤Ï¡¢:utf8 ¤«
:encoding(utf8) ¤ò»È¤Ã¤Æ¤¯¤À¤µ¤¤¡£
:utf8 ¤Ï¡¢¤µ¤é¤Ê¤ë¥Á¥§¥Ã¥¯¤Ê¤·¤Ë¥Ç¡¼¥¿¤¬ UTF-8 ¤È¤·¤Æ¥Þ¡¼¥¯¤·¤Þ¤¹¤¬¡¢
:encoding(utf8) ¤Ï¥Ç¡¼¥¿¤¬¼ÂºÝ¤Ë͸ú¤Ê UTF-8 ¤«¤É¤¦¤«¤ò¥Á¥§¥Ã¥¯¤·¤Þ¤¹¡£
¤µ¤é¤Ê¤ë¾ÜºÙ¤Ï PerlIO::encoding ¤Ë¤¢¤ê¤Þ¤¹¡£
°ìÈÌŪ¤Ë binmode() ¤Ï open() ¤ò¸Æ¤Ó½Ð¤·¤¿¸å¡¢¤³¤Î¥Õ¥¡¥¤¥ë¥Ï¥ó¥É¥ë¤ËÂФ¹¤ë
I/O Áàºî¤ò¤¹¤ëÁ°¤Ë¸Æ¤Ó½Ð¤¹¤Ù¤¤Ç¤¹¡£
binmode() ¤ò¸Æ¤Ó½Ð¤¹¤È¡¢ÉáÄ̤Ϥ³¤Î¥Õ¥¡¥¤¥ë¥Ï¥ó¥É¥ë¤ËÂФ·¤Æ
¥Ð¥Ã¥Õ¥¡¥ê¥ó¥°¤µ¤ì¤Æ¤¤¤ëÁ´¤Æ¤Î½ÐÎϥǡ¼¥¿
(¤ª¤è¤Ó¤ª¤½¤é¤¯¤ÏÆþÎϥǡ¼¥¿)¤ò¥Õ¥é¥Ã¥·¥å¤·¤Þ¤¹¡£
Îã³°¤Ï¡¢¤³¤Î¥Ï¥ó¥É¥ë¤ËÂФ¹¤ë¥Ç¥Õ¥©¥ë¥Èʸ»ú¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤òÊѹ¹¤¹¤ë
:encoding ÁؤǤ¹; open ¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£
:encoding Áؤϥ¹¥È¥ê¡¼¥à¤ÎÅÓÃæ¤Ç¸Æ¤Ó½Ð¤¹É¬Íפ¬¤¢¤ë¤³¤È¤¬¤¢¤ê¡¢
¤½¤ì¤Ë¤è¤Ã¤Æ¥¹¥È¥ê¡¼¥à¤Ï¥Õ¥é¥Ã¥·¥å¤µ¤ì¤Þ¤»¤ó¡£
Perl ¤ÏÆâÉô¤Ç UTF-8 ¥¨¥ó¥³¡¼¥É¤µ¤ì¤¿ Unicode ʸ»ú¤òÁàºî¤·¤Æ¤¤¤ë¤Î¤Ç¡¢
:encoding ¤Ï°ÅÌۤΤ¦¤Á¤Ë¼«¿È¤ò :utf8 Áؤξå¤Ë²¡¤·¾å¤²¤Þ¤¹¡£
¥ª¥Ú¥ì¡¼¥·¥ç¥ó¥·¥¹¥Æ¥à¡¢¥Ç¥Ð¥¤¥¹¥É¥é¥¤¥Ð¡¢C ¥é¥¤¥Ö¥é¥ê¡¢
Perl ¥é¥ó¥¿¥¤¥à¥·¥¹¥Æ¥à¤ÏÁ´¤Æ¡¢¥×¥í¥°¥é¥Þ¤¬³°Éôɽ¸½¤Ë´Ø¤ï¤é¤º
1 ʸ»ú (\n) ¤ò¹Ô½ªÃ¼¤È¤·¤Æ°·¤¨¤ë¤è¤¦¤Ë¶¨Ä´ºî¶È¤·¤Þ¤¹¡£
¿¤¯¤Î¥ª¥Ú¥ì¡¼¥Æ¥£¥ó¥°¥·¥¹¥Æ¥à¤Ç¤Ï¡¢¥Í¥¤¥Æ¥£¥Ö¥Æ¥¥¹¥È¥Õ¥¡¥¤¥ëɽ¸½¤Ï
ÆâÉôɽ¸½¤ÈƱ¤¸¤Ç¤¹¤¬¡¢\n ¤Î³°Éôɽ¸½¤¬Ê£¿ôʸ»ú¤Ë¤Ê¤ë
¥×¥é¥Ã¥È¥Õ¥©¡¼¥à¤â¤¢¤ê¤Þ¤¹¡£
Mac OS¡¢Á´¤Æ¤Î Unix ·Ï¡¢VMS ¤Î Stream_LF ¥Õ¥¡¥¤¥ë¤Ï
¥Æ¥¥¹¥È¤Î³°Éôɽ¸½¤È¤·¤Æ³Æ¹Ô¤ÎËöÈø¤Ë 1 ¤Ä¤Îʸ»ú¤ò
»È¤Ã¤Æ¤¤¤Þ¤¹(¤½¤Îʸ»ú¤Ï Mac OS ¤Ç¤ÏÉüµ¢¤Ç¡¢
Unix ¤È¤Û¤È¤ó¤É¤ÎVMS ¤Î¥Õ¥¡¥¤¥ë¤Ç¤Ï²þ¹Ô¤Ç¤¹)¡£
VMS, MS-DOS, MS-Windows ·Ï¤È¤¤¤Ã¤¿¤½¤Î¾¤Î¥·¥¹¥Æ¥à¤Ç¤Ï¡¢
¥×¥í¥°¥é¥à¤«¤é¤Ï \n ¤Ïñ½ã¤Ë \cJ ¤Ë¸«¤¨¤Þ¤¹¤¬¡¢
¥Æ¥¥¹¥È¥Õ¥¡¥¤¥ë¤È¤·¤ÆÊݸ¤µ¤ì¤ë¾ì¹ç¤Ï \cM\cJ ¤Î 2 ʸ»ú¤Ë¤Ê¤ê¤Þ¤¹¡£
¤Ä¤Þ¤ê¡¢¤â¤·¤³¤ì¤é¤Î¥·¥¹¥Æ¥à¤Ç binmode() ¤ò»È¤ï¤Ê¤¤¤È¡¢
¥Ç¥£¥¹¥¯¾å¤Î \cM\cJ ¤È¤¤¤¦ÊÂ¤Ó¤ÏÆþÎÏ»þ¤Ë \n ¤ËÊÑ´¹¤µ¤ì¡¢
¥×¥í¥°¥é¥à¤¬½ÐÎϤ·¤¿Á´¤Æ¤Î \n ¤Ï \cM\cJ ¤ËµÕÊÑ´¹¤µ¤ì¤Þ¤¹¡£
¤³¤ì¤Ï¥Æ¥¥¹¥È¥Õ¥¡¥¤¥ë¤Î¾ì¹ç¤Ï»×¤¤Ä̤ê¤Î·ë²Ì¤Ç¤·¤ç¤¦¤¬¡¢
¥Ð¥¤¥Ê¥ê¥Õ¥¡¥¤¥ë¤Î¾ì¹ç¤ÏÈá»´¤Ç¤¹¡£
binmode() ¤ò(¤¤¤¯¤Ä¤«¤Î¥·¥¹¥Æ¥à¤Ç)»È¤¦¤³¤È¤Ë¤è¤ë¤½¤Î¾¤ÎºîÍѤȤ·¤Æ¤Ï¡¢
ÆÃÊ̤ʥե¡¥¤¥ë½ªÃ¼¥Þ¡¼¥«¡¼¤¬¥Ç¡¼¥¿¥¹¥È¥ê¡¼¥à¤Î°ìÉô¤È¤·¤Æ
¸«¤é¤ì¤ë¤³¤È¤Ç¤¹¡£
Microsoft ¥Õ¥¡¥ß¥ê¡¼¤Î¥·¥¹¥Æ¥à¤Ç¤Ï¡¢binmode() ¤ò»È¤Ã¤Æ¤¤¤Ê¤¤¤È
¤â¤·¥Ð¥¤¥Ê¥ê¥Ç¡¼¥¿¤Ë \cZ ¤¬´Þ¤Þ¤ì¤Æ¤¤¤¿¤È¤¤Ë¡¢I/O ¥µ¥Ö¥·¥¹¥Æ¥à¤¬
¤³¤ì¤ò¥Õ¥¡¥¤¥ë½ªÃ¼¤È¤ß¤Ê¤¹¤³¤È¤ò°ÕÌ£¤·¤Þ¤¹¡£
binmode() ¤Ï readline() ¤È print() Áàºî¤Ë¤À¤±¤Ç¤Ï¤Ê¤¯¡¢
read(), seek(), sysread(), syswrite(), tell() ¤ò»È¤¦¤È¤¤Ë¤â½ÅÍפǤ¹
(¾ÜºÙ¤Ï perlport ¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤)¡£
Æþ½ÐÎϤιÔüËö¥·¡¼¥±¥ó¥¹¤ò¼êư¤Ç¥»¥Ã¥È¤¹¤ëÊýË¡¤Ë¤Ä¤¤¤Æ¤Ï
perlvar ¤Î $/ ÊÑ¿ô¤È $\ ÊÑ¿ô¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£
¤³¤Î´Ø¿ô¤Ï¡¢REF ¤ÇÅϤµ¤ì¤¿ ¥ª¥Ö¥¸¥§¥¯¥È¤ËÂФ·¡¢
CLASSNAME Æâ¤Î¥ª¥Ö¥¸¥§¥¯¥È¤È¤Ê¤Ã¤¿¤³¤È¤òÅÁ¤¨¤Þ¤¹¡£
CLASSNAME ¤¬¾Êά¤µ¤ì¤¿¾ì¹ç¤Ë¤Ï¡¢¤½¤Î»þÅÀ¤Î¥Ñ¥Ã¥±¡¼¥¸¤È¤Ê¤ê¤Þ¤¹¡£
bless ¤ÏÄ̾¥³¥ó¥¹¥È¥é¥¯¥¿¤ÎºÇ¸å¤ËÃÖ¤«¤ì¤Þ¤¹¤Î¤Ç¡¢
´ÊÊØ¤Î¤¿¤á¤Ë¤½¤Î¥ê¥Õ¥¡¥ì¥ó¥¹¤òÊÖ¤·¤Þ¤¹¡£
ÇÉÀ¸¥¯¥é¥¹¤¬ bless ¤µ¤ì¤ë´Ø¿ô¤ò·Ñ¾µ¤¹¤ë¾ì¹ç¤Ï¡¢
¾ï¤Ë 2 °ú¿ôÈǤò»È¤Ã¤Æ¤¯¤À¤µ¤¤¡£
¥ª¥Ö¥¸¥§¥¯¥È¤Î bless (¤äºÆ bless) ¤Ë¤Ä¤¤¤Æ¡¢
¾Ü¤·¤¯¤Ï perltoot ¤È perlobj ¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£
Âçʸ»ú¾®Ê¸»ú¤¬º®¤¸¤Ã¤Æ¤¤¤ë CLASSNAME ¤Î¥ª¥Ö¥¸¥§¥¯¥È¤Ï¾ï¤Ë bless ¤¹¤ë¤³¤È¤ò ¹Íθ¤·¤Æ¤¯¤À¤µ¤¤¡£ Á´¤Æ¾®Ê¸»ú¤Î̾Á°¤ò»ý¤Ä̾Á°¶õ´Ö¤Ï Perl ¥×¥é¥°¥Þ¤Î¤¿¤á¤ËͽÌó¤µ¤ì¤Æ¤¤¤Þ¤¹¡£ ÁȤ߹þ¤ß¤Î·¿¤ÏÁ´¤ÆÂçʸ»ú¤Î̾Á°¤ò»ý¤Á¤Þ¤¹¡£ º®Íð¤òÈò¤±¤ë¤¿¤á¤Ë¡¢ ¥Ñ¥Ã¥±¡¼¥¸Ì¾¤È¤·¤Æ¤³¤Î¤è¤¦¤Ê̾Á°¤ÏÈò¤±¤ë¤Ù¤¤Ç¤¹¡£ CLASSNAME ¤Ï¿¿¤ÎÃͤò»ý¤Ä¤è¤¦¤Ë¤·¤Æ¤¯¤À¤µ¤¤¡£
Perl Modules in perlmod ¤ò»²¾È¤·¤Æ²¼¤µ¤¤¡£
given() ¥Ö¥í¥Ã¥¯¤«¤éæ½Ð¤·¤Þ¤¹¡£
¤³¤Î¥¡¼¥ï¡¼¥É¤Ï "switch" µ¡Ç½¤Ë¤è¤Ã¤ÆÍ¸ú¤Ë¤Ê¤ê¤Þ¤¹: ¤µ¤é¤Ê¤ë¾ðÊó¤Ë¤Ä¤¤¤Æ¤Ï feature ¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£
¤½¤Î»þÅÀ¤Î¥µ¥Ö¥ë¡¼¥Á¥ó¸Æ¤Ó½Ð¤·¤Î¥³¥ó¥Æ¥¥¹¥È¤òÊÖ¤·¤Þ¤¹¡£
¥¹¥«¥é¥³¥ó¥Æ¥¥¹¥È¤Ç¤Ï¡¢¸Æ¤Ó¸µ¤¬¤¢¤ë¾ì¹ç
(¥µ¥Ö¥ë¡¼¥Á¥ó¡¢eval¡¢require ¤ÎÃæ¤Ë¤¤¤ë¤È¤) ¤Ë¤Ï
¸Æ¤Ó½Ð¤·¸µ¤Î¥Ñ¥Ã¥±¡¼¥¸Ì¾¤òÊÖ¤·¡¢¤½¤Î¾¤Î¤È¤¤Ë¤Ï̤ÄêµÁÃͤòÊÖ¤·¤Þ¤¹¡£
¥ê¥¹¥È¥³¥ó¥Æ¥¥¹¥È¤Ç¤Ï¡¢°Ê²¼¤òÊÖ¤·¤Þ¤¹:
# 0 1 2
($package, $filename, $line) = caller;
EXPR ¤òÉÕ¤±¤ë¤È¡¢¥Ç¥Ð¥Ã¥¬¤¬¥¹¥¿¥Ã¥¯¥È¥ì¡¼¥¹¤òɽ¼¨¤¹¤ë¤¿¤á¤Ë»È¤¦¾ðÊó¤òÊÖ¤·¤Þ¤¹¡£ EXPR ¤ÎÃͤϡ¢¸½¾õ¤«¤é¿ô¤¨¤Æ¡¢ ¤¤¤¯¤ÄÁ°¤Î¥³¡¼¥ë¥Õ¥ì¡¼¥à¤Þ¤ÇÌá¤ë¤«¤ò¼¨¤·¤Þ¤¹¡£
# 0 1 2 3 4
($package, $filename, $line, $subroutine, $hasargs,
# 5 6 7 8 9 10
$wantarray, $evaltext, $is_require, $hints, $bitmask, $hinthash)
= caller($i);
¤³¤³¤Ç¥Õ¥ì¡¼¥à¤¬¥µ¥Ö¥ë¡¼¥Á¥ó¸Æ¤Ó½Ð¤·¤Ç¤Ê¤¤¾ì¹ç¡¢eval ¤Ç¤Ï¤Ê¤¯
(eval) ¤Ë¤Ê¤ê¤Þ¤¹¡£
¤³¤Î¾ì¹ç¡¢ÄɲäÎÍ×ÁǤǤ¢¤ë $evaltext ¤È $is_require ¤¬¥»¥Ã¥È¤µ¤ì¤Þ¤¹:
$is_require ¤Ï¥Õ¥ì¡¼¥à¤¬ require ¤Þ¤¿¤Ï use ¤Çºî¤é¤ì¤¿¾ì¹ç¤Ë
¿¿¤Ë¤Ê¤ê¡¢$evaltext ¤Ï eval EXPR ¤Î¥Æ¥¥¹¥È¤¬Æþ¤ê¤Þ¤¹¡£
ÆÃ¤Ë¡¢eval BLOCK ¤Î¾ì¹ç¡¢$subroutine ¤Ï (eval) ¤Ë¤Ê¤ê¤Þ¤¹¤¬¡¢
$evaltext ¤Ï̤ÄêµÁÃͤˤʤê¤Þ¤¹¡£
(¤½¤ì¤¾¤ì¤Î use ¤Ï eval EXPR ¤ÎÃæ¤Ç require ¥Õ¥ì¡¼¥à¤òºî¤ë¤³¤È¤Ë
Ãí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£)
$subroutine ¤Ï¡¢¤½¤Î¥µ¥Ö¥ë¡¼¥Á¥ó¤¬¥·¥ó¥Ü¥ë¥Æ¡¼¥Ö¥ë¤«¤éºï½ü¤µ¤ì¤¿¾ì¹ç¤Ï
(unknown) ¤Ë¤Ê¤ê¤Þ¤¹¡£
$hasargs ¤Ï¤³¤Î¥Õ¥ì¡¼¥àÍÑ¤Ë @_ ¤Î¿·¤·¤¤¼ÂÂΤ¬ÀßÄꤵ¤ì¤¿¾ì¹ç¤Ë¿¿¤È¤Ê¤ê¤Þ¤¹¡£
$hints ¤È $bitmask ¤Ï caller ¤¬¥³¥ó¥Ñ¥¤¥ë¤µ¤ì¤¿¤È¤¤Î
¼ÂºÝŪ¤Ê¥Ò¥ó¥È¤ò´Þ¤ß¤Þ¤¹¡£
$hints ¤Ï $bitmask ¤Ï Perl ¤Î¥Ð¡¼¥¸¥ç¥ó¤Ë¤è¤Ã¤ÆÊѹ¹¤µ¤ì¤ë
²ÄǽÀ¤¬¤¢¤ë¤Î¤Ç¡¢³°Éô¤Ç¤Î»ÈÍѤòÁÛÄꤷ¤Æ¤¤¤Þ¤»¤ó¡£
$hinthash ¤Ï¡¢caller ¤¬¥³¥ó¥Ñ¥¤¥ë¤µ¤ì¤¿»þ¤Î %^H ¤ÎÃͤò´Þ¤à
¥Ï¥Ã¥·¥å¤Ø¤Î¥ê¥Õ¥¡¥ì¥ó¥¹¤«¡¢¤¢¤ë¤¤¤Ï %^H ¤¬¶õ¤Î¾ì¹ç¤Ï undef ¤Ç¤¹¡£
¤³¤Î¥Ï¥Ã¥·¥å¤ÎÃͤϹ½Ê¸ÌÚ¤ËÊݴɤµ¤ì¤Æ¤¤¤ë¼ÂºÝ¤ÎÃͤʤΤǡ¢Êѹ¹¤·¤Ê¤¤¤Ç²¼¤µ¤¤¡£
¤µ¤é¤Ë¡¢DB ¥Ñ¥Ã¥±¡¼¥¸¤ÎÃæ¤«¤é¸Æ¤Ð¤ì¤¿¾ì¹ç¤Ï¡¢caller ¤Ï
¤è¤ê¾ÜºÙ¤Ê¾ðÊó¤òÊÖ¤·¤Þ¤¹¡£
¥µ¥Ö¥ë¡¼¥Á¥ó¤¬µ¯Æ°¤µ¤ì¤¿¤È¤¤Î°ú¿ô¤òÊÑ¿ô @DB::args ¤ËÀßÄꤷ¤Þ¤¹¡£
caller ¤¬¾ðÊó¤òÆÀ¤ëÁ°¤Ë¥ª¥×¥Æ¥£¥Þ¥¤¥¶¤¬¸Æ¤Ó½Ð¤·¥Õ¥ì¡¼¥à¤òºÇŬ²½¤·¤Æ
¤·¤Þ¤¦¤«¤â¤·¤ì¤Ê¤¤¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£
¤³¤ì¤Ï¡¢caller(N) ¤¬ N > 1 ¤Î¤È¤¡¢
¤¢¤Ê¤¿¤¬Í½Â¬¤·¤¿¸Æ¤Ó½Ð¤·¥Õ¥ì¡¼¥à¤Î¾ðÊó¤òÊÖ¤µ¤Ê¤¤¤«¤â¤·¤ì¤Ê¤¤¤³¤È¤ò°ÕÌ£¤·¤Þ¤¹¡£
ÆÃ¤Ë¡¢@DB::args ¤Ï caller ¤¬Á°²ó¸Æ¤Ó½Ð¤µ¤ì¤¿»þ¤Î¾ðÊó¤ò
»ý¤Ã¤Æ¤¤¤ë¤«¤â¤·¤ì¤Þ¤»¤ó¡£
(²Äǽ¤Ç¤¢¤ì¤Ð¡¢) ¥«¥ì¥ó¥È¥Ç¥£¥ì¥¯¥È¥ê¤ò EXPR ¤Ë°Ü¤·¤Þ¤¹¡£
EXPR ¤ò»ØÄꤷ¤Ê¤¤¤È¡¢$ENV{HOME} ¤¬ÀßÄꤵ¤ì¤Æ¤¤¤ì¤Ð¡¢
¤½¤Î¥Ç¥£¥ì¥¯¥È¥ê¤Ë°Ü¤ê¤Þ¤¹¡£
¤½¤¦¤Ç¤Ê¤¯¡¢$ENV{LOGDIR}¤¬ÀßÄꤵ¤ì¤Æ¤¤¤ì¤Ð¡¢¤½¤Î¥Ç¥£¥ì¥¯¥È¥ê¤Ë°Ü¤ê¤Þ¤¹¡£
(VMS ¤Ç¤Ï $ENV{SYS$LOGIN} ¤â¥Á¥§¥Ã¥¯¤µ¤ì¡¢¤â¤·¥»¥Ã¥È¤µ¤ì¤Æ¤¤¤ì¤Ð»È¤ï¤ì¤Þ¤¹¡£)
¤É¤Á¤é¤âÀßÄꤵ¤ì¤Æ¤¤¤Ê¤±¤ì¤Ð¡¢chdir ¤Ï²¿¤â¤·¤Þ¤»¤ó¡£
À®¸ù»þ¤Ë¤Ï¿¿¤òÊÖ¤·¡¢¤½¤¦¤Ç¤Ê¤±¤ì¤Ðµ¶¤òÊÖ¤·¤Þ¤¹¡£
die ¤Î¹à¤ÎÎã¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£
fchdir ¤ËÂбþ¤·¤Æ¤¤¤ë¥·¥¹¥Æ¥à¤Ç¤Ï¡¢¥Õ¥¡¥¤¥ë¥Ï¥ó¥É¥ë¤ä¥Ç¥£¥ì¥¯¥È¥ê¥Ï¥ó¥É¥ë¤ò °ú¿ô¤È¤·¤ÆÅϤ»¤Þ¤¹¡£ fchdir ¤ËÂбþ¤·¤Æ¤¤¤Ê¤¤¥·¥¹¥Æ¥à¤Ç¤Ï¡¢¥Ï¥ó¥É¥ë¤òÅϤ¹¤È¼Â¹Ô»þ¤Ë Ã×̿Ū¥¨¥é¡¼¤Ë¤Ê¤ê¤Þ¤¹¡£
LIST ¤Ë´Þ¤Þ¤ì¤ë¥Õ¥¡¥¤¥ë¤Î¡¢¥Ñ¡¼¥ß¥Ã¥·¥ç¥ó¤òÊѹ¹¤·¤Þ¤¹¡£
LIST ¤ÎºÇ½é¤ÎÍ×ÁǤϡ¢¿ôÃÍɽ¸½¤Î¥â¡¼¥É¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£
0644 ¤Ï OK ¤Ç¤¹¤¬¡¢ '0644' ¤Ï¤À¤á¤Ç¤¹¡£
Êѹ¹¤ËÀ®¸ù¤·¤¿¥Õ¥¡¥¤¥ë¤Î¿ô¤òÊÖ¤·¤Þ¤¹¡£
ʸ»úÎó¤ò»È¤¤¤¿¤¤¾ì¹ç¤Ï¡¢oct ¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£
$cnt = chmod 0755, 'foo', 'bar';
chmod 0755, @executables;
$mode = '0644'; chmod $mode, 'foo'; # !!! sets mode to
# --w----r-T
$mode = '0644'; chmod oct($mode), 'foo'; # this is better
$mode = 0644; chmod $mode, 'foo'; # this is best
fchmod ¤ËÂбþ¤·¤Æ¤¤¤ë¥·¥¹¥Æ¥à¤Ç¤Ï¡¢¥Õ¥¡¥¤¥ë¥Ï¥ó¥É¥ë¤ò°ú¿ô¤È¤·¤ÆÅϤ»¤Þ¤¹¡£ fchmod ¤ËÂбþ¤·¤Æ¤¤¤Ê¤¤¥·¥¹¥Æ¥à¤Ç¤Ï¡¢¥Õ¥¡¥¤¥ë¥Ï¥ó¥É¥ë¤òÅϤ¹¤È¼Â¹Ô»þ¤Ë Ã×̿Ū¥¨¥é¡¼¤Ë¤Ê¤ê¤Þ¤¹¡£ ¥Õ¥¡¥¤¥ë¥Ï¥ó¥É¥ë¤òǧ¼±¤µ¤»¤ë¤¿¤á¤Ë¤Ï¡¢¥°¥í¥Ö¤Þ¤¿¤Ï¥ê¥Õ¥¡¥ì¥ó¥¹¤È¤·¤Æ ÅϤµ¤ì¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£ Íç¤Îñ¸ì¤Ï¥Õ¥¡¥¤¥ë̾¤È¤·¤Æ°·¤ï¤ì¤Þ¤¹¡£
open(my $fh, "<", "foo");
my $perm = (stat $fh)[2] & 07777;
chmod($perm | 0600, $fh);
¥·¥ó¥Ü¥ê¥Ã¥¯¤Ê S_I* Äê¿ô¤ò Fcntl ¥â¥¸¥å¡¼¥ë¤«¤é¥¤¥ó¥Ý¡¼¥È¤¹¤ë¤³¤È¤â¤Ç¤¤Þ¤¹¡£
use Fcntl ':mode';
chmod S_IRWXU|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH, @executables;
# This is identical to the chmod 0755 of the above example.
¤è¤ê°ÂÁ´¤Ê chop (°Ê²¼¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤) ¤Ç¤¹¡£
$/ (English ¥â¥¸¥å¡¼¥ë¤Ç¤Ï¡¢$INPUT_RECORD_SEPARATOR
¤È¤â¸À¤¦) ¤Î¤½¤Î»þÅÀ¤ÎÃͤËÂбþ¤¹¤ë¹ÔËöʸ»ú¤òºï½ü¤·¤Þ¤¹¡£
Á´¤Æ¤Î°ú¿ô¤«¤éºï½ü¤·¤¿Ê¸»ú¿ô¤Î¹ç·×¤òÊÖ¤·¤Þ¤¹¡£
ÆþÎϥ쥳¡¼¥É¤«¤é¡¢²þ¹Ô¤òºï½ü¤·¤¿¤¤¤Î¤À¤±¤ì¤É¡¢ºÇ¸å¤Î¥ì¥³¡¼¥É¤Ë¤Ï²þ¹Ô¤¬
Æþ¤Ã¤Æ¤¤¤ë¤Î¤«¤ï¤«¤é¤Ê¤¤¤è¤¦¤Ê¾ì¹ç¤Ë¡¢»ÈÍѤǤ¤Þ¤¹¡£
ÃÊÍî¥â¡¼¥É ($/ = "") ¤Ç¤Ï¡¢¥ì¥³¡¼¥É¤ÎºÇ¸å¤Î²þ¹Ô¤ò¤¹¤Ù¤Æ¼è¤ê½ü¤¤Þ¤¹¡£
µÛ¤¤¹þ¤ß¥â¡¼¥É ($/ = undef) ¤ä ¸ÇÄêĹ¥ì¥³¡¼¥É¥â¡¼¥É
($/ ¤¬À°¿ô¤Ø¤Î¥ê¥Õ¥¡¥ì¥ó¥¹¤äÎà»÷¤Î¤â¤Î¤Î¾ì¹ç¡£perlvar¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤)
¤Ç¤Ï¡¢chomp() ¤Ï²¿¤â¼è¤ê½ü¤¤Þ¤»¤ó¡£
VARIABLE ¤¬¾Êά¤µ¤ì¤ë¤È¡¢$_ ¤òÂоݤȤ·¤Æ chomp ¤·¤Þ¤¹¡£
Îã:
while (<>) {
chomp; # avoid \n on last field
@array = split(/:/);
# ...
}
VARIABLE ¤¬¥Ï¥Ã¥·¥å¤Ê¤é¡¢¥Ï¥Ã¥·¥å¤Î¥¡¼¤Ç¤Ï¤Ê¤¯ÃͤˤĤ¤¤Æ chomp ¤·¤Þ¤¹¡£
º¸ÊÕÃͤǤ¢¤ì¤Ð¡¢ÂåÆþ¤ò´Þ¤á¤Æ¡¢Ç¤°Õ¤Î¤â¤Î¤ò chomp ¤Ç¤¤Þ¤¹:
chomp($cwd = `pwd`);
chomp($answer = <STDIN>);
¥ê¥¹¥È¤ò chomp ¤¹¤ë¤È¡¢¸Ä¡¹¤ÎÍ×ÁǤ¬ chomp ¤µ¤ì¡¢ ºï½ü¤µ¤ì¤¿Ê¸»ú¿ô¤Î¹ç·×¤¬ÊÖ¤µ¤ì¤Þ¤¹¡£
ñ½ã¤ÊÊÑ¿ô°Ê³°¤Î¤â¤Î¤ò chomp ¤¹¤ë¾ì¹ç¤Ï¤«¤Ã¤³¤¬É¬ÍפǤ¢¤ë¤³¤È¤Ë
Ãí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£
¤³¤ì¤Ï¡¢chomp $cwd = `pwd`; ¤Ï¡¢Í½Â¬¤·¤Æ¤¤¤ë
chomp( $cwd = `pwd` ) ¤Ç¤Ï¤Ê¤¯¡¢(chomp $cwd) = `pwd`; ¤È
²ò¼á¤µ¤ì¤ë¤«¤é¤Ç¤¹¡£
ƱÍͤˡ¢chomp $a, $b ¤Ç¤Ï¤Ê¤¯¡¢chomp($a, $b) chomp($a), $b ¤È
²ò¼á¤µ¤ì¤Þ¤¹¡£
ʸ»úÎó¤ÎºÇ¸å¤Îʸ»ú¤òÀÚ¤ê¼Î¤Æ¤Æ¡¢¤½¤ÎÀÚ¤ê¼è¤Ã¤¿Ê¸»ú¤òÊÖ¤·¤Þ¤¹¡£
ʸ»úÎó¤Î¸¡º÷¤â¥³¥Ô¡¼¤â¹Ô¤Ê¤¤¤Þ¤»¤ó¤Î¤Ç
s/\n// ¤è¤ê¤â¡¢¤º¤Ã¤È¸úΨŪ¤Ç¤¹¡£
VARIABLE ¤¬¾Êά¤µ¤ì¤ë¤È¡¢$_ ¤òÂоݤȤ·¤Æ chop ¤·¤Þ¤¹¡£
VARIABLE ¤¬¥Ï¥Ã¥·¥å¤Î¾ì¹ç¡¢¥Ï¥Ã¥·¥å¤Î value ¤ò chop ¤·¤Þ¤¹¤¬¡¢
key ¤Ï chop ¤·¤Þ¤»¤ó¡£
¼ÂºÝ¤Î¤È¤³¤í¡¢ÂåÆþ¤ò´Þ¤àº¸ÊÕÃͤȤʤꤦ¤ë¤Ê¤ó¤Ç¤â chop ¤Ç¤¤Þ¤¹¡£
¥ê¥¹¥È¤ò chop ¤¹¤ë¤È¡¢¸Ä¡¹¤ÎÍ×ÁǤ¬ chop ¤µ¤ì¤Þ¤¹¡£
ºÇ¸å¤Î chop ¤ÎÃͤÀ¤±¤¬ÊÖ¤µ¤ì¤Þ¤¹¡£
chop ¤ÏºÇ¸å¤Îʸ»ú¤òÊÖ¤¹¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£
ºÇ¸å°Ê³°¤ÎÁ´¤Æ¤Îʸ»ú¤òÊÖ¤¹¤¿¤á¤Ë¤Ï¡¢substr($string, 0, -1) ¤ò
»È¤Ã¤Æ¤¯¤À¤µ¤¤¡£
chomp ¤â»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£
LIST ¤Ë´Þ¤Þ¤ì¤ë¥Õ¥¡¥¤¥ë¤Î½êÍ¼Ô (¤È¥°¥ë¡¼¥×) ¤òÊѹ¹¤·¤Þ¤¹¡£ LIST ¤ÎºÇ½é¤Î 2 ¤Ä¤ÎÍ×ÁǤˤϡ¢¿ôÃÍɽ¸½ ¤Î uid ¤È gid ¤ò ¤³¤Î½ç½ø¤ÇÍ¿¤¨¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£ ¤É¤Á¤é¤«¤ÎÃͤò -1 ¤Ë¤¹¤ë¤È¡¢¤Û¤È¤ó¤É¤Î¥·¥¹¥Æ¥à¤Ç¤Ï¤½¤ÎÃÍ¤Ï Êѹ¹¤·¤Ê¤¤¤È²ò¼á¤·¤Þ¤¹¡£ Êѹ¹¤ËÀ®¸ù¤·¤¿¥Õ¥¡¥¤¥ë¤Î¿ô¤¬ÊÖ¤µ¤ì¤Þ¤¹¡£
$cnt = chown $uid, $gid, 'foo', 'bar';
chown $uid, $gid, @filenames;
fchown ¤ËÂбþ¤·¤Æ¤¤¤ë¥·¥¹¥Æ¥à¤Ç¤Ï¡¢¥Õ¥¡¥¤¥ë¥Ï¥ó¥É¥ë¤ò°ú¿ô¤È¤·¤ÆÅϤ»¤Þ¤¹¡£ fchown ¤ËÂбþ¤·¤Æ¤¤¤Ê¤¤¥·¥¹¥Æ¥à¤Ç¤Ï¡¢¥Õ¥¡¥¤¥ë¥Ï¥ó¥É¥ë¤òÅϤ¹¤È¼Â¹Ô»þ¤Ë Ã×̿Ū¥¨¥é¡¼¤Ë¤Ê¤ê¤Þ¤¹¡£ ¥Õ¥¡¥¤¥ë¥Ï¥ó¥É¥ë¤òǧ¼±¤µ¤»¤ë¤¿¤á¤Ë¤Ï¡¢¥°¥í¥Ö¤Þ¤¿¤Ï¥ê¥Õ¥¡¥ì¥ó¥¹¤È¤·¤Æ ÅϤµ¤ì¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£ Íç¤Îñ¸ì¤Ï¥Õ¥¡¥¤¥ë̾¤È¤·¤Æ°·¤ï¤ì¤Þ¤¹¡£
passwd ¥Õ¥¡¥¤¥ë¤«¤é¿ôÃÍɽ¸½¤Ç¤Ê¤¤ uid ¤ò¸¡º÷¤¹¤ëÎã¤ò ¼¨¤·¤Þ¤¹:
print "User: ";
chomp($user = <STDIN>);
print "Files: ";
chomp($pattern = <STDIN>);
($login,$pass,$uid,$gid) = getpwnam($user)
or die "$user not in passwd file";
@ary = glob($pattern); # expand filenames
chown $uid, $gid, @ary;
¤Û¤È¤ó¤É¤Î¥·¥¹¥Æ¥à¤Ç¤Ï¡¢¥¹¡¼¥Ñ¡¼¥æ¡¼¥¶¡¼¤À¤±¤¬¥Õ¥¡¥¤¥ë¤Î½êͼԤò Êѹ¹¤Ç¤¤Þ¤¹¤¬¡¢¥°¥ë¡¼¥×¤Ï¼Â¹Ô¼Ô¤ÎÉû¥°¥ë¡¼¥×¤ËÊѹ¹¤Ç¤¤ë¤Ù¤¤Ç¤¹¡£ °ÂÁ´¤Ç¤Ê¤¤¥·¥¹¥Æ¥à¤Ç¤Ï¡¢¤³¤ÎÀ©¸Â¤Ï¤æ¤ë¤á¤é¤ì¤Æ¤¤¤Þ¤¹¡£ ¤·¤«¤·¤³¤ì¤Ï°Ü¿¢À¤Î¤¢¤ë²¾Äê¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£ POSIX ¥·¥¹¥Æ¥à¤Ç¤Ï¡¢°Ê²¼¤Î¤è¤¦¤Ë¤·¤Æ¤³¤Î¾ò·ï¤ò¸¡½Ð¤Ç¤¤Þ¤¹:
use POSIX qw(sysconf _PC_CHOWN_RESTRICTED);
$can_chown_giveaway = not sysconf(_PC_CHOWN_RESTRICTED);
ÆÃÄê¤Îʸ»ú¥»¥Ã¥È¤Ç¤Î NUMBER ¤Çɽ¤ï¤µ¤ì¤ëʸ»ú¤òÊÖ¤·¤Þ¤¹¡£
¤¿¤È¤¨¤Ð¡¢chr(65) ¤Ï ASCII ¤È Unicode ¤ÎξÊý¤Ç "A" ¤È¤Ê¤ê¤Þ¤¹¡£
chr(0x263a) ¤Ï Unicode ¤Î¥¹¥Þ¥¤¥ê¡¼¥Õ¥§¥¤¥¹¤Ç¤¹¡£
Éé¤Î¿ô¤Ï Unicode ¤ÎÃÖ´¹Ê¸»ú (chr(0xfffd)) ¤òÍ¿¤¨¤Þ¤¹¤¬¡¢ bytes ¥×¥é¥°¥Þ¤Î±Æ¶Á²¼¤Ç¤Ï¡¢(integer ¤ËÀÚ¤êµÍ¤á¤é¤ì¤¿)Ãͤβ¼°Ì 8 ¥Ó¥Ã¥È¤¬ »È¤ï¤ì¤Þ¤¹¡£
NUMBER ¤¬¾Êά¤µ¤ì¤¿¾ì¹ç¡¢$_ ¤ò»È¤¤¤Þ¤¹¡£
µÕ¤ò¹Ô¤¦¤¿¤á¤Ë¤Ï¡¢ord ¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£
128 ¤«¤é 255 ¤Þ¤Ç¤Îʸ»ú¤Ï²áµî¤È¤Î¸ß´¹À¤Î¤¿¤á¤Ë ¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï UTF-8 Unicode ¤Ë¥¨¥ó¥³¡¼¥É¤µ¤ì¤Þ¤»¤ó¡£
Unicode ¤Ë¤Ä¤¤¤Æ¤â¤Ã¤ÈÃΤꤿ¤¤¤Ê¤é¡¢perlunicode ¤ò »²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£
Ʊ¤¸Ì¾Á°¤Î¥·¥¹¥Æ¥à¥³¡¼¥ë¤ÈƱ¤¸¤³¤È¤ò¤·¤Þ¤¹¡£
¸½ºß¤Î¥×¥í¥»¥¹µÚ¤Ó»Ò¥×¥í¥»¥¹¤ËÂФ·¤Æ¡¢/¤Ç»Ï¤Þ¤ë¥Ñ¥¹Ì¾¤Ë´Ø¤·¤Æ
»ØÄꤵ¤ì¤¿¥Ç¥£¥ì¥¯¥È¥ê¤ò¿·¤·¤¤¥ë¡¼¥È¥Ç¥£¥ì¥¯¥È¥ê¤È¤·¤Æ°·¤¤¤Þ¤¹¡£
(¤³¤ì¤Ï¥«¥ì¥ó¥È¥Ç¥£¥ì¥¯¥È¥ê¤òÊѹ¹¤·¤Þ¤»¤ó¡£¥«¥ì¥ó¥È¥Ç¥£¥ì¥¯¥È¥ê¤Ï¤½¤Î¤Þ¤Þ¤Ç¤¹)¡£
¥»¥¥å¥ê¥Æ¥£¾å¤ÎÍýͳ¤Ë¤è¤ê¡¢¤³¤Î¸Æ¤Ó½Ð¤·¤Ï¥¹¡¼¥Ñ¡¼¥æ¡¼¥¶¡¼¤·¤«¹Ô¤¨¤Þ¤»¤ó¡£
FILENAME ¤ò¾Êά¤¹¤ë¤È¡¢$_ ¤Ø chroot ¤·¤Þ¤¹¡£
FILEHANDLE ¤ËÂбþ¤·¤¿¥Õ¥¡¥¤¥ë¤Þ¤¿¤Ï¥Ñ¥¤¥×¤ò¥¯¥í¡¼¥º¤·¤Æ¡¢ IO ¥Ð¥Ã¥Õ¥¡¤ò¥Õ¥é¥Ã¥·¥å¤·¡¢¥·¥¹¥Æ¥à¥Õ¥¡¥¤¥ëµ½Ò»Ò¤ò¥¯¥í¡¼¥º¤·¤Þ¤¹¡£ Áàºî¤¬À®¸ù¤·¡¢PerlIO Áؤ«¤é¥¨¥é¡¼¤¬Êó¹ð¤µ¤ì¤Ê¤«¤Ã¤¿¾ì¹ç¤Ë¿¿¤òÊÖ¤·¤Þ¤¹¡£ °ú¿ô¤¬¾Êά¤µ¤ì¤¿¾ì¹ç¡¢¸½ºßÁªÂò¤µ¤ì¤Æ¤¤¤ë¥Õ¥¡¥¤¥ë¥Ï¥ó¥É¥ë¤ò¥¯¥í¡¼¥º¤·¤Þ¤¹¡£
¥¯¥í¡¼¥º¤·¤Æ¤¹¤°¤Ë¤Þ¤¿¡¢Æ±¤¸¥Õ¥¡¥¤¥ë¥Ï¥ó¥É¥ë¤Ë
ÂФ·¤Æ¥ª¡¼¥×¥ó¤ò¹Ô¤Ê¤¦¾ì¹ç¤Ë¤Ï¡¢open ¤¬¼«Æ°Åª¤Ë close
¤ò¹Ô¤Ê¤¤¤Þ¤¹¤Î¤Ç¡¢close FILEHANDLE ¤¹¤ëɬÍפϤ¢¤ê¤Þ¤»¤ó
(open ¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤)¡£
¤¿¤À¤·¡¢ÌÀ¼¨Åª¤Ë¥¯¥í¡¼¥º¤ò¹Ô¤Ê¤Ã¤¿¤È¤¤Ë¤Î¤ßÆþÎÏ¥Õ¥¡¥¤¥ë¤Î
¹ÔÈÖ¹æ ($.) ¤Î¥ê¥»¥Ã¥È¤¬¹Ô¤Ê¤ï¤ì¡¢open ¤Ë¤è¤Ã¤Æ¹Ô¤Ê¤ï¤ì¤ë
°ÅÌۤΠclose¤Ç¤Ï¹Ô¤Ê¤ï¤ì¤Þ¤»¤ó¡£
¥Õ¥¡¥¤¥ë¥Ï¥ó¥É¥ë¤¬¥Ñ¥¤¥×¤Ä¤¥ª¡¼¥×¥ó¤Ê¤é¡¢
close ¤Ï¤½¤Î¾¤Î¥·¥¹¥Æ¥à¥³¡¼¥ë¤¬¼ºÇÔ¤·¤¿¤ê
¥×¥í¥°¥é¥à¤¬Èó¥¼¥í¤Î¥¹¥Æ¡¼¥¿¥¹¤Ç½ªÎ»¤·¤¿¾ì¹ç¤Ë¤âµ¶¤òÊÖ¤·¤Þ¤¹
(¥×¥í¥°¥é¥à¤¬Èó¥¼¥í¤Ç½ªÎ»¤·¤¿¤À¤±¤Î¾ì¹ç¤Ï¡¢$!¤¬0¤Ë¥»¥Ã¥È¤µ¤ì¤Þ¤¹)¡£
¸å¤Ç¥Ñ¥¤¥×¤Î½ÐÎϤò¸«¤¿¤¤¾ì¹ç¤Î¤¿¤á¤Ë¡¢
¥Ñ¥¤¥×¤Î¥¯¥í¡¼¥º¤Ç¤Ï¡¢¥Ñ¥¤¥×¾å¤Ç¼Â¹Ô¤µ¤ì¤Æ¤¤¤ë
¥×¥í¥»¥¹¤Î´°Î»¤òÂÔ¤Á¤Þ¤¹¡£
¤Þ¤¿¼«Æ°Åª¤Ë¥³¥Þ¥ó¥É¤Î¥¹¥Æ¡¼¥¿¥¹Ãͤò $? ¤È
${^CHILD_ERROR_NATIVE} ¤ËÀßÄꤷ¤Þ¤¹¡£
ÅÓÃæ¤Ç(¤Ä¤Þ¤ê¡¢½ñ¤¹þ¤ß¦¤¬ÊĤ¸¤ëÁ°¤Ë) ¥Ñ¥¤¥×¤ÎÆÉ¤ß¹þ¤ß¦¤¬ÊĤ¸¤¿¾ì¹ç¡¢ ½ñ¤¹þ¤ß¦¤Ë SIGPIPE ¤¬ÇÛÁ÷¤µ¤ì¤Þ¤¹¡£ ½ñ¤¹þ¤ß¦¤¬¤³¤ì¤ò°·¤¨¤Ê¤¤¾ì¹ç¡¢¥Ñ¥¤¥×¤òÊĤ¸¤ëÁ°¤Ë ³Î¼Â¤ËÁ´¤Æ¤Î¥Ç¡¼¥¿¤¬ÆÉ¤ß¹þ¤Þ¤ì¤ë¤è¤¦¤Ë¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
Îã:
open(OUTPUT, '|sort >foo') # pipe to sort
or die "Can't start sort: $!";
#... # print stuff to output
close OUTPUT # wait for sort to finish
or warn $! ? "Error closing sort pipe: $!"
: "Exit status $? from sort";
open(INPUT, 'foo') # get sort's results
or die "Can't open 'foo' for input: $!";
FILEHANDLE ¤Ï¼°¤Ç¤â¤«¤Þ¤¤¤Þ¤»¤ó¡£¤³¤Î¾ì¹ç¡¢ÃͤϴÖÀÜ¥Õ¥¡¥¤¥ë¥Ï¥ó¥É¥ë¤È ¤·¤Æ°·¤ï¤ì¡¢ÉáÄ̤ϼºݤΥե¡¥¤¥ë¥Ï¥ó¥É¥ë̾¤Ç¤¹¡£
opendir ¤Ç¥ª¡¼¥×¥ó¤·¤¿¥Ç¥£¥ì¥¯¥È¥ê¤ò¥¯¥í¡¼¥º¤·¡¢
¥·¥¹¥Æ¥à¥³¡¼¥ë¤ÎÊÖ¤êÃͤòÊÖ¤·¤Þ¤¹¡£
connect(2) ¥·¥¹¥Æ¥à¥³¡¼¥ë¤ÈƱÍͤˡ¢¥ê¥â¡¼¥È¥½¥±¥Ã¥È¤Ø¤ÎÀܳ¤ò»î¤ß¤Þ¤¹¡£
À®¸ù»þ¤Ë¤Ï¿¿¤òÊÖ¤·¡¢¼ºÇÔ»þ¤Ë¤Ïµ¶¤òÊÖ¤·¤Þ¤¹¡£
NAME ¤Ï¡¢¥½¥±¥Ã¥È¤ËÂФ¹¤ë¡¢Å¬Àڤʷ¿¤Î¥Ñ¥Ã¥¯¤µ¤ì¤¿
¥¢¥É¥ì¥¹¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£
Sockets: Client/Server Communication in perlipc ¤ÎÎã¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£
continue ¤Ï¼ÂºÝ¤Ë¤Ï´Ø¿ô¤Ç¤Ï¤Ê¤¯¡¢¼Â¹ÔÀ©¸æÊ¸¤Ç¤¹¡£
continue BLOCK ¤¬ BLOCK (ŵ·¿Åª¤Ë¤Ï while ¤Þ¤¿¤Ï foreach ¤ÎÃæ)¤Ë¤¢¤ë¤È¡¢
¤³¤ì¤Ï¾ò·ïʸ¤¬ºÆÉ¾²Á¤µ¤ì¤ëľÁ°¤Ë¾ï¤Ë¼Â¹Ô¤µ¤ì¤Þ¤¹¡£
¤³¤ì¤Ï C ¤Ë¤ª¤±¤ë for ¥ë¡¼¥×¤Î 3 ÈÖÌܤÎÉôʬ¤ÈƱÍͤǤ¹¡£
½¾¤Ã¤Æ¡¢¤³¤ì¤Ï next ʸ
(¤³¤ì¤Ï C ¤Î continue ʸ¤È»÷¤Æ¤¤¤Þ¤¹)¤ò»È¤Ã¤Æ¥ë¡¼¥×¤¬·«¤êÊÖ¤µ¤ì¤ë¤È¤¤Ç¤â
¥ë¡¼¥×ÊÑ¿ô¤òÁý¤ä¤·¤¿¤¤¤È¤¤Ë»È¤¨¤Þ¤¹¡£
last, next, redo ¤¬ continue ¥Ö¥í¥Ã¥¯Æâ¤Ë¸½¤ì¤ë²ÄǽÀ¤¬¤¢¤ê¤Þ¤¹¡£
last ¤È redo ¤Ï¥á¥¤¥ó¥Ö¥í¥Ã¥¯¤ÎÃæ¤Ç¼Â¹Ô¤µ¤ì¤¿¤Î¤ÈƱ¤¸¤è¤¦¤Ë¿¶Éñ¤¤¤Þ¤¹¡£
next ¤Î¾ì¹ç¤Ï¡¢continue ¥Ö¥í¥Ã¥¯¤ò¼Â¹Ô¤¹¤ë¤³¤È¤Ë¤Ê¤ë¤Î¤Ç¡¢
¤è¤êÌÌÇò¤¤¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£
while (EXPR) {
### redo always comes here
do_something;
} continue {
### next always comes here
do_something_else;
# then back the top to re-check EXPR
}
### last always comes here
continue Àá¤ò¾Êά¤¹¤ë¤Î¤Ï¡¢Ê¸Ë¡Åª¤Ë¤Ï¶õ¤ÎÀá¤ò»ØÄꤷ¤¿¤Î¤ÈƱ¤¸¤Ç¡¢
ÏÀÍýŪ¤Ë¤Ï½½Ê¬¤Ç¤¹¡£
¤³¤Î¾ì¹ç¡¢next ¤ÏľÀܥ롼¥×ÀèÆ¬¤Î¾ò·ï¥Á¥§¥Ã¥¯¤ËÌá¤ê¤Þ¤¹¡£
"switch" µ¡Ç½¤¬Í¸ú¤Ê¤é¡¢continue ¤Ï¸½ºß¤Î when ¤ä default ¤Î
¥Ö¥í¥Ã¥¯¤«¤éÈô¤Ó½Ð¤·¤Æ¡¢¼¡¤Î¾ì¹ç¤Ë°Üư¤¹¤ë¤¿¤á¤Îʸ¤È¤Ê¤ê¤Þ¤¹¡£
¤µ¤é¤Ê¤ë¾ðÊó¤Ë¤Ä¤¤¤Æ¤Ï feature ¤È Switch statements in perlsyn ¤ò
»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£
(¥é¥¸¥¢¥ó¤Ç¼¨¤·¤¿) EXPR ¤Î;¸¹¤òÊÖ¤·¤Þ¤¹¡£
EXPR ¤¬¾Êά¤µ¤ì¤¿¤È¤¤Ë¤Ï¡¢$_ ¤Î;¸¹¤ò¼è¤ê¤Þ¤¹¡£
µÕ;¸¹¤òµá¤á¤ë¤¿¤á¤Ë¤Ï¡¢Math::Trig::acos() ´Ø¿ô¤ò»È¤¦¤«¡¢
°Ê²¼¤Î´Ø·¸¤ò»È¤Ã¤Æ¤¯¤À¤µ¤¤¡£
sub acos { atan2( sqrt(1 - $_[0] * $_[0]), $_[0] ) }
C ¥é¥¤¥Ö¥é¥ê¤Î crypt(3) ´Ø¿ô¤ÈÁ´¤¯Æ±¤¸¤è¤¦¤Ë¡¢¥À¥¤¥¸¥§¥¹¥Èʸ»úÎó¤ò
ºîÀ®¤·¤Þ¤¹(°ì»þŪ¤Êɬ¼ûÉʤȤ·¤Æ¡¢¤Þ¤ÀÀäÌǤ·¤Æ¤¤¤Ê¤¤¥Ð¡¼¥¸¥ç¥ó¤ò
»ý¤Ã¤Æ¤¤¤ë¤È²¾Äꤷ¤Æ¤¤¤Þ¤¹)¡£
crypt() ¤Ï°ìÊý¸þ¥Ï¥Ã¥·¥å´Ø¿ô¤Ç¤¹¡£
PLAINTEXT ¤È SALT ¤Ï¥À¥¤¥¸¥§¥¹¥È¤È¸Æ¤Ð¤ì¤ëû¤¤Ê¸»úÎó¤ËÊѤ¨¤é¤ì¤Æ¡¢
¤½¤ì¤¬ÊÖ¤µ¤ì¤Þ¤¹¡£
PLAINTEXT ¤È SALT ¤¬Æ±¤¸¾ì¹ç¤Ï¾ï¤ËƱ¤¸Ê¸»úÎó¤òÊÖ¤·¤Þ¤¹¤¬¡¢¥Ï¥Ã¥·¥å¤«¤é
¸µ¤Î PLAINTEXT ¤òÆÀ¤ë(´ûÃΤÎ)ÊýË¡¤Ï¤¢¤ê¤Þ¤»¤ó¡£
PLAINTEXT ¤ä SALT ¤ò¾¯¤·Êѹ¹¤·¤Æ¤â¥À¥¤¥¸¥§¥¹¥È¤ÏÂ礤¯Êѹ¹¤µ¤ì¤Þ¤¹¡£
Ê£¹ç²½´Ø¿ô¤Ï¤¢¤ê¤Þ¤»¤ó¡£
¤³¤Î´Ø¿ô¤Ï°Å¹æ²½¤Î¤¿¤á¤Ë¤Ï¤Þ¤Ã¤¿¤¯Ìò¤ËΩ¤Á¤Þ¤»¤ó(¤³¤Î¤¿¤á¤Ë¤Ï¡¢
¤ª¶á¤¯¤Î CPAN ¥ß¥é¡¼¤Ç Crypt ¥â¥¸¥å¡¼¥ë¤òõ¤·¤Æ¤¯¤À¤µ¤¤)¤Î¤Ç¡¢
"crypt" ¤È¤¤¤¦Ì¾Á°¤Ï¾¯¤·´Ö°ã¤Ã¤¿Ì¾Á°¤Ç¤¹¡£
¤½¤ÎÂå¤ï¤ê¤Ë¡¢°ìÈÌŪ¤Ë¤ÏÆó¤Ä¤Î¥Æ¥¥¹¥ÈÊÒ¤¬Æ±¤¸¤«¤É¤¦¤«¤ò¥Æ¥¥¹¥È¤½¤Î¤â¤Î¤ò
žÁ÷¤·¤¿¤êÊݴɤ·¤¿¤ê¤»¤º¤Ë¥Á¥§¥Ã¥¯¤¹¤ë¤¿¤á¤Ë»È¤¤¤Þ¤¹¡£
Îã¤È¤·¤Æ¤Ï¡¢Àµ¤·¤¤¥Ñ¥¹¥ï¡¼¥É¤¬Í¿¤¨¤é¤ì¤¿¤«¤É¤¦¤«¤ò¥Á¥§¥Ã¥¯¤¬¤¢¤ê¤Þ¤¹¡£
¥Ñ¥¹¥ï¡¼¥É¼«¿È¤Ç¤Ï¤Ê¤¯¡¢¥Ñ¥¹¥ï¡¼¥É¤Î¥À¥¤¥¸¥§¥¹¥È¤¬Êݴɤµ¤ì¤Þ¤¹¡£
¥æ¡¼¥¶¡¼¤¬¥Ñ¥¹¥ï¡¼¥É¤òÆþÎϤ¹¤ë¤È¡¢Êݴɤµ¤ì¤Æ¤¤¤ë¥À¥¤¥¸¥§¥¹¥È¤ÈƱ¤¸
salt ¤Ç crypt() ¤·¤Þ¤¹¡£
Æó¤Ä¤Î¥À¥¤¥¸¥§¥¹¥È¤¬Æ±¤¸¤Ê¤é¡¢¥Ñ¥¹¥ï¡¼¥É¤ÏÀµ¤·¤¤¤Ç¤¹¡£
¤¹¤Ç¤Ë¤¢¤ë¥À¥¤¥¸¥§¥¹¥Èʸ»úÎó¤ò¸¡¾Ú¤¹¤ë¤Ë¤Ï¡¢¥À¥¤¥¸¥§¥¹¥È¤ò
(crypt($plain, $digest) eq $digest ¤Î¤è¤¦¤Ë¤·¤Æ)salt ¤È¤·¤Æ»È¤¤¤Þ¤¹¡£
¥À¥¤¥¸¥§¥¹¥È¤òºî¤ë¤Î¤Ë»È¤ï¤ì¤¿ SALT ¤Ï¥À¥¤¥¸¥§¥¹¥È¤Î°ìÉô¤È¤·¤Æ¸«¤¨¤Þ¤¹¡£
¤³¤ì¤Ë¤è¤ê¡¢crypt() ¤ÏƱ¤¸ salt ¤Ç¿·¤·¤¤Ê¸»úÎó¤ò¥À¥¤¥¸¥§¥¹¥È¤È¤·¤Æ
¥Ï¥Ã¥·¥å²½¤Ç¤¤ë¤è¤¦¤Ë¤·¤Þ¤¹¡£
¤³¤ì¤Ë¤è¤Ã¤ÆÉ¸½àŪ¤Ê crypt|/crypt ¤ä¡¢¤è¤êÉ÷ÊѤï¤ê¤Ê¼ÂÁõ¤Ç¤âưºî¤·¤Þ¤¹¡£
¸À¤¤´¹¤¨¤ë¤È¡¢ÊÖ¤µ¤ì¤ëʸ»úÎ󤽤Τâ¤Î¤ä¡¢¥À¥¤¥¸¥§¥¹¥Èʸ»úÎó¤¬
²¿¥Ð¥¤¥È¤¢¤ë¤«¤È¤¤¤Ã¤¿¤³¤È¤ËÂФ·¤Æ¡¢¤É¤Î¤è¤¦¤Ê²¾Äê¤â¤·¤Æ¤Ï¤¤¤±¤Þ¤»¤ó¡£
ÅÁÅýŪ¤Ë¤Ï·ë²Ì¤Ï 13 ¥Ð¥¤¥È¤Îʸ»úÎó¤Ç¤¹: ºÇ½é¤Î 2 ¥Ð¥¤¥È¤Ï salt¡¢°ú¤Â³¤¤¤Æ
½¸¹ç [./0-9A-Za-z] ¤«¤é¤Î 11 ¥Ð¥¤¥È¤Ç¡¢¥À¥¤¥¸¥§¥¹¥Èʸ»úÎó¤ÎºÇ½é¤Î
8 ¥Ð¥¤¥È¤À¤±¤¬°ÕÌ£¤¬¤¢¤ê¤Þ¤¹¤¬¡¢(MD5 ¤Î¤è¤¦¤Ë) °Û¤Ê¤Ã¤¿¥Ï¥Ã¥·¥å¼êË¡¡¢
(C2 ¤Î¤è¤¦¤Ê) ¹â¥ì¥Ù¥ë¥»¥¥å¥ê¥Æ¥£¼êË¡¡¢Èó UNIX ¥×¥é¥Ã¥È¥Õ¥©¡¼¥à¤Ç¤Î
¼ÂÁõ¤Ê¤É¤Ç¤Ï°Û¤Ê¤Ã¤¿Ê¸»úÎó¤¬À¸À®¤µ¤ì¤ë¤³¤È¤¬¤¢¤ê¤Þ¤¹¡£
¿·¤·¤¤ salt ¤òÁªÂò¤¹¤ë¾ì¹ç¤Ï¡¢½¸¹ç [./0-9A-Za-z] ¤«¤é
(join '', ('.', '/', 0..9, 'A'..'Z', 'a'..'z')[rand 64, rand 64] ¤Î¤è¤¦¤Ë¤·¤Æ)
¥é¥ó¥À¥à¤Ë2 ¤Ä¤Îʸ»ú¤òÁª¤Ó¤Þ¤¹¡£
¤³¤Îʸ»ú½¸¹ç¤Ïñ¤Ê¤ë¿äÁ¦¤Ç¤¹; salt ¤È¤·¤Æµö¤µ¤ì¤ëʸ»ú¤Ï¥·¥¹¥Æ¥à¤Î°Å¹æ²½
¥é¥¤¥Ö¥é¥ê¤À¤±¤Ë°Í¸¤·¡¢Perl ¤Ï crypt() ¤¬¤É¤Î¤è¤¦¤Ê salt ¤ò¼õ¤±ÉÕ¤±¤ë¤«¤Ë
¤Ä¤¤¤ÆÀ©¸Â¤·¤Þ¤»¤ó¡£
¥×¥í¥°¥é¥à¤ò¼Â¹Ô¤¹¤ë¿Í¤¬¡¢ ¼«Ê¬¤Î¥Ñ¥¹¥ï¡¼¥É¤òÃΤäƤ¤¤ë¤³¤È¤ò³Îǧ¤¹¤ëÎã¤Ç¤¹:
$pwd = (getpwuid($<))[1];
system "stty -echo";
print "Password: ";
chomp($word = <STDIN>);
print "\n";
system "stty echo";
if (crypt($word, $pwd) ne $pwd) {
die "Sorry...\n";
} else {
print "ok\n";
}
¤â¤Á¤í¤ó¡¢¼«Ê¬¼«¿È¤Î¥Ñ¥¹¥ï¡¼¥É¤òï¤Ë¤Ç¤âÆþÎϤ¹¤ë¤Î¤Ï¸ÌÀ¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£
crypt ´Ø¿ô¤ÏÂçÎ̤Υǡ¼¥¿¤Î¥Ï¥Ã¥·¥å²½¤Ë¤Ï¸þ¤¤¤Æ¤¤¤Þ¤»¤ó¡£ ¤³¤ì¤Ï¾ðÊó¤òÌ᤻¤Ê¤¤¤È¤¤¤¦Íýͳ¤À¤±¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£ ¤è¤ê´è¶¯¤Ê¥¢¥ë¥´¥ê¥º¥à¤Ë¤Ä¤¤¤Æ¤Ï Digest ¥â¥¸¥å¡¼¥ë¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£
Unicode ʸ»úÎó(ÀøºßŪ¤Ë¤Ï 255 ¤ò±Û¤¨¤ë¥³¡¼¥É¥Ý¥¤¥ó¥È¤ò»ý¤Äʸ»ú¤ò
´Þ¤ß¤Þ¤¹)¤Ë crypt() ¤ò»È¤Ã¤¿¾ì¹ç¡¢Perl ¤Ï crypt() ¤ò¸Æ¤Ó½Ð¤¹Á°¤ËÍ¿¤¨¤é¤ì¤¿
ʸ»úÎó¤ò8 ¥Ó¥Ã¥È¥Ð¥¤¥Èʸ»úÎó¤Ë¥À¥¦¥ó¥°¥ì¡¼¥É¤¹¤ë(ʸ»úÎó¤Î¥³¥Ô¡¼¤òºî¤ë)
¤³¤È¤Ç¾õ¶·¤Î¤Ä¤¸¤Ä¤Þ¤ò¹ç¤ï¤»¤è¤¦¤È¤·¤Þ¤¹¡£
¤¦¤Þ¤¯Æ°¤±¤Ð¡¢¤½¤ì¤Ç¤è¤·¡£Æ°¤«¤Ê¤±¤ì¤Ð¡¢crypt() ¤Ï
Wide character in crypt ¤È¤¤¤¦¥á¥Ã¥»¡¼¥¸¤È¶¦¤Ë die ¤·¤Þ¤¹¡£
[¤³¤Î´Ø¿ô¤Ï¡¢untie ´Ø¿ô¤ËÂ礤¯¤È¤Ã¤ÆÂå¤ï¤é¤ì¤Þ¤·¤¿¡£]
DBM ¥Õ¥¡¥¤¥ë¤È¥Ï¥Ã¥·¥å¤ÎÏ¢·ë¤ò¤Ï¤º¤·¤Þ¤¹¡£
[¤³¤Î´Ø¿ô¤Ï¡¢tie ´Ø¿ô¤ËÂ礤¯¤È¤Ã¤ÆÂå¤ï¤é¤ì¤Þ¤·¤¿¡£]
dbm(3), ndbm(3), sdbm(3), gdbm(3) ¥Õ¥¡¥¤¥ë¤Þ¤¿¤Ï Berkeley DB
¥Õ¥¡¥¤¥ë¤òÏ¢ÁÛÇÛÎó¤Ë·ë¤ÓÉÕ¤±¤Þ¤¹¡£
HASH ¤Ï¡¢¤½¤ÎÏ¢ÁÛÇÛÎó¤Î̾Á°¤Ç¤¹¡£
(ÉáÄ̤Πopen ¤È¤Ï°ã¤Ã¤Æ¡¢ºÇ½é¤Î°ú¿ô¤Ï¥Õ¥¡¥¤¥ë¥Ï¥ó¥É¥ë
¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£¤Þ¤¢¡¢»÷¤¿¤è¤¦¤Ê¤â¤Î¤Ç¤¹¤¬¡£)
DBNAME ¤Ï¡¢¥Ç¡¼¥¿¥Ù¡¼¥¹¤Î̾Á°¤Ç¤¹ (³ÈÄ¥»Ò¤Î .dir ¤ä
.pag ¤Ï¤â¤·¤¢¤Ã¤Æ¤â¤Ä¤±¤Þ¤»¤ó)¡£
¥Ç¡¼¥¿¥Ù¡¼¥¹¤¬Â¸ºß¤·¤Ê¤±¤ì¤Ð¡¢MODE MASK (¤ò umask ¤Ç½¤Àµ¤·¤¿¤â¤Î) ¤Ç
»ØÄꤵ¤ì¤¿¥â¡¼¥É¤Çºî¤é¤ì¤Þ¤¹¡£
¸Å¤¤ DBM ´Ø¿ô¤Î¤ß¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤ë¥·¥¹¥Æ¥à¤Ç¤Ï¡¢¥×¥í¥°¥é¥àÃæ¤Ç 1 ÅÙ¤À¤±
dbmopen() ¤ò¼Â¹Ô¤¹¤ë¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
ÀΤΥС¼¥¸¥ç¥ó¤Î Perl ¤Ç¤Ï¡¢DBM ¤â ndbm ¤â»ý¤Ã¤Æ¤¤¤Ê¤¤¥·¥¹¥Æ¥à¤Ç¤Ï¡¢
dbmopen() ¤ò¸Æ¤Ó½Ð¤¹¤ÈÃ×̿Ū¥¨¥é¡¼¤Ë¤Ê¤ê¤Þ¤¹¡£
¸½ºß¤Ç¤Ï sdbm(3) ¤Ë¥Õ¥©¡¼¥ë¥Ð¥Ã¥¯¤·¤Þ¤¹¡£
DBM ¥Õ¥¡¥¤¥ë¤ËÂФ·¤Æ¡¢½ñ¤¹þ¤ß¸¢¤¬Ìµ¤¤¤È¤¤Ë¤Ï¡¢¥Ï¥Ã¥·¥å
ÇÛÎó¤òÆÉ¤ß¤À¤¹¤³¤È¤À¤±¤¬¤Ç¤¡¢ÀßÄꤹ¤ë¤³¤È¤Ï¤Ç¤¤Þ¤»¤ó¡£
½ñ¤±¤ë¤«Èݤ«¤òÄ´¤Ù¤¿¤¤¾ì¹ç¤Ë¤Ï¡¢¥Õ¥¡¥¤¥ë¥Æ¥¹¥È
±é»»»Ò¤ò»È¤¦¤«¡¢¥¨¥é¡¼¤ò¥È¥é¥Ã¥×¤·¤Æ¤¯¤ì¤ë¡¢eval
¤ÎÃæ¤Ç¡¢¥À¥ß¡¼¤Î¥Ï¥Ã¥·¥å¥¨¥ó¥È¥ê¤òÀßÄꤷ¤Æ¤ß¤ë¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£
Âç¤¤Ê DBM ¥Õ¥¡¥¤¥ë¤ò°·¤¦¤È¤¤Ë¤Ï¡¢keys ¤ä values ¤Î¤è¤¦¤Ê´Ø¿ô¤Ï¡¢
µðÂç¤Ê¥ê¥¹¥È¤òÊÖ¤·¤Þ¤¹¡£
Âç¤¤Ê DBM ¥Õ¥¡¥¤¥ë¤Ç¤Ï¡¢each ´Ø¿ô¤ò»È¤Ã¤Æ·«¤êÊÖ¤·¤ò¹Ô¤Ê¤Ã¤¿Êý¤¬
Îɤ¤¤«¤â¤·¤ì¤Þ¤»¤ó¡£
Îã:
# print out history file offsets
dbmopen(%HIST,'/usr/lib/news/history',0666);
while (($key,$val) = each %HIST) {
print $key, ' = ', unpack('L',$val), "\n";
}
dbmclose(%HIST);
ÍÍ¡¹¤Ê dbm ¼êË¡¤ËÂФ¹¤ëÍøÅÀ·çÅÀ¤Ë´Ø¤¹¤ë¤è¤ê°ìÈÌŪ¤Êµ½Ò¤ª¤è¤Ó ÆÃ¤Ë¥ê¥Ã¥Á¤Ê¼ÂÁõ¤Ç¤¢¤ë DB_File ¤Ë´Ø¤·¤Æ¤Ï AnyDBM_File ¤â»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£
dbmopen() ¤ò¸Æ¤Ó½Ð¤¹Á°¤Ë¥é¥¤¥Ö¥é¥ê¤òÆÉ¤ß¹þ¤à¤³¤È¤Ç¡¢
¤É¤Î DBM ¥é¥¤¥Ö¥é¥ê¤ò»È¤¦¤«¤òÀ©¸æ¤Ç¤¤Þ¤¹:
use DB_File;
dbmopen(%NS_Hist, "$ENV{HOME}/.netscape/history.db")
or die "Can't open netscape history file: $!";
º¸ÊÕÃÍ EXPR ¤¬Ì¤ÄêµÁÃÍ undef °Ê³°¤ÎÃͤò»ý¤Ä¤«Èݤ«¤ò¼¨¤¹¡¢¥Ö¡¼¥ëÃͤò
ÊÖ¤·¤Þ¤¹¡£
EXPR ¤¬¤Ê¤¤¾ì¹ç¤Ï¡¢$_ ¤¬¥Á¥§¥Ã¥¯¤µ¤ì¤Þ¤¹¡£
¿¤¯¤Î±é»»»Ò¤¬¡¢EOF ¤ä̤½é´ü²½ÊÑ¿ô¡¢¥·¥¹¥Æ¥à¥¨¥é¡¼¤È¤¤¤Ã¤¿¡¢
Î㳰Ū¤Ê¾ò·ï¤Ç undef ¤òÊÖ¤¹¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£
¤³¤Î´Ø¿ô¤Ï¡¢Â¾¤ÎÃÍ¤È undef ¤È¤ò¶èÊ̤¹¤ë¤¿¤á¤Ë»È¤¨¤Þ¤¹¡£
(ñ½ã¤Ê¿¿µ¶Ãͥƥ¹¥È¤Ç¤Ï¡¢undef¡¢0¡¢"0" ¤Î¤¤¤º¤ì¤âµ¶¤òÊÖ¤¹¤Î¤Ç¡¢
¶èÊ̤¹¤ë¤³¤È¤¬¤Ç¤¤Þ¤»¤ó¡£)
undef ¤Ï͸ú¤Ê¥¹¥«¥éÃͤʤΤǡ¢¤½¤Î¸ºß¤¬ ɬ¤º¤·¤â
Î㳰Ū¤Ê¾õ¶·¤òɽ¤¹¤È¤Ï¸Â¤é¤Ê¤¤¤È¤¤¤¦¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤:
pop ¤Ï°ú¿ô¤¬¶õ¤ÎÇÛÎó¤À¤Ã¤¿¤È¤¤Ë undef ¤òÊÖ¤·¤Þ¤¹¤¬¡¢
¤¢¤ë¤¤¤Ï ÊÖ¤¹¤Ù¤Í×ÁǤ¬¤¿¤Þ¤¿¤Þ undef ¤À¤Ã¤¿¤Î¤«¤â¤·¤ì¤Þ¤»¤ó¡£
defined(&func) ¤È¤¹¤ë¤³¤È¤Ç¥µ¥Ö¥ë¡¼¥Á¥ó &func ¤Î¸ºß¤ò¡¢
³Î¤«¤á¤ë¤³¤È¤â¤Ç¤¤Þ¤¹¡£
ÊÖ¤êÃÍ¤Ï &func ¤ÎÁ°ÊýÄêµÁ¤Ë¤Ï±Æ¶Á¤µ¤ì¤Þ¤»¤ó¡£
ÄêµÁ¤µ¤ì¤Æ¤¤¤Ê¤¤¥µ¥Ö¥ë¡¼¥Á¥ó¤â¸Æ¤Ó½Ð¤·²Äǽ¤Ç¤¢¤ë¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£
ºÇ½é¤Ë¸Æ¤Ó½Ð¤µ¤ì¤¿¤È¤¤Ë¸ºß¤¹¤ë¤è¤¦¤Ë¤¹¤ë¤¿¤á¤Î
AUTOLOAD ¥á¥½¥Ã¥É¤ò»ý¤Ã¤¿¥Ñ¥Ã¥±¡¼¥¸¤«¤â¤·¤ì¤Þ¤»¤ó--
perlsub ¤ò»²¾È¤·¤Æ²¼¤µ¤¤¡£
½¸¹ç(¥Ï¥Ã¥·¥å¤äÇÛÎó)¤Ø¤Î defined ¤Î»ÈÍѤÏÈó¿ä¾©¤Ç¤¹¡£
¤³¤ì¤Ï¤½¤Î½¸¹ç¤Ë¥á¥â¥ê¤¬³ä¤êÅö¤Æ¤é¤ì¤¿¤«¤òÊó¹ð¤¹¤ë¤Î¤Ë
ÍѤ¤¤é¤ì¤Æ¤¤¤Þ¤·¤¿¡£
¤³¤Î¿¶¤ëÉñ¤¤¤Ï¾Íè¤Î¥Ð¡¼¥¸¥ç¥ó¤Î Perl ¤Ç¤Ï¾ÃÌǤ¹¤ë¤«¤â¤·¤ì¤Þ¤»¤ó¡£
Âå¤ï¤ê¤Ë¥µ¥¤¥º¤ËÂФ¹¤ë´Êñ¤Ê¥Æ¥¹¥È¤ò»È¤¦¤Ù¤¤Ç¤¹¡£
if (@an_array) { print "has array elements\n" }
if (%a_hash) { print "has hash members\n" }
¥Ï¥Ã¥·¥å¤ÎÍ×ÁǤËÂФ·¤ÆÍѤ¤¤ë¤È¡¢value ¤¬ÄêµÁ¤µ¤ì¤Æ¤¤¤ë¤«Èݤ«¤ò ÊÖ¤¹¤â¤Î¤Ç¤¢¤Ã¤Æ¡¢¥Ï¥Ã¥·¥å¤Ë key ¤¬Â¸ºß¤¹¤ë¤«Èݤ«¤òÊÖ¤¹¤Î¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£ ¤³¤ÎÍÑÅӤˤϡ¢exists ¤ò»È¤Ã¤Æ¤¯¤À¤µ¤¤¡£
Îã:
print if defined $switch{'D'};
print "$val\n" while defined($val = pop(@ary));
die "Can't readlink $sym: $!"
unless defined($value = readlink $sym);
sub foo { defined &$bar ? &$bar(@_) : die "No bar"; }
$debugging = 0 unless defined $debugging;
Ãí°Õ: ¿¤¯¤Î¿Í¡¹¤¬ defined ¤ò»È¤¤¤¹¤®¤Æ¡¢0 ¤È ""(¶õʸ»úÎó) ¤¬
¼ÂºÝ¤Î¤È¤³¤íÄêµÁ¤µ¤ì¤¿ÃͤǤ¢¤ë¤³¤È¤Ë¶Ã¤¯¤è¤¦¤Ç¤¹¡£
Î㤨¤Ð¡¢°Ê²¼¤Î¤è¤¦¤Ë½ñ¤¯¤È:
"ab" =~ /a(.*)b/;
¥Ñ¥¿¡¼¥ó¥Þ¥Ã¥Á¥ó¥°¤¬À®¸ù¤·¡¢$1 ¤¬ÄêµÁ¤µ¤ì¤Æ¤â¡¢¼ÂºÝ¤Ë¤Ï
¡Ö¤Ê¤·¡×¤Ë¥Þ¥Ã¥Á¤·¤Æ¤¤¤Þ¤¹¡£
¤·¤«¤·¤³¤ì¤Ï²¿¤Ë¤â¥Þ¥Ã¥Á¤·¤Æ¤¤¤Ê¤¤¤ï¤±¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£
²¿¤«¤Ë¤Ï¥Þ¥Ã¥Á¤·¤Æ¤¤¤ë¤Î¤Ç¤¹¤¬¡¢¤¿¤Þ¤¿¤Þ¤½¤ì¤¬Ä¹¤µ 0 ¤À¤Ã¤¿¤À¤±¤Ç¤¹¡£
¤³¤ì¤ÏÈó¾ï¤ËΨľ¤ÇÀµÄ¾¤Ê¤³¤È¤Ç¤¹¡£
´Ø¿ô¤¬Ì¤ÄêµÁÃͤòÊÖ¤¹¤È¤¡¢ÀµÄ¾¤ÊÅú¤¨¤òÊÖ¤¹¤³¤È¤¬¤Ç¤¤Ê¤¤¤³¤È¤ò
¹ðÇò¤·¤Æ¤¤¤Þ¤¹¡£
¤Ç¤¹¤Î¤Ç¡¢¤¢¤Ê¤¿¤¬¼«Ê¬¤¬¤·¤è¤¦¤È¤·¤Æ¤¤¤ë¤³¤È¤Î´°Á´À¤ò³Îǧ¤¹¤ë¤È¤¤Ë¤À¤±
defined ¤ò»È¤¦¤Ù¤¤Ç¤¹¡£
¤½¤Î¾¤Î¾ì¹ç¤Ç¤Ï¡¢Ã±¤Ë 0 ¤Þ¤¿¤Ï "" ¤ÈÈæ³Ó¤¹¤ë¤È¤¤¤¦¤Î¤¬¤¢¤Ê¤¿¤Î
µá¤á¤Æ¤¤¤ë¤â¤Î¤Ç¤¹¡£
undef, exists, ref ¤â»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£
¥Ï¥Ã¥·¥åÍ×ÁÇ¡¢ÇÛÎóÍ×ÁÇ¡¢¥Ï¥Ã¥·¥å¥¹¥é¥¤¥¹¡¢ÇÛÎ󥹥饤¥¹¤ò»ØÄꤹ¤ë¼°¤ò¼è¤ê¡¢
»ØÄꤵ¤ì¤¿Í×ÁǤò¥Ï¥Ã¥·¥å¤äÇÛÎ󤫤é¤òºï½ü¤·¤Þ¤¹¡£
ÇÛÎó¤Î¾ì¹ç¡¢ÇÛÎóÍ×ÁǤ¬ºÇ¸å¤Ë¤¢¤Ã¤¿¾ì¹ç¤Ï¡¢
ÇÛÎó¤ÎÂ礤µ¤Ï exists() ¤¬¿¿¤òÊÖ¤¹ºÇ¸åÈø¤ÎÍ×ÁǤ˽̤ߤޤ¹
(¤½¤Î¤è¤¦¤ÊÍ×ÁǤ¬¤Ê¤¤¾ì¹ç¤Ï 0 ¤Ë¤Ê¤ê¤Þ¤¹)¡£
ºï½ü¤ò¤·¤è¤¦¤È¤·¤¿¤è¤¦¤½¤Î¿ô¤ÈƱ¤¸¿ô¤ÎÍ×ÁǤ«¤é¤Ê¤ë¥ê¥¹¥È¤òÊÖ¤·¤Þ¤¹¡£ ¤³¤Î¥ê¥¹¥È¤Î³ÆÍ×ÁǤϡ¢ºï½ü¤µ¤ì¤¿Ãͤ«Ì¤ÄêµÁÃͤΤɤÁ¤é¤«¤Ç¤¹¡£ ¥¹¥«¥é¥³¥ó¥Æ¥¥¹¥È¤Ç¤Ï¡¢¤³¤ì¤Ïºï½ü¤µ¤ì¤¿ºÇ¸å¤ÎÍ×ÁÇ(¤Þ¤¿¤Ïºï½ü¤µ¤ì¤¿Í×ÁǤ¬ ¤Ê¤¤¾ì¹ç¤Ï̤ÄêµÁÃÍ)¤òÆÀ¤ë¤³¤È¤ò°ÕÌ£¤·¤Þ¤¹¡£
%hash = (foo => 11, bar => 22, baz => 33);
$scalar = delete $hash{foo}; # $scalar is 11
$scalar = delete @hash{qw(foo bar)}; # $scalar is 22
@array = delete @hash{qw(foo bar baz)}; # @array is (undef,undef,33)
%ENV ¤«¤éºï½ü¤ò¹Ô¤Ê¤¦¤È¡¢¼ÂºÝ¤Ë´Ä¶ÊÑ¿ô¤òÊѹ¹¤·¤Þ¤¹¡£
DBM ¥Õ¥¡¥¤¥ë¤Ë tie ¤µ¤ì¤¿ÇÛÎ󤫤é¤Îºï½ü¤Ï¡¢¤½¤Î DBM ¥Õ¥¡¥¤¥ë¤«¤é¥¨¥ó¥È¥ê¤ò
ºï½ü¤·¤Þ¤¹¡£
¤·¤«¤·¡¢tie ¤µ¤ì¤¿¥Ï¥Ã¥·¥å¤äÇÛÎ󤫤é¤Îºï½ü¤Ï¡¢
ÃͤòÊÖ¤¹¤È¤Ï¸Â¤ê¤Þ¤»¤ó¡£
ÇÛÎóÍ×ÁǤòºï½ü¤·¤¿¾ì¹ç¡¢ÇÛÎó¤Î°ÌÃ֤Ͻé´ü¤Î¡¢½é´ü²½¤µ¤ì¤Æ¤¤¤Ê¤¤¾õÂ֤ˤʤê¤Þ¤¹¡£
°ú¤Â³¤¤¤ÆÆ±¤¸Í×ÁǤËÂФ·¤Æ exists() ¤Ç¥Æ¥¹¥È¤¹¤ë¤Èµ¶¤òÊÖ¤·¤Þ¤¹¡£
¤Þ¤¿¡¢ÇÛÎó¤ÎÅÓÃæ¤ÎÇÛÎóÍ×ÁǤòºï½ü¤·¤Æ¤â¥¤¥ó¥Ç¥Ã¥¯¥¹¤Ï¥·¥Õ¥È¤·¤Þ¤»¤ó¡£
¤³¤Î¤¿¤á¤Ë¤Ï splice() ¤ò»È¤Ã¤Æ¤¯¤À¤µ¤¤¡£
exists ¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£
°Ê²¼¤Ï¡¢%HASH ¤È @ARRAY ¤Î¤¹¤Ù¤Æ¤ÎÃͤò(Èó¸úΨŪ¤Ë)ºï½ü¤·¤Þ¤¹:
foreach $key (keys %HASH) {
delete $HASH{$key};
}
foreach $index (0 .. $#ARRAY) {
delete $ARRAY[$index];
}
¤½¤·¤Æ°Ê²¼¤Î¤è¤¦¤Ë¤â¤Ç¤¤Þ¤¹:
delete @HASH{keys %HASH};
delete @ARRAY[0 .. $#ARRAY];
¤·¤«¤·¡¢¤³¤ì¤éÆó¤Ä¤Ïñ¤Ë¶õ¥ê¥¹¥È¤òÂåÆþ¤¹¤ë¤«¡¢%HASH ¤ä @ARRAY ¤ò undef ¤¹¤ë¤è¤êÃÙ¤¤¤Ç¤¹:
%HASH = (); # completely empty %HASH
undef %HASH; # forget %HASH ever existed
@ARRAY = (); # completely empty @ARRAY
undef @ARRAY; # forget @ARRAY ever existed
ºÇ½ªÅª¤ÊÁàºî¤¬¥Ï¥Ã¥·¥åÍ×ÁÇ¡¢ÇÛÎóÍ×ÁÇ¡¢¥Ï¥Ã¥·¥å¥¹¥é¥¤¥¹¡¢ÇÛÎ󥹥饤¥¹¤Î ¤¤¤º¤ì¤«¤Ç¤¢¤ë¸Â¤ê¤Ï¡¢EXPR ¤Ë¤ÏǤ°Õ¤ÎÊ£»¨¤Ê¼°¤òÃÖ¤¯¤³¤È¤¬¤Ç¤¤ë¤³¤È¤Ë Ãí°Õ¤·¤Æ¤¯¤À¤µ¤¤:
delete $ref->[$x][$y]{$key};
delete @{$ref->[$x][$y]}{$key1, $key2, @morekeys};
delete $ref->[$x][$y][$index];
delete @{$ref->[$x][$y]}[$index1, $index2, @moreindices];
eval ¤Î³°¤Ç¤Ï¡¢LIST ¤ÎÃͤò STDERR ¤Ë½ÐÎϤ·¡¢¤½¤Î»þÅÀ¤Î
$! (errno) ¤ÎÃÍ¤Ç exit ¤·¤Þ¤¹¡£
$! ¤ÎÃͤ¬ 0 ¤Ê¤é¤Ð¡¢
($? >> 8) (backtick `command` ¤Î¥¹¥Æ¡¼¥¿¥¹) ¤ÎÃÍ¤Ç exit¤·¤Þ¤¹¡£
($? >> 8) ¤â 0 ¤Ç¤¢¤ì¤Ð¡¢255 ¤Ç exit ¤¹¤ë¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£
eval ¤ÎÃæ¤Ç»ÈÍѤ¹¤ë¤È¡¢¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸¤¬¡¢
$@ ¤ËÆþ¤ì¤é¤ì¤Þ¤¹¡£
eval ¤ÏÃæÃǤµ¤ì¡¢Ì¤ÄêµÁÃͤòÊÖ¤·¤Þ¤¹¡£
¤³¤ì¤¬ die ¤¬Îã³°¤òȯÀ¸¤µ¤»¤ëÊýË¡¤Ç¤¹¡£
Åù²Á¤ÊÎã:
die "Can't cd to spool: $!\n" unless chdir '/usr/spool/news';
chdir '/usr/spool/news' or die "Can't cd to spool: $!\n"
LIST ¤ÎºÇ¸å¤ÎÍ×ÁǤ¬²þ¹Ô¤Ç½ª¤ï¤Ã¤Æ¤¤¤Ê¤±¤ì¤Ð¡¢¤½¤Î»þÅÀ¤Î
¥¹¥¯¥ê¥×¥È̾¤È¥¹¥¯¥ê¥×¥È¤Î¹ÔÈֹ桢(¤â¤·¤¢¤ì¤Ð)
ÆþÎÏ¥Õ¥¡¥¤¥ë¤Î¹ÔÈÖ¹æ¤È²þ¹Ôʸ»ú¤¬¡¢Â³¤±¤ÆÉ½¼¨¤µ¤ì¤Þ¤¹¡£
¡ÖÆþÎϹÔÈÖ¹æ¡×("chunk" ¤È¤â¸Æ¤Ð¤ì¤Þ¤¹)¤Ï
¡Ö¹Ô¡×¤È¤¤¤¦³µÇ°¤¬¸½ºß͸ú¤Ç¤¢¤ë¤È²¾Äꤷ¤Æ¤¤¤Þ¤¹¡£
¤Þ¤¿ÆÃ¼ìÊÑ¿ô $. ¤Ç¤âÍøÍѲÄǽ¤Ç¤¹¡£
$/ in perlvar ¤È $. in perlvar ¤â»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£
¥Ò¥ó¥È: ¥á¥Ã¥»¡¼¥¸¤ÎºÇ¸å¤ò ", stopped" ¤Î¤è¤¦¤Ê¤â¤Î¤Ç
½ª¤ï¤ë¤è¤¦¤Ë¤·¤Æ¤ª¤±¤Ð¡¢"at foo line 123" ¤Î¤è¤¦¤Ë
Äɲäµ¤ì¤Æ¡¢¤ï¤«¤ê¤ä¤¹¤¯¤Ê¤ê¤Þ¤¹¡£
"canasta" ¤È¤¤¤¦¥¹¥¯¥ê¥×¥È¤ò¼Â¹Ô¤·¤Æ¤¤¤ë¤È¤·¤Þ¤¹¡£
die "/etc/games is no good";
die "/etc/games is no good, stopped";
¤³¤ì¤Ï¡¢¤½¤ì¤¾¤ì°Ê²¼¤Î¤è¤¦¤Ëɽ¼¨¤·¤Þ¤¹¡£
/etc/games is no good at canasta line 123.
/etc/games is no good, stopped at canasta line 123.
exit() ¤È warn() ¤È Carp ¥â¥¸¥å¡¼¥ë¤â»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£
LIST ¤¬¶õ¤Ç $@ ¤¬(ŵ·¿Åª¤Ë¤ÏÁ°²ó¤Î eval ¤Ç)´û¤ËÃͤò»ý¤Ã¤Æ¤¤¤ë¾ì¹ç¡¢
ÃÍ¤Ï "\t...propagated" ¤òÄɲä·¤¿¸åºÆÍøÍѤµ¤ì¤Þ¤¹¡£
¤³¤ì¤ÏÎã³°¤òÅÁÇŤµ¤»¤ë¾ì¹ç¤Ë͸ú¤Ç¤¹:
eval { ... };
die unless $@ =~ /Expected exception/;
LIST ¤¬¶õ¤Ç¡¢$@ ¤¬ PROPAGATE ¥á¥½¥Ã¥É¤ò´Þ¤à¥ª¥Ö¥¸¥§¥¯¥È¤Ø¤Î
¥ê¥Õ¥¡¥ì¥ó¥¹¤ò´Þ¤à¾ì¹ç¡¢¤³¤Î¥á¥½¥Ã¥É¤¬Äɲåե¡¥¤¥ë¤È¹ÔÈÖ¹æ¤ò°ú¿ô¤È¤·¤Æ
¸Æ¤Ó½Ð¤µ¤ì¤Þ¤¹¡£
ÊÖ¤êÃÍ¤Ï $@ ¤ÎÃͤòÃÖ¤´¹¤¨¤Þ¤¹¡£
¤Ä¤Þ¤ê¡¢$@ = eval { $@->PROPAGATE(__FILE__, __LINE__) }; ¤¬
¸Æ¤Ó½Ð¤µ¤ì¤¿¤«¤Î¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£
$@ ¤¬¶õ¤Î¾ì¹ç¡¢"Died" ¤¬»È¤ï¤ì¤Þ¤¹¡£
die() ¤Ï¥ê¥Õ¥¡¥ì¥ó¥¹°ú¿ô¤È¶¦¤Ë¸Æ¤Ó½Ð¤¹¤³¤È¤â¤Ç¤¤Þ¤¹¡£
eval() ÆâÉô¤Ç¤³¤Î¤è¤¦¤Ë¸Æ¤Ó½Ð¤µ¤ì¤¿¾ì¹ç¡¢$@ ¤Ï¥ê¥Õ¥¡¥ì¥ó¥¹¤ò»ý¤Á¤Þ¤¹¡£
¤³¤Î¿¶¤ëÉñ¤¤¤Ï¡¢Îã³°¤ÎÀ¼Á¤Ë¤¹¤¤¤ÆÇ¤°Õ¤Î¾õÂÖ¤ò´ÉÍý¤¹¤ë¥ª¥Ö¥¸¥§¥¯¥È¤ò»È¤Ã¤¿
¤è¤êÊ£»¨¤ÊÎã³°¥Ï¥ó¥É¥ê¥ó¥°¤Î¼ÂÁõ¤ò²Äǽ¤Ë¤·¤Þ¤¹¡£
¤³¤Î¤è¤¦¤Ê¥¹¥¡¼¥Þ¤Ï $@ ¤ÎÆÃÄê¤Îʸ»úÎóÃͤòÀµµ¬É½¸½¤ò»È¤Ã¤Æ
¥Þ¥Ã¥Á¥ó¥°¤¹¤ë¤È¤¤Ë»þ¡¹¹¥¤Þ¤ì¤Þ¤¹¡£
$@ ¤Ï¥°¥í¡¼¥Ð¥ëÊÑ¿ô¤Ç¡¢eval() ¤Ï¥ª¥Ö¥¸¥§¥¯¥È¼ÂÁõ¤ÎÆâÉô¤Ç
»È¤ï¤ì¤ë¤³¤È¤¬¤¢¤ë¤Î¤Ç¡¢¥¨¥é¡¼¥ª¥Ö¥¸¥§¥¯¥È¤Î²òÀϤϥ°¥í¡¼¥Ð¥ëÊÑ¿ô¤Î
¥ê¥Õ¥¡¥ì¥ó¥¹¤òÃÖ¤´¹¤¨¤Ê¤¤¤³¤È¤ËÃí°Õ¤òʧ¤ï¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£
ºÇ¤â´Êñ¤Ê²ò·èÊýË¡¤Ï¡¢Â¾¤ÎÁàºî¤ò¤¹¤ëÁ°¤Ë¥ê¥Õ¥¡¥ì¥ó¥¹¤Î¥í¡¼¥«¥ë¥³¥Ô¡¼¤ò
ºî¤ë¤³¤È¤Ç¤¹¡£
°Ê²¼¤ËÎã¤ò¼¨¤·¤Þ¤¹:
use Scalar::Util 'blessed';
eval { ... ; die Some::Module::Exception->new( FOO => "bar" ) };
if (my $ev_err = $@) {
if (blessed($ev_err) && $ev_err->isa("Some::Module::Exception")) {
# handle Some::Module::Exception
}
else {
# handle all other possible exceptions
}
}
perl ¤ÏÊá¤é¤¨¤é¤ì¤Ê¤«¤Ã¤¿Îã³°¤Î¥á¥Ã¥»¡¼¥¸¤òɽ¼¨¤¹¤ëÁ°¤Ëʸ»úÎ󲽤¹¤ë¤Î¤Ç¡¢ ¤³¤Î¤è¤¦¤Ê¥«¥¹¥¿¥àÎã³°¥ª¥Ö¥¸¥§¥¯¥È¤Îʸ»úÎ󲽤ò¥ª¡¼¥Ð¡¼¥í¡¼¥É¤·¤¿¤¤¤È »×¤¦¤«¤â¤·¤ì¤Þ¤»¤ó¡£ ¤³¤ì¤Ë´Ø¤¹¤ë¾ÜºÙ¤Ï overload ¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£
$SIG{__DIE__} ¥Õ¥Ã¥¯¤ò¥»¥Ã¥È¤¹¤ë¤³¤È¤Ç¡¢die ¤¬¤½¤Î¹Ôư¤ò¹Ô¤¦
ľÁ°¤Ë¼Â¹Ô¤µ¤ì¤ë¥³¡¼¥ë¥Ð¥Ã¥¯¤òÀßÄê¤Ç¤¤Þ¤¹¡£
·ë¤ÓÉÕ¤±¤é¤ì¤¿¥Ï¥ó¥É¥é¤Ï¥¨¥é¡¼¥Æ¥¥¹¥È¤È¶¦¤Ë¸Æ¤Ó½Ð¤µ¤ì¡¢
ɬÍ×¤Ê¤éºÆ¤Ó die ¤ò¸Æ¤Ó½Ð¤¹¤³¤È¤Ç¥¨¥é¡¼¥Æ¥¥¹¥È¤òÊѹ¹¤Ç¤¥¢¥¹¡£
%SIG ¤Î¥¨¥ó¥È¥ê¤ò¥»¥Ã¥È¤¹¤ë¾ÜºÙ¤Ë¤Ä¤¤¤Æ¤Ï¡¢$SIG{expr} in perlvar ¤ò¡¢
Îã¤Ë¤Ä¤¤¤Æ¤Ï eval BLOCK ¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£
¤³¤Îµ¡Ç½¤Ï¥×¥í¥°¥é¥à¤¬½ªÎ»¤·¤è¤¦¤È¤¹¤ëÁ°¤Ë 1 ²ó¤À¤±¼Â¹Ô¤·¤Æ¤¤¤Þ¤·¤¿¤¬¡¢
¸½ºß¤Ç¤Ï¤½¤¦¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó --
$SIG{__DIE__} ¥Õ¥Ã¥¯¤Ï eval() ¤µ¤ì¤¿¥Ö¥í¥Ã¥¯/ʸ»úÎó¤ÎÃæ¤Ç¤â
¸Æ¤Ð¤ì¤ë¤Î¤Ç¤¹!
¤â¤·¤½¤Î¤è¤¦¤Ê¾õ¶·¤Ç²¿¤â¤·¤Ê¤¯¤Ê¤¤»þ¤Ï:
die @_ if $^S;
¤ò¥Ï¥ó¥É¥é¤ÎºÇ½é¤Î¹Ô¤ËÃÖ¤¤¤Æ¤¯¤À¤µ¤¤($^S in perlvar ¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤)¡£ ¤³¤ì¤ÏÎ¥¤ì¤¿¤È¤³¤í¤ÇÉÔ»×µÄ¤Ê¹ÔÆ°¤ò°ú¤µ¯¤³¤¹¤Î¤Ç¡¢ ¤³¤Îľ´¶Åª¤Ç¤Ê¤¤¿¶¤ëÉñ¤¤¤Ï¾Íè¤Î¥ê¥ê¡¼¥¹¤Ç½¤Àµ¤µ¤ì¤ë¤«¤â¤·¤ì¤Þ¤»¤ó¡£
¼ÂºÝ¤Ï´Ø¿ô¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£
BLOCK ¤Ç¼¨¤µ¤ì¤ë¥³¥Þ¥ó¥ÉÎó¤ÎºÇ¸å¤ÎÃͤòÊÖ¤·¤Þ¤¹¡£
while ¤ä until ¥ë¡¼¥×½¤¾þ»Ò¤Ç½¤¾þ¤¹¤ë¤È¡¢
¥ë¡¼¥×¾ò·ï¤òÄ´¤Ù¤ëÁ°¤Ë 1 ÅÙ¡¢BLOCK ¤ò¼Â¹Ô¤·¤Þ¤¹¡£
(¤³¤ì°Ê³°¤Î¼Â¹Ôʸ¤Ï¡¢¥ë¡¼¥×½¤¾þ»Ò¤Ë¤è¤ê¡¢¾ò·ï¤¬ºÇ½é¤Ë
Ä´¤Ù¤é¤ì¤Þ¤¹¡£)
do BLOCK ¤Ï¥ë¡¼¥×¤È¤·¤Æ¤Ï °·¤ï¤ì¤Þ¤»¤ó¡£
½¾¤Ã¤Æ¡¢next, last, redo ¤È¤¤¤Ã¤¿¥ë¡¼¥×À©¸æÊ¸¤Ï
¥Ö¥í¥Ã¥¯¤«¤éÈ´¤±¤¿¤êºÆ³«¤¹¤ë¤³¤È¤Ï¤Ç¤¤Þ¤»¤ó¡£
¤½¤Î¾¤ÎÀïά¤Ë¤Ä¤¤¤Æ¤Ï perlsyn ¤ò»²¾È¤·¤Æ²¼¤µ¤¤¡£
¤³¤Î·Á¤Î¥µ¥Ö¥ë¡¼¥Á¥ó¸Æ¤Ó½Ð¤·¤ÏÈó¿ä¾©¤Ç¤¹¡£ perlsub ¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£
EXPR ¤ÎÃͤò¥Õ¥¡¥¤¥ë̾¤È¤·¤ÆÍѤ¤¡¢¤½¤Î¥Õ¥¡¥¤¥ë¤ÎÃæ¿È¤ò Perl ¤Î¥¹¥¯¥ê¥×¥È¤È¤·¤Æ¼Â¹Ô¤·¤Þ¤¹¡£
do 'stat.pl';
¤Ï°Ê²¼¤Î¤â¤Î¤ÈƱ¤¸¤è¤¦¤Ê¤â¤Î¤Ç¤¹¤¬¡¢
eval `cat stat.pl`;
¤è¤ê¸úΨŪ¤Ç¡¢´Ê·é¤Ç¤¢¤ê¡¢¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸¤Ç¥Õ¥¡¥¤¥ë̾¤¬¤ï¤«¤ë¡¢
¥«¥ì¥ó¥È¥Ç¥£¥ì¥¯¥È¥ê¤Ç¥Õ¥¡¥¤¥ë¤¬¸«¤Ä¤«¤é¤Ê¤«¤Ã¤¿¤È¤¤Ë
@INC ¥Ç¥£¥ì¥¯¥È¥ê¤ò¸¡º÷¤¹¤ë¡¢¥Õ¥¡¥¤¥ë¤¬¤¢¤Ã¤¿¤È¤¤Ë %INC ¤ò¹¹¿·¤¹¤ë¡¢
¤È¤¤¤Ã¤¿¤³¤È¤¬¤¢¤ê¤Þ¤¹¡£
Predefined Names in perlvar ¤â»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£
do FILENAME ¤Çɾ²Á¤µ¤ì¤¿¥³¡¼¥É¤Ï¡¢Æþ¤ì»Ò¤Î¥¹¥³¡¼¥×¤Ë¤¢¤ë
¥ì¥¥·¥«¥ëÊÑ¿ô¤ò¸«¤ë¤³¤È¤¬¤Ç¤¤Ê¤¤¤Î¤ËÂФ·¡¢eval STRING¤Ç¤Ï¤Ç¤¤ë¡¢
¤È¤¤¤¦°ã¤¤¤¬¤¢¤ê¤Þ¤¹¡£
¤·¤«¤·¡¢¸Æ¤Ó½Ð¤¹¤¿¤Ó¤Ë¥Õ¥¡¥¤¥ë¤ò²òÀϤ·Ä¾¤¹¤È¤¤¤¦ÅÀ¤Ç¤ÏƱ¤¸¤Ç¤¹¤«¤é¡¢
¥ë¡¼¥×Æâ¤Ç¤³¤ì¤ò»È¤ª¤¦¤Ê¤É¤È¤Ï¡¢´Ö°ã¤Ã¤Æ¤â»×¤Ã¤¿¤ê¤·¤Ê¤¤¤è¤¦¤Ë¡£
do¤¬¥Õ¥¡¥¤¥ë¤òÆÉ¤ß¹þ¤á¤Ê¤«¤Ã¤¿¾ì¹ç¡¢undef ¤òÊÖ¤·¤Æ $! ¤Ë
¥¨¥é¡¼¤òÀßÄꤷ¤Þ¤¹¡£
do ¤¬¥Õ¥¡¥¤¥ë¤òÆÉ¤ß¹þ¤á¤¿¤¬¥³¥ó¥Ñ¥¤¥ë¤Ç¤¤Ê¤«¤Ã¤¿¾ì¹ç¡¢
undef ¤òÊÖ¤·¤Æ $@ ¤Ë¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸¤òÀßÄꤷ¤Þ¤¹¡£
¥Õ¥¡¥¤¥ë¤Î¥³¥ó¥Ñ¥¤¥ë¤ËÀ®¸ù¤·¤¿¾ì¹ç¡¢do ¤ÏºÇ¸å¤Ëɾ²Á¤·¤¿É½¸½¤ÎÃͤòÊÖ¤·¤Þ¤¹¡£
¥é¥¤¥Ö¥é¥ê¥â¥¸¥å¡¼¥ë¤Î¥¤¥ó¥¯¥ë¡¼¥É¤Ë¤Ï¡¢use ±é»»»Ò¤ä
require ±é»»»Ò¤ò»È¤Ã¤¿Êý¤¬¤è¤¤¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£
¤³¤ì¤é¤Ï¼«Æ°Åª¤Ë¥¨¥é¡¼¤ò¥Á¥§¥Ã¥¯¤·¤Æ¡¢ÌäÂ꤬¤¢¤ì¤ÐÎã³°¤òȯÀ¸¤µ¤»¤Þ¤¹¡£
do ¤ò¥×¥í¥°¥é¥àÀßÄê¥Õ¥¡¥¤¥ë¤òÆÉ¤ß¹þ¤à¤Î¤Ë»È¤¤¤¿¤¤¤«¤â¤·¤ì¤Þ¤»¤ó¡£
¼êư¤Î¥¨¥é¡¼¥Á¥§¥Ã¥¯¤Ï°Ê²¼¤Î¤è¤¦¤Ë¤·¤Æ¹Ô¤¨¤Þ¤¹:
# read in config files: system first, then user
for $file ("/share/prog/defaults.rc",
"$ENV{HOME}/.someprogrc")
{
unless ($return = do $file) {
warn "couldn't parse $file: $@" if $@;
warn "couldn't do $file: $!" unless defined $return;
warn "couldn't run $file" unless $return;
}
}
¤³¤Î´Ø¿ô¤Ï¨ºÂ¤Ë¥³¥¢¥À¥ó¥×¤ò¹Ô¤Ê¤¤¤Þ¤¹¡£
ƱÍͤΤ³¤È¤ò¹Ô¤¦ perlrun ¤Î -u ¥ª¥×¥·¥ç¥ó¤â»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£
¥×¥í¥°¥é¥à¤ÎÀèÆ¬¤Ç¡¢
¤¹¤Ù¤Æ¤ÎÊÑ¿ô¤ò½é´ü²½¤·¤¿¤¢¤È¤Î¥³¥¢¥À¥ó¥×¤ò undump
¥×¥í¥°¥é¥à(Ä󶡤·¤Æ¤¤¤Þ¤»¤ó)¤ò»È¤Ã¤Æ¼Â¹Ô¥Õ¥¡¥¤¥ë¤ËÊ֤뤳¤È¤¬¤Ç¤¤Þ¤¹¡£
¤³¤Î¿·¤·¤¤¥Ð¥¤¥Ê¥ê¤¬¼Â¹Ô¤µ¤ì¤ë¤È¡¢goto LABEL ¤«¤é»Ï¤á¤Þ¤¹
(goto ¤Ë´Ø¤¹¤ëÀ©¸Â¤Ï¤¹¤Ù¤ÆÅ¬ÍѤµ¤ì¤Þ¤¹)¡£
¥³¥¢¥À¥ó¥×¤ò¤Ï¤µ¤ó¤ÇºÆÀ¸¤¹¤ë goto ¤È¹Í¤¨¤Æ¤¯¤À¤µ¤¤¡£
LABEL ¤¬¾Êά¤µ¤ì¤ë¤È¡¢¥×¥í¥°¥é¥à¤òÀèÆ¬¤«¤éºÆ³«¤·¤Þ¤¹¡£
·Ù¹ð: dump »þÅÀ¤Ç¥ª¡¼¥×¥ó¤µ¤ì¤Æ¤¤¤¿¥Õ¥¡¥¤¥ë¤Ï¡¢ ¥×¥í¥°¥é¥à¤¬ºÆÀ¸¤µ¤ì¤¿¤È¤¤Ë¤Ï¡¢¤â¤Ï¤ä¥ª¡¼¥×¥ó¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£ Perl ¤òÉôʬŪ¤Ëº®Í𤵤»¤ë²ÄǽÀ¤¬¤¢¤ê¤Þ¤¹¡£
¤³¤Î´Ø¿ô¤ÏÂçÉý¤Ë»þÂåÃÙ¤ì¤Î¤â¤Î¤Ç¤¹; ¼ç¤ÊÍýͳ¤È¤·¤Æ¤Ï¡¢¥³¥¢¥Õ¥¡¥¤¥ë¤ò
¼Â¹Ô·Á¼°¤ËÊÑ´¹¤¹¤ë¤Î¤¬Èó¾ï¤Ëº¤Æñ¤Ç¤¢¤ë¤³¤È¤Ç¤¹¡£
¤³¤ì¤¬¡¢º£¤Ç¤Ï¥¿¥¤¥×¥ß¥¹¤Î²ÄǽÀ¤ò·Ù¹ð¤µ¤ì¤¿¤¯¤Ê¤¤¤Ê¤é
CORE::dump() ¤È¤·¤Æµ¯Æ°¤¹¤ë¤Ù¤Íýͳ¤Ç¤¹¡£
¥ê¥¹¥È¥³¥ó¥Æ¥¥¹¥È¤Ç¸Æ¤Ó½Ð¤·¤¿¾ì¹ç¤Ï¡¢ ¥Ï¥Ã¥·¥å¤Î¼¡¤Î Í×ÁÇ ¤ËÂФ¹¤ë¡¢key ¤È Í×ÁÇ ¤«¤é¤Ê¤ë 2 Í×ÁǤΥꥹ¥È¤òÊÖ¤·¤Þ¤¹¤Î¤Ç¡¢¥Ï¥Ã¥·¥å¾å¤Ç¤Î·«¤êÊÖ¤·¤ò ¹Ô¤Ê¤¦¤³¤È¤¬¤Ç¤¤Þ¤¹¡£ ¥¹¥«¥é¥³¥ó¥Æ¥¥¹¥È¤Ç¸Æ¤Ó½Ð¤·¤¿¾ì¹ç¤Ï¡¢ ¥Ï¥Ã¥·¥å¤Î¼¡¤ÎÍ×ÁǤΤ¿¤á¤Î key ¤òÊÖ¤·¤Þ¤¹¡£
¥¨¥ó¥È¥ê¤Ï¸«¤«¤±¾å¡¢¥é¥ó¥À¥à¤Ê½ç½ø¤ÇÊÖ¤µ¤ì¤Þ¤¹¡£
¼ÂºÝ¤Î¥é¥ó¥À¥à¤Ê½çÈÖ¤Ï perl ¤Î¾Íè¤Î¥Ð¡¼¥¸¥ç¥ó¤Ç¤ÏÊѤï¤ë¤«¤â¤·¤ì¤Þ¤»¤ó¤¬¡¢
keys ¤ä values ´Ø¿ô¤¬Æ±¤¸(Êѹ¹¤µ¤ì¤Æ¤¤¤Ê¤¤)¥Ï¥Ã¥·¥å¤ËÂФ·¤Æ
À¸À®¤¹¤ë¤Î¤ÈƱ¤¸½çÈ֤Ǥ¢¤ë¤³¤È¤ÏÊݾڤµ¤ì¤Þ¤¹¡£
Perl 5.8.1 °Ê¹ß¤Ç¤Ï¥»¥¥å¥ê¥Æ¥£¾å¤ÎÍýͳ¤Ë¤è¤ê¡¢
¼Â¹Ô¤µ¤ì¤ëËè¤Ë½çÈÖ¤ÏÊѤï¤ê¤Þ¤¹
(Algorithmic Complexity Attacks in perlsec ¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤)¡£
¥Ï¥Ã¥·¥å¤ò¤¹¤Ù¤ÆÆÉ¤ß¹þ¤ó¤Ç¤·¤Þ¤¦¤È¡¢¥ê¥¹¥È¥³¥ó¥Æ¥¥¹¥È¤Ç¤Ï¶õÇÛÎó¤¬
ÊÖ¤µ¤ì¤Þ¤¹(¤³¤ì¤ÏÂåÆþ¤µ¤ì¤ë¤È¡¢µ¶ (0) ¤È¤Ê¤ê¤Þ¤¹)¡£
¥¹¥«¥é¥³¥ó¥Æ¥¥¹¥È¤Ç¤Ï undef ¤¬ÊÖ¤µ¤ì¤Þ¤¹¡£
¤½¤Î¤¢¤È¡¢¤â¤¦°ìÅÙ each ¤ò¸Æ¤Ó½Ð¤¹¤È¡¢
ºÆ¤Ó·«¤êÊÖ¤·¤ò»Ï¤á¤Þ¤¹¡£
¥Ï¥Ã¥·¥å¤´¤È¤ËÈ¿Éü»Ò¤¬ 1 ¤Ä¤¢¤ê¡¢¥×¥í¥°¥é¥àÃæ¤Î¤¹¤Ù¤Æ¤Î
each ´Ø¿ô¡¢keys ´Ø¿ô¡¢values ´Ø¿ô¤Ç¶¦ÍѤµ¤ì¤Þ¤¹¡£
È¿Éü»Ò¤Ï¡¢ÇÛÎó¤ÎÍ×ÁǤò¤¹¤Ù¤ÆÆÉ¤à¤³¤È¤Ë¤è¤Ã¤Æ¡¢¤Þ¤¿¤Ïkeys HASH,
values HASH¤òɾ²Á¤¹¤ë¤³¤È¤Ç¥ê¥»¥Ã¥È¤¹¤ë¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
·«¤êÊÖ¤·¤ò¹Ô¤Ê¤Ã¤Æ¤¤¤ë´Ö¤Ë¡¢¥Ï¥Ã¥·¥å¤ËÍ×ÁǤòÄɲä·¤¿¤êºï½ü¤·¤¿¤ê¤¹¤ë¤È¡¢
Í×ÁǤ¬Èô¤Ð¤µ¤ì¤¿¤ê½ÅÊ£¤·¤¿¤ê¤¹¤ë¤Î¤Ç¡¢¤·¤Æ¤Ï¤¤¤±¤Þ¤»¤ó¡£
Îã³°: °ìÈֺǶá¤Ë each() ¤«¤éÊÖ¤µ¤ì¤¿¤â¤Î¤òºï½ü¤¹¤ë¤Î¤Ï¾ï¤Ë°ÂÁ´¤Ç¤¹¡£
¤³¤ì¤Ï°Ê²¼¤Î¤è¤¦¤Ê¥³¡¼¥É¤¬Àµ¤·¤¯Æ°¤¯¤³¤È¤ò°ÕÌ£¤·¤Þ¤¹:
while (($key, $value) = each %hash) {
print $key, "\n";
delete $hash{$key}; # This is safe
}
°Ê²¼¤Î¥×¥í¥°¥é¥à¤Ï¡¢½çÈÖ¤¬°Û¤Ê¤ë¤â¤Î¤Î¡¢
printenv(1) ¥×¥í¥°¥é¥à¤Î¤è¤¦¤Ë´Ä¶ÊÑ¿ô¤òɽ¼¨¤·¤Þ¤¹:
while (($key,$value) = each %ENV) {
print "$key=$value\n";
}
keys ¤ä values ¤ä sort ¤â»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£
¼¡¤Ë FILEHANDLE ¾å¤ÇÆÉ¤ß¹þ¤ß¤ò¹Ô¤Ê¤Ã¤¿¤È¤¤Ë¡¢ EOF ¤¬ÊÖ¤µ¤ì¤ë¤È¤¤«¡¢
FILEHANDLE ¤¬¥ª¡¼¥×¥ó¤µ¤ì¤Æ¤¤¤Ê¤¤¤È¡¢1 ¤òÊÖ¤·¤Þ¤¹¡£
FILEHANDLE ¤Ï¡¢Ãͤ¬¼ÂºÝ¤Î¥Õ¥¡¥¤¥ë¥Ï¥ó¥É¥ë¤ò¼¨¤¹¼°¤Ç¤¢¤Ã¤Æ¤â¤«¤Þ¤¤¤Þ¤»¤ó¡£
(¤³¤Î´Ø¿ô¤Ï¡¢¼ÂºÝ¤Ëʸ»ú¤òÆÉ¤ß¡¢ungetc ¤ò¹Ô¤Ê¤¤¤Þ¤¹¤Î¤Ç¡¢
ÂÐÏ÷¿¤Î¾ì¹ç¤Ë¤Ï¡¢¤½¤ìÄøÍÍѤǤϤ¢¤ê¤Þ¤»¤ó¡£)
üËö¥Õ¥¡¥¤¥ë¤Ï EOF ¤Ë㤷¤¿¸å¤Ë¤µ¤é¤ËÆÉ¤ß¹þ¤ó¤À¤ê eof(FILEHANDLE) ¤ò
¸Æ¤Ó½Ð¤·¤¿¤ê¤·¤Æ¤Ï¤¤¤±¤Þ¤»¤ó¡£
¤½¤Î¤è¤¦¤Ê¤³¤È¤ò¤¹¤ë¤È¡¢Ã¼Ëö¤Î¤è¤¦¤Ê¥Õ¥¡¥¤¥ë¥¿¥¤¥×¤Ï
EOF ¾õÂÖ¤ò¼º¤Ã¤Æ¤·¤Þ¤¦¤«¤â¤·¤ì¤Þ¤»¤ó¡£
°ú¿ô¤ò¾Êά¤·¤¿ eof ¤Ï¡¢ºÇ¸å¤ËÆÉ¤ß¹þ¤ß¤ò¹Ô¤Ê¤Ã¤¿¥Õ¥¡¥¤¥ë¤ò»È¤¤¤Þ¤¹¡£
¶õ¤Î³ç¸Ì¤ò¤Ä¤±¤¿ eof() ¤ÏÂ礤¯°Û¤Ê¤ê¤Þ¤¹¡£
¤³¤ì¤Ï¥³¥Þ¥ó¥É¥é¥¤¥ó¤Î¥Õ¥¡¥¤¥ë¥ê¥¹¥È¤Ç¹½À®¤µ¤ì¡¢<> ±é»»»Ò·Ðͳ¤Ç
¥¢¥¯¥»¥¹¤µ¤ì¤ëµ¼»÷¥Õ¥¡¥¤¥ë¤ò¼¨¤¹¤¿¤á¤ËÍѤ¤¤é¤ì¤Þ¤¹¡£
Ä̾ï¤Î¥Õ¥¡¥¤¥ë¥Ï¥ó¥É¥ë¤È°ã¤Ã¤Æ <> ¤ÏÌÀ¼¨Åª¤Ë¥ª¡¼¥×¥ó¤µ¤ì¤Ê¤¤¤Î¤Ç¡¢
<> ¤ò»È¤¦Á°¤Ë eof() ¤ò»È¤¦¤È¡¢
ÆþÎϤ¬Àµ¾ï¤«³Îǧ¤¹¤ë¤¿¤á¤Ë @ARGV ¤¬¥Æ¥¹¥È¤µ¤ì¤Þ¤¹¡£
ƱÍͤˡ¢<> ¤Î¸å¤Î eof() ¤Ç EOF ¤¬ÊÖ¤ë¤Î¤Ï¡¢
¾¤Î @ARGV ¥ê¥¹¥È¤ò½èÍý¤·¤Æ¤¤¤ë¤È²¾Äꤷ¡¢¤â¤· @ARGV ¤ò
¥»¥Ã¥È¤·¤Æ¤¤¤Ê¤¤¤È¤¤Ï STDIN ¤«¤éÆÉ¤ß¹þ¤ß¤Þ¤¹;
I/O Operators in perlop ¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£
while (<>) ¥ë¡¼¥×¤ÎÃæ¤Ç¤Ï¡¢¸Ä¡¹¤Î¥Õ¥¡¥¤¥ë¤Î½ª¤ï¤ê¤òÄ´¤Ù¤ë¤Ë¤Ï¡¢
eof ¤« eof(ARGV) ¤òÍѤ¤¤Þ¤¹¡£
eof() ¤ÏºÇ¸å¤Î¥Õ¥¡¥¤¥ë¤Î½ª¤ï¤ê¤Î¤ß¤òÄ´¤Ù¤Þ¤¹¡£
Îã:
# reset line numbering on each input file
while (<>) {
next if /^\s*#/; # skip comments
print "$.\t$_";
} continue {
close ARGV if eof; # Not eof()!
}
# insert dashes just before last line of last file
while (<>) {
if (eof()) { # check for end of last file
print "--------------\n";
}
print;
last if eof(); # needed if we're reading from a terminal
}
¸½¼ÂŪ¤Ê¥Ò¥ó¥È: Perl ¤Ç eof ¤¬É¬ÍפȤʤ뤳¤È¤Ï¡¢¤Û¤È¤ó¤É¤¢¤ê¤Þ¤»¤ó¡£
´ðËÜŪ¤Ë¤Ï¡¢
¥Ç¡¼¥¿¤¬¤Ê¤¯¤Ê¤Ã¤¿¤È¤¤ä¥¨¥é¡¼¤¬¤¢¤Ã¤¿¤È¤¤Ë¡¢ÆþÎϱ黻»Ò¤¬
undef ¤òÊÖ¤·¤Æ¤¯¤ì¤ë¤«¤é¤Ç¤¹¡£
Âè°ì¤Î·Á¼°¤Ç¤Ï¡¢EXPR ¤ÎÊÖ¤êÃͤ¬ Perl ¤Î¥×¥í¥°¥é¥à¤Ç¤¢¤ë¤«¤Î¤è¤¦¤Ë
²òÀϤµ¤ì¡¢¼Â¹Ô¤µ¤ì¤Þ¤¹¡£
¼°¤ÎÃÍ(¤½¤ì¼«¿È¥¹¥«¥é¥³¥ó¥Æ¥¥¹¥È¤ÎÃæ¤Ç·èÄꤵ¤ì¤Þ¤¹)¤Ï¤Þ¤º¥Ñ¡¼¥¹¤µ¤ì¡¢
¥¨¥é¡¼¤¬¤Ê¤±¤ì¤Ð
Perl ¥×¥í¥°¥é¥à¤Î¥ì¥¥·¥«¥ë¥³¥ó¥Æ¥¥¹¥È¤ÎÃæ¤Ç¼Â¹Ô¤µ¤ì¤Þ¤¹¤Î¤Ç¡¢ÊÑ¿ô¤ÎÀßÄê¡¢
¥µ¥Ö¥ë¡¼¥Á¥ó¤ä¥Õ¥©¡¼¥Þ¥Ã¥È¤ÎÄêµÁ¤Ï¡¢¤½¤Î¸å¤â»Ä¤Ã¤Æ¤¤¤Þ¤¹¡£¡¡
ÊÖ¤µ¤ì¤ëÃÍ¤Ï eval ¤¬¼Â¹Ô¤µ¤ì¤ë¤´¤È¤Ë¥Ñ¡¼¥¹¤µ¤ì¤ë¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£
EXPR ¤ò¾Êά¤¹¤ë¤È¡¢$_ ¤òɾ²Á¤·¤Þ¤¹¡£
¤³¤Î·Á¤Ï¼ç¤Ë EXPR ¤Î¥Æ¥¥¹¥È¤Î¥Ñ¡¼¥¹¤È¼Â¹Ô¤ò¼Â¹Ô»þ¤Ë¤Þ¤Ç
Ãٱ䤵¤»¤ë¤Î¤ËÍѤ¤¤Þ¤¹¡£
ÂèÆó¤Î·Á¼°¤Ç¤Ï¡¢BLOCK ÆâÉô¤Î¥³¡¼¥É¤Ï°ìÅÙ¤À¤±¥Ñ¡¼¥¹¤µ¤ì -- ¥³¡¼¥É¤ò
°Ï¤à eval ¼«¿È¤¬¥Ñ¡¼¥¹¤µ¤ì¤ë¤Î¤ÈƱ¤¸»þÅÀ¤Ç¤¹ -- ¸½ºß¤Î Perl ¥×¥í¥°¥é¥à¤Î
¥³¥ó¥Æ¥¥¹¥È¤Ç¼Â¹Ô¤µ¤ì¤Þ¤¹¡£
¤³¤Î·Á¼°¤Ïŵ·¿Åª¤Ë¤ÏÂè°ì¤Î·Á¼°¤è¤ê¸úΨŪ¤ËÎã³°¤ò¥È¥é¥Ã¥×¤·¤Þ¤¹(¸å½Ò)¡£
¤Þ¤¿ BLOCK ÆâÉô¤Î¥³¡¼¥É¤Ï¥³¥ó¥Ñ¥¤¥ë»þ¤Ë¥Á¥§¥Ã¥¯¤µ¤ì¤ë¤È¤¤¤¦ÍøÅÀ¤òÄ󶡤·¤Þ¤¹¡£
ºÇ¸å¤Î¥»¥ß¥³¥í¥ó¤Ï¡¢¤â¤·¤¢¤ì¤Ð¡¢EXPR ¤ÎÃͤä BLOCK ¤ÎÃæ¿È¤«¤é¾Ê¤¯¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
¤É¤Á¤é¤Î·Á¼°¤Ç¤â¡¢ÊÖ¤µ¤ì¤ëÃÍ¤Ï¥ß¥Ë¥×¥í¥°¥é¥à¤ÎÆâÉô¤ÇºÇ¸å¤Ëɾ²Á¤µ¤ì¤¿
ɽ¸½¤ÎÃͤǤ¹; ¥µ¥Ö¥ë¡¼¥Á¥ó¤ÈƱÍÍ¡¢return ʸ¤â»È¤¨¤Þ¤¹¡£
ÊÖ¤êÃͤȤ·¤ÆÄ󶡤µ¤ì¤ëɽ¸½¤Ï¡¢eval ¼«¿È¤Î¥³¥ó¥Æ¥¥¹¥È¤Ë°Í¸¤·¤Æ
̵¸ú¡¦¥¹¥«¥é¡¦¥ê¥¹¥È¤Î¤¤¤º¤ì¤«¤Î¥³¥ó¥Æ¥¥¹¥È¤Çɾ²Á¤µ¤ì¤Þ¤¹¡£
ɾ²Á¥³¥ó¥Æ¥¥¹¥È¤Î·èÄêÊýË¡¤Ë¤Ä¤¤¤Æ¤Î¾ÜºÙ¤Ï wantarray ¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£
¹½Ê¸¥¨¥é¡¼¤ä¼Â¹Ô¥¨¥é¡¼¤¬È¯À¸¤¹¤ë¤«¡¢die ʸ¤¬¼Â¹Ô¤µ¤ì¤ë¤È¡¢
eval ¤ÎÃͤȤ·¤ÆÌ¤ÄêµÁÃͤ¬ÊÖ¤µ¤ì¡¢$@ ¤Ë¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸¤¬ÀßÄꤵ¤ì¤Þ¤¹¡£
¥¨¥é¡¼¤¬¤Ê¤±¤ì¤Ð¡¢$@ ¤Ï¡¢¶õʸ»úÎó¤Ç¤¢¤ë¤³¤È¤¬Êݾڤµ¤ì¤Þ¤¹¡£¡¡
eval ¤ò¡¢STDERR ¤Ë·Ù¹ð¥á¥Ã¥»¡¼¥¸¤òɽ¼¨¤µ¤»¤Ê¤¤ÌÜۤ䡢
·Ù¹ð¥á¥Ã¥»¡¼¥¸¤ò $@ ¤Ë³ÊǼ¤¹¤ëÌÜŪ¤Ç¤Ï»È¤ï¤Ê¤¤¤Ç¤¯¤À¤µ¤¤¡£
¤½¤Î¤è¤¦¤ÊÍÑÅӤǤϡ¢$SIG{__WARN__} µ¡Ç½¤ò»È¤¦¤«¡¢
no warnings 'all' ¤ò»È¤Ã¤Æ BLOCK ¤« EXPR ¤ÎÆâÉô¤Ç¤Î·Ù¹ð¤ò
¥ª¥Õ¤Ë¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
warn, perlvar, warnings, perllexwarn ¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£
eval ¤Ï¡¢Ã×̿Ū¥¨¥é¡¼¤È¤Ê¤ë¤è¤¦¤Ê¤â¤Î¤ò¥È¥é¥Ã¥×¤¹¤ë¤³¤È¤¬¤Ç¤¤Þ¤¹¤«¤é¡¢
(socket ¤ä symlink ¤È¤¤¤Ã¤¿) ÆÃÄê¤Îµ¡Ç½¤¬¼ÂÁõ¤µ¤ì¤Æ¤¤¤ë¤«¤ò¡¢
Ä´¤Ù¤ë¤¿¤á¤Ë»È¤¦¤³¤È¤¬¤Ç¤¤ë¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£
die ±é»»»Ò¤¬Îã³°¤òȯÀ¸¤µ¤»¤ë¤â¤Î¤È¤¹¤ì¤Ð¡¢
¤³¤ì¤Ï¤Þ¤¿¡¢Perl ¤ÎÎã³°Ê᪵¡Ç½¤Èª¤¨¤ë¤³¤È¤â¤Ç¤¤Þ¤¹¡£
¼Â¹Ô¤¹¤ë¥³¡¼¥É¤¬ÊѤï¤é¤Ê¤¤¤Î¤Ç¤¢¤ì¤Ð¡¢Ëè²ó¿Î̤κƥ³¥ó¥Ñ¥¤¥ë¤¹¤ë¤³¤È¤Ê¤·¤Ë¡¢ ¼Â¹Ô»þ¥¨¥é¡¼¤Î¥È¥é¥Ã¥×¤ò¹Ô¤Ê¤¦¤¿¤á¤Ë¡¢ eval-BLOCK ·Á¼°¤ò»È¤¦¤³¤È¤¬¤Ç¤¤Þ¤¹¡£ ¥¨¥é¡¼¤¬¤¢¤ì¤Ð¡¢¤ä¤Ï¤ê $@ ¤ËÊÖ¤µ¤ì¤Þ¤¹¡£ Îã:
# make divide-by-zero nonfatal
eval { $answer = $a / $b; }; warn $@ if $@;
# same thing, but less efficient
eval '$answer = $a / $b'; warn $@ if $@;
# a compile-time error
eval { $answer = }; # WRONG
# a run-time error
eval '$answer ='; # sets $@
eval{} ·Á¼°¤ò¥é¥¤¥Ö¥é¥ê¤ÎÎã³°¤òÊ᪤¹¤ë¤¿¤á¤Ë»È¤¦¤È¤¤Ë¤Ï
ÌäÂ꤬¤¢¤ê¤Þ¤¹¡£
¸½ºß¤Î __DIE__ ¥Õ¥Ã¥¯¤Î¾õÂ֤Ϥۤܳμ¤˲õ¤ì¤Æ¤¤¤ë¤È¤¤¤¦Íýͳ¤Ç¡¢
¥æ¡¼¥¶¡¼¤Î¥³¡¼¥É¤¬ÀßÄꤷ¤¿ __DIE__ ¥Õ¥Ã¥¯¤ò¼Â¹Ô¤·¤¿¤¯¤Ê¤¤¤«¤â¤·¤ì¤Þ¤»¤ó¡£
¤³¤ÎÌÜŪ¤Ë¤Ï°Ê²¼¤ÎÎã¤Î¤è¤¦¤Ë¡¢local $SIG{__DIE__} ¹½Â¤¤¬»È¤¨¤Þ¤¹¡£
# a very private exception trap for divide-by-zero
eval { local $SIG{'__DIE__'}; $answer = $a / $b; };
warn $@ if $@;
¤³¤ì¤ÏÆÃ¤Ë¸²Ãø¤Ç¤¹¡£Í¿¤¨¤é¤ì¤¿ __DIE__ ¥Õ¥Ã¥¯¤Ï die ¤ò¤â¤¦°ìÅÙ
¸Æ¤Ó½Ð¤¹¤³¤È¤¬¤Ç¤¡¢¤³¤ì¤Ë¤è¤Ã¤Æ¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸¤òÊѤ¨¤ë¸ú²Ì¤¬¤¢¤ê¤Þ¤¹:
# __DIE__ hooks may modify error messages
{
local $SIG{'__DIE__'} =
sub { (my $x = $_[0]) =~ s/foo/bar/g; die $x };
eval { die "foo lives here" };
print $@ if $@; # prints "bar lives here"
}
¤³¤ì¤Ïµ÷Î¥¤ÎÎ¥¤ì¤¿¹Ôư¤Ç¤¢¤ë¤¿¤á¡¢¤³¤Îľ´¶Åª¤Ç¤Ê¤¤¿¶¤ëÉñ¤¤¤Ï ¾Íè¤Î¥ê¥ê¡¼¥¹¤Ç¤Ï½¤Àµ¤µ¤ì¤ë¤«¤â¤·¤ì¤Þ¤»¤ó¡£
eval ¤Ç¤Ï¡¢°Ê²¼¤Î¤è¤¦¤Ê¾ì¹ç¤Ë¡¢
²¿¤¬Ä´¤Ù¤é¤ì¤ë¤«¤ËÆÃ¤ËÃí°Õ¤·¤Æ¤ª¤¯¤³¤È¤¬É¬ÍפǤ¹:
eval $x; # CASE 1
eval "$x"; # CASE 2
eval '$x'; # CASE 3
eval { $x }; # CASE 4
eval "\$$x++"; # CASE 5
$$x++; # CASE 6
¾åµ¤Î CASE 1 ¤È CASE 2 ¤Îưºî¤ÏƱ°ì¤Ç¡¢ÊÑ¿ô $x Æâ¤Î
¥³¡¼¥É¤ò¼Â¹Ô¤·¤Þ¤¹¡£
(¤¿¤À¤·¡¢CASE 2 ¤Ç¤Ï¡¢É¬ÍפΤʤ¤¥À¥Ö¥ë¥¯¥©¡¼¥È¤Ë¤è¤Ã¤Æ¡¢
ÆÉ¤à¿Í¤¬²¿¤¬µ¯¤³¤ë¤«º®Í𤹤뤳¤È¤Ç¤·¤ç¤¦ (²¿¤âµ¯¤³¤ê¤Þ¤»¤ó¤¬)¡£)
ƱÍÍ¤Ë CASE 3 ¤È CASE 4 ¤Îưºî¤âÅù¤·¤¯¡¢$x ¤ÎÃͤòÊÖ¤¹°Ê³°¤Ë
²¿¤â¤·¤Ê¤¤ $x ¤È¤¤¤¦¥³¡¼¥É¤ò¼Â¹Ô¤·¤Þ¤¹
(½ã¿è¤Ë¸«¤¿ÌܤÎÌäÂê¤Ç¡¢CASE 4 ¤¬¹¥¤Þ¤ì¤Þ¤¹¤¬¡¢
¼Â¹Ô»þ¤Ç¤Ê¤¯¥³¥ó¥Ñ¥¤¥ë»þ¤Ë¥³¥ó¥Ñ¥¤¥ë¤µ¤ì¤ë¤È¤¤¤¦ÍøÅÀ¤â¤¢¤ê¤Þ¤¹)¡£
CASE 5 ¤Î¾ì¹ç¤Ï¡¢Ä̾ï¥À¥Ö¥ë¥¯¥©¡¼¥È¤ò»ÈÍѤ·¤Þ¤¹¡£
¤³¤Î¾õ¶·¤ò½ü¤±¤Ð¡¢CASE 6 ¤Î¤è¤¦¤Ë¡¢Ã±¤Ë
¥·¥ó¥Ü¥ê¥Ã¥¯¥ê¥Õ¥¡¥ì¥ó¥¹¤ò»È¤¨¤ÐÎɤ¤¤Ç¤·¤ç¤¦¡£
eval BLOCK ¤Ï¥ë¡¼¥×¤È¤·¤Æ °·¤ï¤ì¤Þ¤»¤ó¡£
½¾¤Ã¤Æ¡¢next, last, redo ¤È¤¤¤Ã¤¿¥ë¡¼¥×À©¸æÊ¸¤Ç¥Ö¥í¥Ã¥¯¤«¤éÎ¥¤ì¤¿¤ê
ºÆ¼Â¹Ô¤·¤¿¤ê¤Ï¤Ç¤¤Þ¤»¤ó¡£
¤È¤Æ¤âÆÃ¼ì¤Ê¾ì¹ç¤È¤·¤Æ¡¢DB ¥Ñ¥Ã¥±¡¼¥¸Æâ¤Ç eval '' ¤ò¼Â¹Ô¤¹¤ë¤È¡¢
Ä̾ï¤Î¥ì¥¥·¥«¥ë¥¹¥³¡¼¥×¤Ç¤Ï¤Ê¤¯¡¢¤³¤ì¤ò¸Æ¤Ó½Ð¤·¤¿ºÇ½é¤ÎÈó DB ¥³¡¼¥ÉÊÒ¤Î
¥¹¥³¡¼¥×¤Ë¤Ê¤ê¤Þ¤¹¡£
Perl ¥Ç¥Ð¥Ã¥¬¤ò½ñ¤¤¤Æ¤¤¤ë¤Î¤Ç¤Ê¤¤¸Â¤ê¡¢ÉáÄ̤Ϥ³¤ì¤Ë¤Ä¤¤¤Æ¿´ÇÛ¤¹¤ëɬÍפÏ
¤¢¤ê¤Þ¤»¤ó¡£
exec ´Ø¿ô¤Ï¡¢¥·¥¹¥Æ¥à¤Î¥³¥Þ¥ó¥É¤ò¼Â¹Ô¤·¡¢Ìá¤Ã¤Æ¤Ï¤¤Þ¤»¤ó¡£
Ìá¤Ã¤ÆÍߤ·¤¤¾ì¹ç¤Ë¤Ï¡¢exec¤Ç¤Ï¤Ê¤¯ system ´Ø¿ô¤ò»È¤Ã¤Æ¤¯¤À¤µ¤¤¡£
¥³¥Þ¥ó¥É¤¬Â¸ºß¤»¤º¡¢¤·¤«¤â ¥·¥¹¥Æ¥à¤Î¥³¥Þ¥ó¥É¥·¥§¥ë·Ðͳ¤Ç¤Ê¤¯
ľÀÜ¥³¥Þ¥ó¥É¤ò¼Â¹Ô¤·¤è¤¦¤È¤·¤¿¾ì¹ç¤Ë¤Î¤ß¤³¤Î´Ø¿ô¤Ï¼ºÇÔ¤·¤Æµ¶¤òÊÖ¤·¤Þ¤¹¡£
system ¤ÎÂå¤ï¤ê¤Ë exec ¤ò»È¤¦¤È¤¤¤¦¤è¤¯¤¢¤ë´Ö°ã¤¤¤òËɤ°¤¿¤á¤Ë¡¢
°ú¤Â³¤¯Ê¸¤¬ die, warn, exit(-w ¤¬¥»¥Ã¥È¤µ¤ì¤Æ¤¤¤ë¾ì¹ç -
¤Ç¤â¤¤¤Ä¤â¥»¥Ã¥È¤·¤Æ¤Þ¤¹¤è¤Í) °Ê³°¤Î¾ì¹ç¡¢Perl ¤Ï·Ù¹ð¤ò½Ð¤·¤Þ¤¹¡£
¤â¤· ËÜÅö¤Ë exec ¤Î¸å¤Ë¾¤Îʸ¤ò½ñ¤¤¿¤¤¾ì¹ç¡¢
°Ê²¼¤Î¤É¤Á¤é¤«¤Î¥¹¥¿¥¤¥ë¤ò»È¤¦¤³¤È¤Ç·Ù¹ð¤ò²óÈò¤Ç¤¤Þ¤¹:
exec ('foo') or print STDERR "couldn't exec foo: $!";
{ exec ('foo') }; print STDERR "couldn't exec foo: $!";
LIST ¤ËÊ£¿ô¤Î°ú¿ô¤¬¤¢¤ë¾ì¹ç¤«¡¢LIST ¤¬Ê£¿ô¤ÎÃͤò»ý¤Ä
ÇÛÎó¤Î¾ì¹ç¤Ë¤Ï¡¢LIST ¤Î°ú¿ô¤ò»È¤Ã¤Æ¡¢execvp(3) ¤ò¸Æ¤Ó½Ð¤·¤Þ¤¹¡£
1 ¤Ä¤Î¥¹¥«¥é°ú¿ô¤Î¤ß¤Þ¤¿¤ÏÍ×ÁǤ¬ 1 ¤Ä¤ÎÇÛÎó¤Î¾ì¹ç¤Ë¤Ï¡¢¤½¤Î°ú¿ô¤«¤é
¥·¥§¥ë¤Î¥á¥¿Ê¸»ú¤ò¥Á¥§¥Ã¥¯¤·¡¢¤â¤·¡¢¥á¥¿Ê¸»ú¤¬¤¢¤ì¤Ð¡¢
°ú¿ôÁ´ÂΤò¥·¥¹¥Æ¥à¤Î¥³¥Þ¥ó¥É¥·¥§¥ë(¤³¤ì¤ÏUnix ¤Ç¤Ï
/bin/sh -c ¤Ç¤¹¤¬¡¢¥·¥¹¥Æ¥à¤Ë¤è¤Ã¤Æ°Û¤Ê¤ê¤Þ¤¹)¤ËÅϤ·¤Æ²òÀϤµ¤»¤Þ¤¹¡£
¤â¤·¡¢¥á¥¿¥¥ã¥é¥¯¥¿¤¬¤Ê¤±¤ì¤Ð¡¢¤½¤Î°ú¿ô¤òñ¸ì¤Ëʬ¤±¡¢
¤è¤ê¸úΨŪ¤Ê execvp ¤ËľÀÜÅϤ·¤Þ¤¹¡£
Îã:
exec '/bin/echo', 'Your arguments are: ', @ARGV;
exec "sort $outfile | uniq";
Âè°ì°ú¿ô¤Ë»ØÄꤹ¤ë¤â¤Î¤òËÜÅö¤Ë¼Â¹Ô¤·¤¿¤¤¤¬¡¢¼Â¹Ô¤¹¤ë ¥×¥í¥°¥é¥à¤ËÂФ·¤ÆÊ̤Î̾Á°¤ò¶µ¤¨¤¿¤¤¾ì¹ç¤Ë¤Ï¡¢LIST¤ÎÁ°¤Ë¡¢ ¡Ö´ÖÀÜ¥ª¥Ö¥¸¥§¥¯¥È¡×(¥³¥ó¥Þ¤Ê¤·) ¤È¤·¤Æ¡¢¼ÂºÝ¤Ë ¼Â¹Ô¤·¤¿¤¤¥×¥í¥°¥é¥à¤ò»ØÄꤹ¤ë¤³¤È¤¬¤Ç¤¤Þ¤¹¡£ (¤³¤ì¤Ë¤è¤Ã¤Æ¡¢LIST ¤Ëñ°ì¤Î¥¹¥«¥é¤·¤«¤Ê¤¯¤Æ¤â¡¢Ê£¿ô ÃͤΥꥹ¥È¤Ç¤¢¤ë¤è¤¦¤Ë¡¢LIST ¤Î²ò¼á¤ò¹Ô¤Ê¤¤¤Þ¤¹¡£) Îã:
$shell = '/bin/csh';
exec $shell '-sh'; # pretend it's a login shell
¤¢¤ë¤¤¤Ï¡¢¤è¤êľÀÜŪ¤Ë¡¢
exec {'/bin/csh'} '-sh'; # pretend it's a login shell
°ú¿ô¤¬¥·¥¹¥Æ¥à¥·¥§¥ë¤Ç¼Â¹Ô¤µ¤ì¤ë¤È¤¡¢·ë²Ì¤Ï¥·¥§¥ë¤Î´ñÊʤÈǽÎϤˤè¤Ã¤Æ ÊѤï¤ê¤Þ¤¹¡£ ¾ÜºÙ¤Ë¤Ä¤¤¤Æ¤Ï `STRING` in perlop ¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£
exec ¤ä system ¤Ç´ÖÀÜ¥ª¥Ö¥¸¥§¥¯¥È¤ò»È¤¦¤Î¤â¤è¤ê°ÂÁ´¤Ç¤¹¡£
¤³¤Î»È¤¤Êý(system() ¤Ç¤âƱÍͤˤ¦¤Þ¤¯Æ°¤¤Þ¤¹)¤Ï¡¢¤¿¤È¤¨°ú¿ô¤¬°ì¤Ä¤À¤±¤Î
¾ì¹ç¤â¡¢Ê£¿ô¤ÎÃͤò»ý¤Ä¥ê¥¹¥È¤È¤·¤Æ°ú¿ô¤ò²ò¼á¤¹¤ë¤³¤È¤ò¶¯À©¤·¤Þ¤¹¡£
¤³¤ÎÊýË¡¤Ç¡¢¥·¥§¥ë¤Ë¤è¤ë¥ï¥¤¥ë¥É¥«¡¼¥ÉŸ³«¤ä¡¢¶õÇò¤Ë¤è¤ëñ¸ì¤Îʬ³ä¤«¤é
¼é¤é¤ì¤Þ¤¹¡£
@args = ( "echo surprise" );
exec @args; # subject to shell escapes
# if @args == 1
exec { $args[0] } @args; # safe even with one-arg list
´ÖÀÜ¥ª¥Ö¥¸¥§¥¯¥È¤Ê¤·¤Î°ì¤ÄÌܤΥС¼¥¸¥ç¥ó¤Ç¤Ï¡¢echo ¥×¥í¥°¥é¥à¤¬¼Â¹Ô¤µ¤ì¡¢
"surprise" ¤¬°ú¿ô¤È¤·¤ÆÅϤµ¤ì¤Þ¤¹¡£
Æó¤ÄÌܤΥС¼¥¸¥ç¥ó¤Ç¤Ï°ã¤¤¤Þ¤¹ -- ʸ»úÄ̤ê "echo surprise" ¤È¤¤¤¦Ì¾Á°¤Î
¥×¥í¥°¥é¥à¤ò¼Â¹Ô¤·¤è¤¦¤È¤·¤Æ¡¢¸«¤Ä¤«¤é¤Ê¤¤¤Î¤Ç¡¢¼ºÇÔ¤·¤¿¤³¤È¤ò¼¨¤¹¤¿¤á¤Ë
$? ¤ËÈó 0 ¤¬¥»¥Ã¥È¤µ¤ì¤Þ¤¹¡£
v5.6.0 ¤«¤é¡¢Perl ¤Ï exec ¤ÎÁ°¤Ë½ÐÎÏÍѤ˳«¤«¤ì¤Æ¤¤¤ëÁ´¤Æ¤Î¥Õ¥¡¥¤¥ë¤ò
¥Õ¥é¥Ã¥·¥å¤·¤è¤¦¤È¤·¤Þ¤¹¤¬¡¢¤³¤ì¤ËÂбþ¤·¤Æ¤¤¤Ê¤¤¥×¥é¥Ã¥È¥Õ¥©¡¼¥à¤â¤¢¤ê¤Þ¤¹
(perlport ¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤)¡£
°ÂÁ´¤Î¤¿¤á¤Ë¤Ï¡¢½ÐÎϤ¬½ÅÊ£¤¹¤ë¤Î¤òÈò¤±¤ë¤¿¤á¤Ë¡¢Á´¤Æ¤Î¥ª¡¼¥×¥ó¤·¤Æ¤¤¤ë
¥Ï¥ó¥É¥ë¤ËÂФ·¤Æ $| (English ¥â¥¸¥å¡¼¥ë¤Ç¤Ï $AUTOFLUSH) ¤òÀßÄꤹ¤ë¤«¡¢
IO::Handle ¥â¥¸¥å¡¼¥ë¤Î autoflush() ¥á¥½¥Ã¥É¤ò¤ò¸Æ¤ÖɬÍפ¬
¤¢¤ë¤«¤â¤·¤ì¤Þ¤»¤ó¡£
exec ¤Ï END ¥Ö¥í¥Ã¥¯¤ä¡¢¥ª¥Ö¥¸¥§¥¯¥È¤Î DESTROY ¥á¥½¥Ã¥É¤ò
¸Æ¤Ó½Ð¤µ¤Ê¤¤¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£
¥Ï¥Ã¥·¥åÍ×ÁǤ«ÇÛÎóÍ×ÁǤò¼¨¤¹É½¸½¤¬Í¿¤¨¤é¤ì¡¢ »ØÄꤵ¤ì¤¿Í×ÁǤ¬¡¢¥Ï¥Ã¥·¥å¤«ÇÛÎó¤Ë¸ºß¤¹¤ì¤Ð¡¢ ¤¿¤È¤¨Âбþ¤¹¤ë value ¤¬Ì¤ÄêµÁ¤Ç¤â¿¿¤òÊÖ¤·¤Þ¤¹¡£ Í×ÁǤ¬Â¸ºß¤·¤Ê¤«¤Ã¤¿¾ì¹ç¤Ï¼«Æ°³èÀ²½¤µ¤ì¤Þ¤»¤ó¡£
print "Exists\n" if exists $hash{$key};
print "Defined\n" if defined $hash{$key};
print "True\n" if $hash{$key};
print "Exists\n" if exists $array[$index];
print "Defined\n" if defined $array[$index];
print "True\n" if $array[$index];
¥Ï¥Ã¥·¥å¤Þ¤¿¤ÏÇÛÎóÍ×ÁǤϡ¢ÄêµÁ¤µ¤ì¤Æ¤¤¤ë¤È¤¤Ë¤Î¤ß¿¿¤È¤Ê¤ê¡¢ ¸ºß¤·¤Æ¤¤¤ë¤È¤¤Ë¤Î¤ßÄêµÁ¤µ¤ì¤Þ¤¹¤¬¡¢µÕ¤Ïɬ¤º¤·¤â¿¿¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£
°ú¿ô¤È¤·¤Æ¥µ¥Ö¥ë¡¼¥Á¥ó¤Î̾Á°¤¬»ØÄꤵ¤ì¤¿¾ì¹ç¡¢
»ØÄꤵ¤ì¤¿¥µ¥Ö¥ë¡¼¥Á¥ó¤¬Àë¸À¤µ¤ì¤Æ¤¤¤ì¤Ð(¤¿¤È¤¨Ì¤ÄêµÁ¤Ç¤â)
¿¿¤òÊÖ¤·¤Þ¤¹¡£
exists ¤ä defined ¤Î¤¿¤á¤Ë¸ÀµÚ¤µ¤ì¤Æ¤¤¤ë¥µ¥Ö¥ë¡¼¥Á¥ó̾¤Ï
Àë¸À¤È¤·¤Æ¤Î¥«¥¦¥ó¥È¤ËÆþ¤ê¤Þ¤»¤ó¡£
¸ºß¤·¤Ê¤¤¥µ¥Ö¥ë¡¼¥Á¥ó¤Ç¤â¸Æ¤Ó½Ð¤·²Äǽ¤«¤â¤·¤ì¤Ê¤¤¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤:
¥Ñ¥Ã¥±¡¼¥¸¤¬ AUTOLOAD ¥á¥½¥Ã¥É¤ò»ý¤Ã¤Æ¤¤¤Æ¡¢ºÇ½é¤Ë¸Æ¤Ó½Ð¤µ¤ì¤¿»þ¤Ë
¸ºß¤òºî¤ê½Ð¤¹¤«¤â¤·¤ì¤Þ¤»¤ó -- perlsub ¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£
print "Exists\n" if exists &subroutine;
print "Defined\n" if defined &subroutine;
ºÇ½ªÅª¤ÊÁàºî¤¬¥Ï¥Ã¥·¥å¤äÇÛÎó¤Î key ¤Ë¤è¤ë¸¡º÷¤Þ¤¿¤Ï¥µ¥Ö¥ë¡¼¥Á¥ó̾¤Ç¤¢¤ë¸Â¤ê¤Ï¡¢ EXPR ¤Ë¤ÏǤ°Õ¤ÎÊ£»¨¤Ê¼°¤òÃÖ¤¯¤³¤È¤¬¤Ç¤¤Þ¤¹:
if (exists $ref->{A}->{B}->{$key}) { }
if (exists $hash{A}{B}{$key}) { }
if (exists $ref->{A}->{B}->[$ix]) { }
if (exists $hash{A}{B}[$ix]) { }
if (exists &{$ref->{A}{B}{$key}}) { }
¥Í¥¹¥È¤·¤¿ÇÛÎó¤ä¥Ï¥Ã¥·¥å¤Î°ìÈÖ¿¼¤¤Éôʬ¤Ï¡¢¤½¤Î¸ºß¤ò¥Æ¥¹¥È¤·¤¿¤À¤±¤Ç¤Ï
¸ºß¤¹¤ë¤è¤¦¤Ë¤Ï¤Ê¤ê¤Þ¤»¤ó¤¬¡¢ÅÓÃæ¤Î¤â¤Î¤Ï¸ºß¤¹¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£
½¾¤Ã¤Æ $ref->{"A"} ¤È $ref->{"A"}->{"B"} ¤Ï¾åµ¤Î $key ¤Î
¸ºß¤ò¥Æ¥¹¥È¤·¤¿¤³¤È¤Ë¤è¤Ã¤ÆÂ¸ºß¤¹¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£
¤³¤ì¤Ï¡¢Ìð°õ±é»»»Ò¤¬»È¤ï¤ì¤ë¤È¤³¤í¤Ç¤Ï¡¢°Ê²¼¤Î¤è¤¦¤Ê¤â¤Î¤ò´Þ¤à¤É¤³¤Ç¤Ç¤â
µ¯¤³¤ê¤Þ¤¹¡£
undef $ref;
if (exists $ref->{"Some key"}) { }
print $ref; # prints HASH(0x80d3d5c)
°ìÌܸ«¤¿¤À¤±¤Ç¤Ï -- ¤¢¤ë¤¤¤ÏÆóÌܸ«¤Æ¤â -- ¶Ã¤«¤µ¤ì¤ë¡¢º¸ÊÕÃÍ¥³¥ó¥Æ¥¥¹¥È¤Ç¤Î ¼«Æ°Í¸ú²½¤Ï¾Íè¤Î¥ê¥ê¡¼¥¹¤Ç¤Ï½¤Àµ¤µ¤ì¤ë¤Ç¤·¤ç¤¦¡£
exists() ¤Î°ú¿ô¤È¤·¤Æ¥µ¥Ö¥ë¡¼¥Á¥ó̾¤Ç¤Ê¤¯¥µ¥Ö¥ë¡¼¥Á¥ó¸Æ¤Ó½Ð¤·¤ò»È¤¦¤È¡¢
¥¨¥é¡¼¤Ë¤Ê¤ê¤Þ¤¹¡£
exists ⊂ # OK
exists &sub(); # Error
EXPR ¤òɾ²Á¤·¡¢Â¨ºÂ¤Ë¤½¤ÎÃͤò»ý¤Ã¤Æ½ªÎ»¤·¤Þ¤¹¡£ Îã:
$ans = <STDIN>;
exit 0 if $ans =~ /^[Xx]/;
die ¤â»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£
EXPR ¤¬¾Êά¤µ¤ì¤¿¾ì¹ç¤Ë¤Ï¡¢¥¹¥Æ¡¼¥¿¥¹¤ò 0 ¤È¤·¤Æ½ªÎ»¤·¤Þ¤¹¡£
EXPR ¤ÎÃͤȤ·¤Æ¹¤¯ÍøÍѲÄǽ¤Ê¤Î¤Ï 0 ¤¬À®¸ù¤Ç 1 ¤¬¥¨¥é¡¼¤È¤¤¤¦¤³¤È¤À¤±¤Ç¤¹¡£
¤½¤Î¾¤ÎÃͤϡ¢ Perl ¤¬¼Â¹Ô¤µ¤ì¤ë´Ä¶¤Ë¤è¤Ã¤Æ°Û¤Ê¤ë²ò¼á¤¬¤µ¤ì¤ë
²ÄǽÀ¤¬¤¢¤ê¤Þ¤¹¡£
Î㤨¤Ð¡¢sendmail ÅþÃå¥á¡¼¥ë¥Õ¥£¥ë¥¿¤«¤é 69 (EX_UNAVAILABLE) ¤Ç½ªÎ»¤¹¤ë¤È
¥á¡¼¥é¡¼¤Ï¥¢¥¤¥Æ¥à¤òÇÛ㤻¤º¤Ëº¹¤·Ìᤷ¤Þ¤¹¤¬¡¢
¤³¤ì¤Ï¤¤¤Ä¤Ç¤â¿¿¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£
狼¤¬È¯À¸¤·¤¿¥¨¥é¡¼¤ò¥È¥é¥Ã¥×¤·¤è¤¦¤È¹Í¤¨¤Æ¤¤¤ë²ÄǽÀ¤¬¤¢¤ë¾ì¹ç¤Ï¡¢
¥µ¥Ö¥ë¡¼¥Á¥ó¤ÎÃæÃÇ¤Ë exit ¤ò»È¤ï¤Ê¤¤¤Ç¤¯¤À¤µ¤¤¡£
Âå¤ï¤ê¤Ë eval ¤Ç¥È¥é¥Ã¥×¤Ç¤¤ë die ¤ò»È¤Ã¤Æ¤¯¤À¤µ¤¤¡£
exit() ´Ø¿ô¤Ï¾ï¤Ëľ¤Á¤Ë½ªÎ»¤¹¤ë¤ï¤±¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£
¤Þ¤º¡¢ÄêµÁ¤µ¤ì¤Æ¤¤¤ë END ¥ë¡¼¥Á¥ó¤ò¸Æ¤Ó½Ð¤·¤Þ¤¹¤¬¡¢
END ¥ë¡¼¥Á¥ó¼«¿È¤Ï exit ¤ò»ß¤á¤é¤ì¤Þ¤»¤ó¡£
ƱÍͤˡ¢¸Æ¤Ó½Ð¤¹É¬ÍפΤ¢¤ë¥ª¥Ö¥¸¥§¥¯¥È¥Ç¥¹¥È¥é¥¯¥¿¤Ï
¤¹¤Ù¤Æ¡¢¼ÂºÝ¤Î½ªÎ»Á°¤Ë¸Æ¤Ó½Ð¤µ¤ì¤Þ¤¹¡£
¤³¤ì¤¬ÌäÂê¤Ë¤Ê¤ë¾ì¹ç¤Ï¡¢END ¤ä¥Ç¥¹¥È¥é¥¯¥¿¤¬¼Â¹Ô¤µ¤ì¤ë¤³¤È¤ò
Ëɤ°¤¿¤á¤Ë POSIX:_exit($status) ¤ò¸Æ¤Ó½Ð¤·¤Æ¤¯¤À¤µ¤¤¡£
¾Ü¤·¤¯¤Ï perlmod ¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£
e (¼«Á³Âпô¤ÎÄì) ¤Î EXPR ¾è¤òÊÖ¤·¤Þ¤¹¡£¡¡
EXPR ¤ò¾Êά¤·¤¿¾ì¹ç¤Ë¤Ï¡¢exp($_) ¤òÊÖ¤·¤Þ¤¹¡£
fcntl(2) ´Ø¿ô¤ò¼ÂÁõ¤·¤Þ¤¹¡£
Àµ¤·¤¤Äê¿ôÄêµÁ¤òÆÀ¤ë¤¿¤á¤Ë¡¢¤Þ¤º¡¢
use Fcntl;
¤È½ñ¤¯¤³¤È¤¬É¬ÍפǤ·¤ç¤¦¡£
°ú¿ô¤Î½èÍý¤ÈÊÖ¤êÃͤˤĤ¤¤Æ¤Ï¡¢²¼µ¤Î ioctl ¤ÈƱÍÍ¤ËÆ°ºî¤·¤Þ¤¹¡£
Îã:
use Fcntl;
fcntl($filehandle, F_GETFL, $packed_return_buffer)
or die "can't fcntl F_GETFL: $!";
fcntl ¤«¤é¤ÎÊÖ¤êÃͤΥÁ¥§¥Ã¥¯¤Ë defined ¤ò»È¤¦É¬ÍפϤ¢¤ê¤Þ¤»¤ó¡£
ioctl ¤È°ã¤Ã¤Æ¡¢fnctl ¤Ï¥·¥¹¥Æ¥à¥³¡¼¥ë¤Î·ë²Ì¤¬ 0 ¤À¤Ã¤¿¾ì¹ç¤Ï
"0 ¤À¤¬¿¿"¤òÊÖ¤·¤Þ¤¹¡£
¤³¤Îʸ»úÎó¤Ï¿¿µ¶ÃÍ¥³¥ó¥Æ¥¥¹¥È¤Ç¤Ï¿¿¤È¤Ê¤ê¡¢
¿ôÃÍ¥³¥ó¥Æ¥¥¹¥È¤Ç¤Ï 0 ¤Ë¤Ê¤ê¤Þ¤¹¡£
¤³¤ì¤Ï¤Þ¤¿¡¢ÉÔŬÀڤʿôÃÍÊÑ´¹¤Ë´Ø¤¹¤ëÄ̾ï¤Î -w ·Ù¹ð¤ò²óÈò¤·¤Þ¤¹¡£
fcntl(2) ¤¬¼ÂÁõ¤µ¤ì¤Æ¤¤¤Ê¤¤¥Þ¥·¥ó¤Ç¤Ï¡¢fcntl¤ÏÃ×̿Ū¥¨¥é¡¼¤ò
°ú¤µ¯¤³¤¹¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£
¥·¥¹¥Æ¥à¤Ç¤É¤Î´Ø¿ô¤¬ÍøÍѲÄǽ¤«¤Ë¤Ä¤¤¤Æ¤Ï Fcntl ¥â¥¸¥å¡¼¥ë¤ä
fcntl(2) man ¥Ú¡¼¥¸¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£
¤³¤ì¤Ï REMOTE ¤È¤¤¤¦¥Õ¥¡¥¤¥ë¥Ï¥ó¥É¥ë¤ò¥·¥¹¥Æ¥à¥ì¥Ù¥ë¤Ç
Èó¥Ö¥í¥Ã¥¯¥â¡¼¥É¤Ë¥»¥Ã¥È¤¹¤ëÎã¤Ç¤¹¡£
¤¿¤À¤·¡¢ $| ¤ò¼«Ê¬¤Ç´ÉÍý¤·¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£
use Fcntl qw(F_GETFL F_SETFL O_NONBLOCK);
$flags = fcntl(REMOTE, F_GETFL, 0)
or die "Can't get flags for the socket: $!\n";
$flags = fcntl(REMOTE, F_SETFL, $flags | O_NONBLOCK)
or die "Can't set flags for the socket: $!\n";
¥Õ¥¡¥¤¥ë¥Ï¥ó¥É¥ë¤ËÂФ¹¤ë¥Õ¥¡¥¤¥ëµ½Ò»Ò¤òÊÖ¤·¤Þ¤¹¡£
¥Õ¥¡¥¤¥ë¥Ï¥ó¥É¥ë¤¬¥ª¡¼¥×¥ó¤·¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ï̤ÄêµÁÃͤòÊÖ¤·¤Þ¤¹¡£
¤³¤ì¤Ï¼ç¤Ë select ¤äÄã¥ì¥Ù¥ë POSIX tty Áàºî¤ËÂФ¹¤ë¡¢¥Ó¥Ã¥È¥Þ¥Ã¥×¤ò
¹½À®¤¹¤ë¤È¤¤ËÊØÍø¤Ç¤¹¡£
FILEHANDLE ¤¬¼°¤Ç¤¢¤ì¤Ð¡¢
¤½¤ÎÃͤ¬´ÖÀÜ¥Õ¥¡¥¤¥ë¥Ï¥ó¥É¥ë(ÉáÄ̤Ï̾Á°)¤È¤·¤Æ»È¤ï¤ì¤Þ¤¹¡£
¤³¤ì¤ò¡¢Æó¤Ä¤Î¥Ï¥ó¥É¥ë¤¬Æ±¤¸¼±Ê̻Ҥò»²¾È¤·¤Æ¤¤¤ë¤«¤É¤¦¤«¤ò¸«¤Ä¤±¤ë¤Î¤Ë »È¤¨¤Þ¤¹:
if (fileno(THIS) == fileno(THAT)) {
print "THIS and THAT are dups\n";
}
(open ¤Î¿·µ¡Ç½¤Ë¤è¤Ã¤Æ¥á¥â¥ê¤ËÀܳ¤µ¤ì¤¿¥Õ¥¡¥¤¥ë¥Ï¥ó¥É¥ë¤Ï¡¢
³«¤¤¤Æ¤¤¤ë»þ¤Ç¤â̤ÄêµÁÃͤòÊÖ¤·¤Þ¤¹¡£)
FILEHANDLE ¤ËÂФ·¤Æ flock(2)¡¢¤Þ¤¿¤Ï¤½¤Î¥¨¥ß¥å¥ì¡¼¥·¥ç¥ó¤ò¸Æ¤Ó½Ð¤·¤Þ¤¹¡£
À®¸ù»þ¤Ë¤Ï¿¿¤ò¡¢¼ºÇÔ»þ¤Ë¤Ïµ¶¤òÊÖ¤·¤Þ¤¹¡£
flock(2), fcntl(2) ¥í¥Ã¥¯, lockf(3) ¤Î¤¤¤º¤ì¤«¤ò¼ÂÁõ¤·¤Æ¤¤¤Ê¤¤
¥Þ¥·¥ó¤Ç»È¤¦¤È¡¢Ã×̿Ū¥¨¥é¡¼¤¬È¯À¸¤·¤Þ¤¹¡£
flock ¤Ï Perl ¤Î°Ü¿¢À¤Î¤¢¤ë¥Õ¥¡¥¤¥ë¥í¥Ã¥¯¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Ç¤¹¡£
¤·¤«¤·¥ì¥³¡¼¥É¤Ç¤Ï¤Ê¤¯¡¢¥Õ¥¡¥¤¥ëÁ´ÂΤΤߤò¥í¥Ã¥¯¤·¤Þ¤¹¡£
ÌÀÇò¤Ç¤Ï¤Ê¤¤¤â¤Î¤Î¡¢ÅÁÅýŪ¤Ê flock ¤Îưºî¤È¤·¤Æ¤Ï¡¢¥í¥Ã¥¯¤¬ÆÀ¤é¤ì¤ë¤Þ¤Ç
̵¸Â¤ËÂÔ¤Á³¤±¤ë¤â¤Î¤È¡¢Ã±¤Ë´«¹ðŪ¤Ë ¥í¥Ã¥¯¤¹¤ë¤â¤Î¤ÎÆó¤Ä¤¬¤¢¤ê¤Þ¤¹¡£
¤³¤Î¤è¤¦¤Ê¼«Í³ºÛÎ̤Υí¥Ã¥¯¤Ï¤è¤ê½ÀÆð¤Ç¤¹¤¬¡¢Êݾ㤵¤ì¤ë¤â¤Î¤Ï¤è¤ê¾¯¤Ê¤¤¤Ç¤¹¡£
¤³¤ì¤Ï¡¢flock ¤ò»È¤ï¤Ê¤¤¥×¥í¥°¥é¥à¤¬ flock ¤Ç¥í¥Ã¥¯¤µ¤ì¤¿¥Õ¥¡¥¤¥ë¤ò
½ñ¤´¹¤¨¤ë¤«¤â¤·¤ì¤Ê¤¤¤³¤È¤ò°ÕÌ£¤·¤Þ¤¹¡£
¾ÜºÙ¤Ë¤Ä¤¤¤Æ¤Ï¡¢perlport¡¢¥·¥¹¥Æ¥à¸ÇͤΥɥ¥å¥á¥ó¥È¡¢¥·¥¹¥Æ¥à¸ÇͤÎ
¥í¡¼¥«¥ë¤Î man ¥Ú¡¼¥¸¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£
°Ü¿¢À¤Î¤¢¤ë¥×¥í¥°¥é¥à¤ò½ñ¤¯¾ì¹ç¤Ï¡¢ÅÁÅýŪ¤Ê¿¶¤ëÉñ¤¤¤ò²¾Äꤹ¤ë¤Î¤¬
¥Ù¥¹¥È¤Ç¤¹¡£
(¤·¤«¤·°Ü¿¢À¤Î¤Ê¤¤¥×¥í¥°¥é¥à¤ò½ñ¤¯¾ì¹ç¤Ï¡¢¼«¿È¤Î¥·¥¹¥Æ¥à¤ÎÀÊÊ(¤·¤Ð¤·¤Ð
¡Ö»ÅÍ͡פȸƤФì¤Þ¤¹)¤Ë¹ç¤ï¤»¤Æ½ñ¤¯¤³¤È¤â´°Á´¤Ë¼«Í³¤Ç¤¹¡£
ÌÕÌÜŪ¤Ë°Ü¿¢À¤Ë¸Ç¼¹¤¹¤ë¤³¤È¤Ç¡¢¤¢¤Ê¤¿¤Îºî¶È¤ò»Å¾å¤²¤ë¤Î¤ò¼ÙË⤹¤ë¤Ù¤¤Ç¤Ï
¤¢¤ê¤Þ¤»¤ó¡£)
OPERATION ¤Ï LOCK_SH, LOCK_EX, LOCK_UN ¤Î¤¤¤º¤ì¤«¤Ç¡¢LOCK_NB ¤È
ÁȤ߹ç¤ï¤µ¤ì¤ë¤³¤È¤â¤¢¤ê¤Þ¤¹¡£
¤³¤ì¤é¤ÎÄê¿ô¤ÏÅÁÅýŪ¤Ë¤Ï 1, 2, 8, 4 ¤ÎÃͤò»ý¤Á¤Þ¤¹¤¬¡¢Fcntl ¥â¥¸¥å¡¼¥ë¤«¤é
¥·¥ó¥Ü¥ë̾¤òÆÈΩ¤·¤Æ¥¤¥ó¥Ý¡¼¥È¤¹¤ë¤«¡¢ ':flock' ¥¿¥°¤ò»È¤¦¥°¥ë¡¼¥×¤È¤·¤Æ¡¢
¥·¥ó¥Ü¥ë̾¤ò¤ò»È¤¦¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
LOCK_SH ¤Ï¶¦Í¥í¥Ã¥¯¤òÍ׵ᤷ¡¢LOCK_EX ¤ÏÇÓ¾¥í¥Ã¥¯¤òÍ׵ᤷ¡¢LOCK_UN ¤Ï
Á°²óÍ׵ᤷ¤¿¥í¥Ã¥¯¤ò³«Êü¤·¤Þ¤¹¡£
LOCK_NB ¤È LOCK_SH ¤« LOCK_EX ¤¬¥Ó¥Ã¥Èñ°Ì¤ÎÏÀÍýϤµ¤ì¤ë¤È¡¢flock ¤Ï
¥í¥Ã¥¯¤ò¼èÆÀ¤¹¤ë¤Þ¤ÇÂԤĤΤǤϤʤ¯¡¢¤¹¤°¤ËÊÖ¤ê¤Þ¤¹(¥í¥Ã¥¯¤¬¼èÆÀ¤Ç¤¤¿¤«
¤É¤¦¤«¤ÏÊÖ¤êÃͤòÄ´¤Ù¤Þ¤¹)¡£
ÉÔ°ìÃפβÄǽÀ¤òÈò¤±¤ë¤¿¤á¤Ë¡¢Perl ¤Ï¥Õ¥¡¥¤¥ë¤ò¥í¥Ã¥¯¡¢¥¢¥ó¥í¥Ã¥¯¤¹¤ëÁ°¤Ë FILEHANDLE ¤ò¥Õ¥é¥Ã¥·¥å¤·¤Þ¤¹¡£
lockf(3) ¤ÇºîÀ®¤µ¤ì¤¿¥¨¥ß¥å¥ì¡¼¥·¥ç¥ó¤Ï¶¦Í¥í¥Ã¥¯¤òÄ󶡤»¤º¡¢
FILEHANDLE ¤¬½ñ¤¹þ¤ß¥â¡¼¥É¤Ç³«¤¤¤Æ¤¤¤ë¤³¤È¤òɬÍפȤ¹¤ë¤³¤È¤Ë
Ãí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£
¤³¤ì¤Ï lockf(3) ¤¬¼ÂÁõ¤·¤Æ¤¤¤ëưºî¤Ç¤¹¡£
¤·¤«¤·¡¢Á´¤Æ¤Ç¤Ï¤Ê¤¤¤Ë¤·¤Æ¤â¤Û¤È¤ó¤É¤Î¥·¥¹¥Æ¥à¤Ç¤Ï fcntl(2) ¤ò»È¤Ã¤Æ
lockf(3) ¤ò¼ÂÁõ¤·¤Æ¤¤¤ë¤Î¤Ç¡¢°Û¤Ê¤Ã¤¿Æ°ºî¤Ç¿¤¯¤Î¿Í¡¹¤òº®Í𤵤»¤ë¤³¤È¤Ï
¤Ê¤¤¤Ï¤º¤Ç¤¹¡£
flock(3) ¤Î fcntl(2) ¥¨¥ß¥å¥ì¡¼¥·¥ç¥ó¤Ï¡¢ LOCK_SH ¤ò»È¤¦¤¿¤á¤Ë¤Ï
FILEHANDLE ¤òÆÉ¤ß¹þ¤ß¤Ç³«¤¤¤Æ¤¤¤ëɬÍפ¬¤¢¤ê¡¢LOCK_EX ¤ò»È¤¦¤¿¤á¤Ë¤Ï
½ñ¤¹þ¤ß¤Ç³«¤¤¤Æ¤¤¤ëɬÍפ¬¤¢¤ë¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£
¥Í¥Ã¥È¥ï¡¼¥¯±Û¤·¤Ë¤Ï¥í¥Ã¥¯¤Ç¤¤Ê¤¤ flock ¤â¤¢¤ë¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤;
¤³¤Î¤¿¤á¤Ë¤Ï¡¢¤è¤ê¥·¥¹¥Æ¥à°Í¸¤Ê fcntl ¤ò»È¤¦É¬Íפ¬¤¢¤ê¤Þ¤¹¡£
Perl ¤Ë¥·¥¹¥Æ¥à¤Î flock(2) ´Ø¿ô¤ò̵»ë¤µ¤»¡¢¼«¿È¤Î fcntl(2) ¥Ù¡¼¥¹¤Î
¥¨¥ß¥å¥ì¡¼¥·¥ç¥ó¤ò»È¤¦¾ì¹ç¤Ï¡¢perl ¤òÀßÄꤹ¤ë¤È¤¤Ë Configure
¥×¥í¥°¥é¥à¤Ë -Ud_flock ¥ª¥×¥·¥ç¥ó¤òÅϤ·¤Æ¤¯¤À¤µ¤¤¡£
BSD ¥·¥¹¥Æ¥à¤Ç¤Î¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤Ø¤ÎÄɲýèÍý¤ÎÎã¤ò¼¨¤·¤Þ¤¹¡£
use Fcntl ':flock'; # import LOCK_* constants
sub lock {
flock(MBOX,LOCK_EX);
# and, in case someone appended
# while we were waiting...
seek(MBOX, 0, 2);
}
sub unlock {
flock(MBOX,LOCK_UN);
}
open(MBOX, ">>/usr/spool/mail/$ENV{'USER'}")
or die "Can't open mailbox: $!";
lock();
print MBOX $msg,"\n\n";
unlock();
¿¿¤Î flock() ¤ËÂбþ¤·¤Æ¤¤¤ë¥·¥¹¥Æ¥à¤Ç¤Ï¥í¥Ã¥¯¤Ï fork() ¤òÄ̤·¤Æ
·Ñ¾µ¤µ¤ì¤ë¤Î¤ËÂФ·¤Æ¡¢¤è¤êÉÔ°ÂÄê¤Ê fcntl() ¤ËÍê¤é¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¾ì¹ç¡¢
¥µ¡¼¥Ð¤ò½ñ¤¯¤Î¤Ï¤è¤êÆñ¤·¤¯¤Ê¤ê¤Þ¤¹¡£
¤½¤Î¾¤Î flock() ¤ÎÎã¤È¤·¤Æ¤Ï DB_File ¤â»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£
Ʊ¤¸¥×¥í¥°¥é¥à¤ÎƱ¤¸ÃÏÅÀ¤«¤é³«»Ï¤¹¤ë¿·¤·¤¤¥×¥í¥»¥¹¤òºîÀ®¤¹¤ë¤¿¤á¤Ë
¥·¥¹¥Æ¥à¥³¡¼¥ë fork(2) ¤ò¹Ô¤Ê¤¤¤Þ¤¹¡£
¿Æ¥×¥í¥»¥¹¤Ë¤Ï¡¢¥Á¥ã¥¤¥ë¥É¥×¥í¥»¥¹¤Î pid ¤ò¡¢
¥Á¥ã¥¤¥ë¥É¥×¥í¥»¥¹¤Ë 0 ¤òÊÖ¤·¤Þ¤¹¤¬¡¢
fork ¤Ë¼ºÇÔ¤·¤¿¤È¤¤Ë¤Ï¡¢undef¤òÊÖ¤·¤Þ¤¹¡£
¥Õ¥¡¥¤¥ëµ½Ò»Ò(¤ª¤è¤Óµ½Ò»Ò¤Ë´ØÏ¢¤¹¤ë¥í¥Ã¥¯)¤Ï¶¦Í¤µ¤ì¡¢
¤½¤Î¾¤ÎÁ´¤Æ¤Ï¥³¥Ô¡¼¤µ¤ì¤Þ¤¹¡£
fork() ¤ËÂбþ¤¹¤ë¤Û¤È¤ó¤É¤Î¥·¥¹¥Æ¥à¤Ç¤Ï¡¢
¤³¤ì¤ò¶Ë¤á¤Æ¸úΨŪ¤Ë¤¹¤ë¤¿¤á¤Ë¿Âç¤ÊÅØÎϤ¬Ê§¤ï¤ì¤Æ¤¤Þ¤·¤¿
(Î㤨¤Ð¡¢¥Ç¡¼¥¿¥Ú¡¼¥¸¤Ø¤Î copy-on-write ¥Æ¥¯¥Î¥í¥¸¡¼¤Ê¤É¤Ç¤¹)¡£
¤³¤ì¤Ï¤³¤³ 20 ǯ¤Ë¤ï¤¿¤ë¥Þ¥ë¥Á¥¿¥¹¥¯¤Ë´Ø¤¹¤ë¼çÍפʥѥé¥À¥¤¥à¤È¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£
v5.6.0 ¤«¤é¡¢Perl ¤Ï»Ò¥×¥í¥»¥¹¤ò fork ¤¹¤ëÁ°¤Ë½ÐÎÏÍѤ˥ª¡¼¥×¥ó¤·¤Æ¤¤¤ëÁ´¤Æ¤Î
¥Õ¥¡¥¤¥ë¤ò¥Õ¥é¥Ã¥·¥å¤·¤è¤¦¤È¤·¤Þ¤¹¤¬¡¢¤³¤ì¤ËÂбþ¤·¤Æ¤¤¤Ê¤¤¥×¥é¥Ã¥È¥Õ¥©¡¼¥à¤â
¤¢¤ê¤Þ¤¹(perlport ¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤)¡£
°ÂÁ´¤Î¤¿¤á¤Ë¤Ï¡¢½ÐÎϤ¬½ÅÊ£¤¹¤ë¤Î¤òÈò¤±¤ë¤¿¤á¤Ë¡¢
Á´¤Æ¤Î¥ª¡¼¥×¥ó¤·¤Æ¤¤¤ë¥Ï¥ó¥É¥ë¤ËÂФ·¤Æ $| (English ¥â¥¸¥å¡¼¥ë¤Ç¤Ï
$AUTOFLUSH) ¤òÀßÄꤹ¤ë¤«¡¢
IO::Handle ¥â¥¸¥å¡¼¥ë¤Î autoflush()¥á¥½¥Ã¥É¤ò¤ò¸Æ¤ÖɬÍפ¬
¤¢¤ë¤«¤â¤·¤ì¤Þ¤»¤ó¡£
¥Á¥ã¥¤¥ë¥É¥×¥í¥»¥¹¤Î½ªÎ»¤òÂÔ¤¿¤º¤Ë¡¢fork ¤ò·«¤êÊÖ¤»¤Ð¡¢
¥¾¥ó¥Ó¤ò¤¿¤á¤³¤à¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£
$SIG{CHLD} ¤Ë "IGNORE" ¤ò»ØÄꤹ¤ë¤³¤È¤Ç¤³¤ì¤ò²óÈò¤Ç¤¤ë¥·¥¹¥Æ¥à¤â¤¢¤ê¤Þ¤¹¡£
fork ¤È¾ÃÌǤ·¤«¤±¤Æ¤¤¤ë»Ò¥×¥í¥»¥¹¤ò²ó¼ý¤¹¤ë¤¿¤á¤Î¹¹¤Ê¤ëÎã¤Ë¤Ä¤¤¤Æ¤Ï
perlpc ¤â»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£
fork ¤·¤¿»Ò¥×¥í¥»¥¹¤¬ STDIN ¤ä STDOUT ¤È¤¤¤Ã¤¿¥·¥¹¥Æ¥à¥Õ¥¡¥¤¥ëµ½Ò»Ò¤ò ·Ñ¾µ¤¹¤ë¾ì¹ç¡¢(CGI ¥¹¥¯¥ê¥×¥È¤ä¥ê¥â¡¼¥È¥·¥§¥ë¤È¤¤¤Ã¤¿ ¥Ð¥Ã¥¯¥°¥é¥¦¥ó¥É¥¸¥ç¥Ö¤Î¤è¤¦¤Ê)¥ê¥â¡¼¥È¥µ¡¼¥Ð¤Ï¹Í¤¨Ä̤ê¤Ë ư¤«¤Ê¤¤¤Ç¤¢¤í¤¦¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£ ¤³¤Î¤è¤¦¤Ê¾ì¹ç¤Ç¤Ï¤³¤ì¤é¤ò /dev/null ¤È¤·¤ÆºÆ¥ª¡¼¥×¥ó¤¹¤ë¤Ù¤¤Ç¤¹¡£
write ´Ø¿ô¤Ç»È¤¦¥Ô¥¯¥Á¥ã¡¼¥Õ¥©¡¼¥Þ¥Ã¥È¤òÀë¸À¤·¤Þ¤¹¡£
Îã:
format Something =
Test: @<<<<<<<< @||||| @>>>>>
$str, $%, '$' . int($num)
.
$str = "widget";
$num = $cost/$quantity;
$~ = 'Something';
write;
¾ÜºÙ¤ÈÎã¤Ë¤Ä¤¤¤Æ¤Ï perlform ¤ò»²¾È¤·¤Æ²¼¤µ¤¤¡£
¤³¤ì¤Ï¡¢format ¤¬»ÈÍѤ¹¤ëÆâÉô´Ø¿ô¤Ç¤¹¤¬¡¢Ä¾ÀܸƤӽФ¹¤³¤È¤â¤Ç¤¤Þ¤¹¡£
¤³¤ì¤Ï¡¢PICTURE ¤ÎÆâÍÆ¤Ë¤·¤¿¤¬¤Ã¤Æ¡¢LIST ¤ÎÃͤòÀ°·Á¤· (perlform ¤ò
»²¾È¤·¤Æ¤¯¤À¤µ¤¤)¡¢·ë²Ì¤ò¥Õ¥©¡¼¥Þ¥Ã¥È½ÐÎÏ¥¢¥¥å¥à¥ì¡¼¥¿$^A
(English ¥â¥¸¥å¡¼¥ë¤Ç¤Ï $ACCUMULATOR) ¤ËǼ¤á¤Þ¤¹¡£
ºÇ½ªÅª¤Ë¡¢write ¤¬¼Â¹Ô¤µ¤ì¤ë¤È¡¢$^A ¤ÎÃæ¿È¤¬¡¢
²¿¤é¤«¤Î¥Õ¥¡¥¤¥ë¥Ï¥ó¥É¥ë¤Ë½ñ¤½Ð¤µ¤ì¤Þ¤¹¡£
¤Þ¤¿¡¢¼«Ê¬¤Ç $^A ¤òÆÉ¤ó¤Ç¡¢$^A ¤ÎÆâÍÆ¤ò "" ¤ËÌᤷ¤Æ¤â¤«¤Þ¤¤¤Þ¤»¤ó¡£
format ¤ÏÄ̾1 ¹Ô¤´¤È¤Ë formline ¤ò¹Ô¤Ê¤¤¤Þ¤¹¤¬¡¢
formline ´Ø¿ô¼«¿È¤Ï¡¢PICTURE ¤ÎÃæ¤Ë¤¤¤¯¤Ä¤Î²þ¹Ô¤¬Æþ¤Ã¤Æ¤¤¤ë¤«¤Ï¡¢
´Ø·¸¤¬¤¢¤ê¤Þ¤»¤ó¡£
¤³¤ì¤Ï¡¢~ ¤È ~~¥È¡¼¥¯¥ó¤Ï PICTURE Á´ÂΤò°ì¹Ô¤È¤·¤Æ°·¤¦¤³¤È¤ò°ÕÌ£¤·¤Þ¤¹¡£
½¾¤Ã¤Æ¡¢1 ¥ì¥³¡¼¥É¥Õ¥©¡¼¥Þ¥Ã¥È¤ò¼ÂÁõ¤¹¤ë¤¿¤á¤Ë¤Ï
¥Õ¥©¡¼¥Þ¥Ã¥È¥³¥ó¥Ñ¥¤¥é¤Î¤è¤¦¤ÊÊ£¿ô formline ¤ò»È¤¦É¬Íפ¬¤¢¤ê¤Þ¤¹¡£
¥À¥Ö¥ë¥¯¥©¡¼¥È¤Ç PICTURE ¤ò°Ï¤à¾ì¹ç¤Ë¤Ï¡¢@ ¤È¤¤¤¦Ê¸»ú¤¬
ÇÛÎó̾¤Î»Ï¤Þ¤ê¤È²ò¼á¤µ¤ì¤Þ¤¹¤Î¤Ç¡¢Ãí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£
formline ¤Ï¾ï¤Ë¿¿¤òÊÖ¤·¤Þ¤¹¡£
¤½¤Î¾¤ÎÎã¤Ë¤Ä¤¤¤Æ¤Ï perlform ¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£
FILEHANDLE ¤Ë¤Ä¤Ê¤¬¤ì¤Æ¤¤¤ëÆþÎÏ¥Õ¥¡¥¤¥ë¤«¤é¡¢¼¡¤Î°ìʸ»ú¤òÊÖ¤·¤Þ¤¹¡£
¥Õ¥¡¥¤¥ë¤ÎºÇ¸å¡¢¤Þ¤¿¤Ï¥¨¥é¡¼¤¬È¯À¸¤·¤¿¾ì¹ç¤Ï¡¢Ì¤ÄêµÁÃͤòÊÖ¤·¤Þ¤¹
(¸å¼Ô¤Î¾ì¹ç¤Ï $! ¤¬¥»¥Ã¥È¤µ¤ì¤Þ¤¹)¡£
FILEHANDLE ¤¬¾Êά¤µ¤ì¤¿¾ì¹ç¤Ë¤Ï¡¢STDIN ¤«¤éÆÉ¤ß¹þ¤ß¤ò¹Ô¤Ê¤¤¤Þ¤¹¡£
¤³¤ì¤ÏÆÃ¤Ë¸úΨŪ¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£
¤·¤«¤·¡¢¤³¤ì¤Ï¥æ¡¼¥¶¡¼¤¬¥ê¥¿¡¼¥ó¥¡¼¤ò²¡¤¹¤Î¤òÂԤĤ³¤È¤Ê¤¯
°ìʸ»ú¤òÆÉ¤ß¹þ¤àÍÑÅӤˤϻȤ¨¤Þ¤»¤ó¡£
¤½¤Î¤è¤¦¤Ê¾ì¹ç¤Ë¤Ï¡¢°Ê²¼¤Î¤è¤¦¤Ê¤â¤Î¤ò»î¤·¤Æ¸«¤Æ¤¯¤À¤µ¤¤:
if ($BSD_STYLE) {
system "stty cbreak </dev/tty >/dev/tty 2>&1";
}
else {
system "stty", '-icanon', 'eol', "\001";
}
$key = getc(STDIN);
if ($BSD_STYLE) {
system "stty -cbreak </dev/tty >/dev/tty 2>&1";
}
else {
system "stty", 'icanon', 'eol', '^@'; # ASCII null
}
print "\n";
$BSD_STYLE ¤ò¥»¥Ã¥È¤¹¤ë¤Ù¤¤«¤É¤¦¤«¤ò·èÄꤹ¤ëÊýË¡¤Ë¤Ä¤¤¤Æ¤Ï ÆÉ¼Ô¤Ø¤Î½ÉÂê¤È¤·¤Æ»Ä¤·¤Æ¤ª¤¤Þ¤¹¡£
POSIX::getattr ´Ø¿ô¤Ï POSIX ½àµò¤ò¼çÄ¥¤¹¤ë¥·¥¹¥Æ¥à¤Ç¤³¤ì¤ò
¤è¤ê°Ü¿¢À¤Î¤¢¤ë·Á¤Ç¹Ô¤¤¤Þ¤¹¡£
¤ª¶á¤¯¤Î CPAN ¥µ¥¤¥È¤«¤é Term::ReadKey ¥â¥¸¥å¡¼¥ë¤â»²¾È¤·¤Æ²¼¤µ¤¤;
CPAN ¤Ë´Ø¤¹¤ë¾ÜºÙ¤Ï CPAN in perlmodlib ¤Ë¤¢¤ê¤Þ¤¹¡£
¤³¤ì¤ÏƱ¤¸Ì¾Á°¤Î C ¥é¥¤¥Ö¥é¥ê´Ø¿ô¤ò¼ÂÁõ¤·¤Æ¤¤¤Æ¡¢ ¿¤¯¤Î¥·¥¹¥Æ¥à¤Ç¤Ï¡¢¤â¤·¤¢¤ì¤Ð¡¢/etc/utmp ¤«¤é¸½ºß¤Î¥í¥°¥¤¥ó̾¤òÊÖ¤·¤Þ¤¹¡£ ¥Ì¥ë¤Ç¤¢¤ì¤Ð¡¢getpwuid() ¤ò»È¤Ã¤Æ¤¯¤À¤µ¤¤¡£
$login = getlogin || getpwuid($<) || "Kilroy";
getlogin ¤òǧ¾Ú¤Ë»È¤Ã¤Æ¤Ï¤¤¤±¤Þ¤»¤ó¡£
¤³¤ì¤Ï getpwuid ¤Î¤è¤¦¤Ë°ÂÁ´¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£
SOCKET ¥³¥Í¥¯¥·¥ç¥ó¤Î¸þ¤³¤¦Â¦¤Î¥Ñ¥Ã¥¯¤µ¤ì¤¿ aockaddr ¥¢¥É¥ì¥¹¤òÊÖ¤·¤Þ¤¹¡£
use Socket;
$hersockaddr = getpeername(SOCK);
($port, $iaddr) = sockaddr_in($hersockaddr);
$herhostname = gethostbyaddr($iaddr, AF_INET);
$herstraddr = inet_ntoa($iaddr);
»ØÄꤵ¤ì¤¿ PID ¤Î¸½ºß¤Î¥×¥í¥»¥¹¥°¥ë¡¼¥×¤òÊÖ¤·¤Þ¤¹¡£
PID ¤Ë 0 ¤òÍ¿¤¨¤ë¤È¥«¥ì¥ó¥È¥×¥í¥»¥¹¤Î»ØÄê¤È¤Ê¤ê¤Þ¤¹¡£
getpgrp(2) ¤ò¼ÂÁõ¤·¤Æ¤¤¤Ê¤¤¥Þ¥·¥ó¤Ç¼Â¹Ô¤·¤¿¾ì¹ç¤Ë¤Ï¡¢Îã³°¤¬È¯À¸¤·¤Þ¤¹¡£
PID ¤ò¾Êά¤¹¤ë¤È¥«¥ì¥ó¥È¥×¥í¥»¥¹¤Î¥×¥í¥»¥¹¥°¥ë¡¼¥×¤òÊÖ¤·¤Þ¤¹¡£
POSIX ÈǤΠgetpgrp ¤Ï PID °ú¿ô¤ò¼õ¤±ÉÕ¤±¤Ê¤¤¤Î¤Ç¡¢
PID==0 ¤Î¤ß¤¬´°Á´¤Ë°Ü¿¢À¤¬¤¢¤ê¤Þ¤¹¡£
¿Æ¥×¥í¥»¥¹¤Î¥×¥í¥»¥¹ id ¤òÊÖ¤·¤Þ¤¹¡£
Linux ¥æ¡¼¥¶¡¼¤Ø¤ÎÃí°Õ: Linux ¤Ç¤Ï getpid() ¤È getppid() ¤Î C ´Ø¿ô¤Ï
¥¹¥ì¥Ã¥É¤¬°Û¤Ê¤ë¤È°Û¤Ê¤Ã¤¿ÃͤòÊÖ¤·¤Þ¤¹¡£
°Ü¿¢À¤Î¤¿¤á¤Ë¡¢¤³¤Î¿¶¤ëÉñ¤¤¤Ï perl ¥ì¥Ù¥ë¤Î´Ø¿ô getppid() ¤Ë¤Ï
È¿±Ç¤µ¤ì¤º¡¢¥¹¥ì¥Ã¥É¤ò¤Þ¤¿¤¤¤Ç°ì´ÓÀ¤Î¤¢¤ëÃͤòÊÖ¤·¤Þ¤¹¡£
´ðÁäȤʤë getppid() ¤ò¸Æ¤Ó½Ð¤·¤¿¤¤¾ì¹ç¤Ï¡¢CPAN ¥â¥¸¥å¡¼¥ë¤Ç¤¢¤ë
Linux::Pid ¤ò»È¤Ã¤Æ¤¯¤À¤µ¤¤¡£
¥×¥í¥»¥¹¡¢¥×¥í¥»¥¹¥°¥ë¡¼¥×¡¢¥æ¡¼¥¶¤ËÂФ¹¤ë¸½ºß¤ÎÍ¥ÀèÅÙ¤òÊÖ¤·¤Þ¤¹¡£
(getpriority(2) ¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£)
getpriority(2) ¤ò¼ÂÁõ¤·¤Æ¤¤¤Ê¤¤
¥Þ¥·¥ó¤Ç¼Â¹Ô¤·¤¿¾ì¹ç¤Ë¤Ï¡¢Ã×̿ŪÎã³°¤¬È¯À¸¤·¤Þ¤¹¡£
¤³¤ì¤é¤Î¥ë¡¼¥Á¥ó¤Ï¡¢¥·¥¹¥Æ¥à¥é¥¤¥Ö¥é¥ê¤ÎƱ̾¤Î´Ø¿ô¤ò¼Â¹Ô¤·¤Þ¤¹¡£ ¥ê¥¹¥È¥³¥ó¥Æ¥¥¹¥È¤Ç¤Ï¡¢¤µ¤Þ¤¶¤Þ¤Ê get ¥ë¡¼¥Á¥ó¤«¤é¤ÎÊÖ¤êÃͤϡ¢¼¡¤Î¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹:
($name,$passwd,$uid,$gid,
$quota,$comment,$gcos,$dir,$shell,$expire) = getpw*
($name,$passwd,$gid,$members) = getgr*
($name,$aliases,$addrtype,$length,@addrs) = gethost*
($name,$aliases,$addrtype,$net) = getnet*
($name,$aliases,$proto) = getproto*
($name,$aliases,$port,$proto) = getserv*
(¥¨¥ó¥È¥ê¤¬Â¸ºß¤·¤Ê¤±¤ì¤Ð¡¢¶õ¥ê¥¹¥È¤¬ÊÖ¤µ¤ì¤Þ¤¹¡£)
$gcos ¥Õ¥£¡¼¥ë¥É¤ÎÀµ³Î¤Ê°ÕÌ£¤Ï¤µ¤Þ¤¶¤Þ¤Ç¤¹¤¬¡¢Ä̾ï¤Ï(¥í¥°¥¤¥ó̾¤Ç¤Ï¤Ê¤¯) ¥æ¡¼¥¶¡¼¤Î¼ÂºÝ¤Î̾Á°¤È¥æ¡¼¥¶¡¼¤ËÉտ魯¤ë¾ðÊó¤ò´Þ¤ß¤Þ¤¹¡£ ⤷¡¢Â¿¤¯¤Î¥·¥¹¥Æ¥à¤Ç¤Ï¥æ¡¼¥¶¡¼¤¬¤³¤Î¾ðÊó¤òÊѹ¹¤Ç¤¤ë¤Î¤Ç¡¢¤³¤Î¾ðÊó¤Ï ¿®Íê¤Ç¤¤º¡¢½¾¤Ã¤Æ $gcos ¤Ï±øÀ÷¤µ¤ì¤Þ¤¹(perlsec ¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤)¡£ ¥æ¡¼¥¶¡¼¤Î°Å¹æ²½¤µ¤ì¤¿¥Ñ¥¹¥ï¡¼¥É¤È¥í¥°¥¤¥ó¥·¥§¥ë¤Ç¤¢¤ë $passwd ¤È $shell ¤â¡¢Æ±ÍͤÎÍýͳ¤Ç±øÀ÷¤µ¤ì¤Þ¤¹¡£
¥¹¥«¥é¥³¥ó¥Æ¥¥¹¥È¤Ç¤Ï¡¢*nam¡¢*byname ¤È¤¤¤Ã¤¿ NAME ¤Ç¸¡º÷¤¹¤ë¤â¤Î°Ê³°¤Ï¡¢ name ¤òÊÖ¤·¡¢NAME ¤Ç¸¡º÷¤¹¤ë¤â¤Î¤Ï¡¢²¿¤«Ê̤Τâ¤Î¤òÊÖ¤·¤Þ¤¹¡£ (¥¨¥ó¥È¥ê¤¬Â¸ºß¤·¤Ê¤±¤ì¤Ð¡¢Ì¤ÄêµÁÃͤ¬ÊÖ¤ê¤Þ¤¹¡£) Îã:
$uid = getpwnam($name);
$name = getpwuid($num);
$name = getpwent();
$gid = getgrnam($name);
$name = getgrgid($num);
$name = getgrent();
#etc.
getpw*() ¤Ç¤Ï¡¢$quota, $comment, $expire ¥Õ¥£¡¼¥ë¥É¤Ï¡¢
¿¤¯¤Î¥·¥¹¥Æ¥à¤Ç¤ÏÂбþ¤·¤Æ¤¤¤Ê¤¤¤Î¤ÇÆÃÊ̤ʽèÍý¤¬¤µ¤ì¤Þ¤¹¡£
$quota ¤¬ÈóÂбþ¤Î¾ì¹ç¡¢¶õ¤Î¥¹¥«¥é¤Ë¤Ê¤ê¤Þ¤¹¡£
Âбþ¤·¤Æ¤¤¤ë¾ì¹ç¡¢Ä̾ï¤Ï¥Ç¥£¥¹¥¯¥¯¥©¡¼¥¿¤ÎÃͤ¬Æþ¤ê¤Þ¤¹¡£
$comment ¥Õ¥£¡¼¥ë¥É¤¬ÈóÂбþ¤Î¾ì¹ç¡¢¶õ¤Î¥¹¥«¥é¤Ë¤Ê¤ê¤Þ¤¹¡£
Âбþ¤·¤Æ¤¤¤ë¾ì¹ç¡¢Ä̾ï¤Ï¥æ¡¼¥¶¡¼¤Ë´Ø¤¹¤ë´ÉÍý¾å¤Î¥³¥á¥ó¥È¤¬Æþ¤ê¤Þ¤¹¡£
$quota ¥Õ¥£¡¼¥ë¥É¤Ï¥Ñ¥¹¥ï¡¼¥É¤Î¼÷Ì¿¤ò¼¨¤¹ $change ¤ä $age ¤Ç¤¢¤ë
¥·¥¹¥Æ¥à¤â¤¢¤ê¤Þ¤¹¡£
$comment ¥Õ¥£¡¼¥ë¥É¤Ï $class ¤Ç¤¢¤ë¥·¥¹¥Æ¥à¤â¤¢¤ê¤Þ¤¹¡£
$expire ¥Õ¥£¡¼¥ë¥É¤¬¤¢¤ë¾ì¹ç¤Ï¡¢¥¢¥«¥¦¥ó¥È¤ä¥Ñ¥¹¥ï¡¼¥É¤¬»þ´ÖÀÚ¤ì¤Ë¤Ê¤ë
´ü´Ö¤¬Æþ¤ê¤Þ¤¹¡£
ưºî¤µ¤»¤ë¥·¥¹¥Æ¥à¤Ç¤Î¤³¤ì¤é¤Î¥Õ¥£¡¼¥ë¥É¤Î͸úÀ¤ÈÀµ³Î¤Ê°ÕÌ£¤Ë¤Ä¤¤¤Æ¤Ï¡¢
getpwnam(3) ¤Î¥É¥¥å¥á¥ó¥È¤È pwd.h ¥Õ¥¡¥¤¥ë¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£
$quota ¤È $comment ¥Õ¥£¡¼¥ë¥É¤¬²¿¤ò°ÕÌ£¤·¤Æ¤¤¤ë¤«¤È¡¢$expire ¥Õ¥£¡¼¥ë¥É¤¬
¤¢¤ë¤«¤É¤¦¤«¤Ï¡¢Config ¥â¥¸¥å¡¼¥ë¤ò»È¤Ã¤Æ¡¢d_pwquota, d_pwage,
d_pwchange, d_pwcomment, d_pwexpire ¤ÎÃͤòÄ´¤Ù¤ë¤³¤È¤Ë¤è¤Ã¤Æ
Perl ¼«¿È¤ÇÄ´¤Ù¤ë¤³¤È¤â½ÐÍè¤Þ¤¹¡£
¥·¥ã¥É¥¦¥Ñ¥¹¥ï¡¼¥É¤Ï¡¢Ä̾ï¤Î C ¥é¥¤¥Ö¥é¥ê¥ë¡¼¥Á¥ó¤ò¸¢¸Â¤¬¤¢¤ë¾õÂÖ¤Ç
¸Æ¤Ó½Ð¤¹¤³¤È¤Ç¥·¥ã¥É¥¦ÈǤ¬¼èÆÀ¤Ç¤¤ë¤«¡¢System V ¤Ë¤¢¤ë¤è¤¦¤Ê
(Solaris ¤È Linux ¤ò´Þ¤ß¤Þ¤¹) shadow(3) ´Ø¿ô¤¬¤¢¤ë¤È¤¤¤Ã¤¿¡¢
ľ´¶Åª¤ÊÊýË¡¤Ç¼ÂÁõ¤µ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ë¤Î¤ßÂбþ¤µ¤ì¤Þ¤¹¡£
ÆÈÀêŪ¤Ê¥·¥ã¥É¥¦¥Ñ¥¹¥ï¡¼¥Éµ¡Ç½¤ò¼ÂÁõ¤·¤Æ¤¤¤ë¥·¥¹¥Æ¥à¤Ç¤Ï¡¢
¤½¤ì¤ËÂбþ¤µ¤ì¤ë¤³¤È¤Ï¤Ê¤¤¤Ç¤·¤ç¤¦¡£
getgr*() ¤Ë¤è¤Ã¤ÆÊÖ¤ëÃÍ $members ¤Ï¡¢¥°¥ë¡¼¥×¤Î¥á¥ó¥Ð¤Î ¥í¥°¥¤¥ó̾¤ò¥¹¥Ú¡¼¥¹¤Ç¶èÀڤ俤â¤Î¤Ç¤¹¡£
gethost*() ´Ø¿ô¤Ç¤Ï¡¢C ¤Ç h_errno ÊÑ¿ô¤¬¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤ì¤Ð¡¢
´Ø¿ô¸Æ½Ð¤¬¼ºÇÔ¤·¤¿¤È¤¤Ë¡¢$? ¤òÄ̤·¤Æ¡¢¤½¤ÎÃͤ¬ÊÖ¤µ¤ì¤Þ¤¹¡£
À®¸ù»þ¤ËÊÖ¤µ¤ì¤ë @addrs Ãͤϡ¢Âбþ¤¹¤ë¥·¥¹¥Æ¥à¥³¡¼¥ë¤¬ÊÖ¤¹¡¢
À¸¤Î¥¢¥É¥ì¥¹¤Î¥ê¥¹¥È¤Ç¤¹¡£
¥¤¥ó¥¿¡¼¥Í¥Ã¥È¥É¥á¥¤¥ó¤Ç¤Ï¡¢¸Ä¡¹¤Î¥¢¥É¥ì¥¹¤Ï¡¢4 ¥Ð¥¤¥ÈĹ¤Ç¡¢
°Ê²¼¤Î¤è¤¦¤Ë¤·¤Æ unpack ¤¹¤ë¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
($a,$b,$c,$d) = unpack('W4',$addr[0]);
Socket ¥é¥¤¥Ö¥é¥ê¤ò»È¤¦¤È¤â¤¦¾¯¤·´Êñ¤Ë¤Ê¤ê¤Þ¤¹¡£
use Socket;
$iaddr = inet_aton("127.1"); # or whatever address
$name = gethostbyaddr($iaddr, AF_INET);
# or going the other way
$straddr = inet_ntoa($iaddr);
µÕÊý¸þ¤Ë¡¢¥Û¥¹¥È̾¤«¤é IP ¥¢¥É¥ì¥¹¤ò²ò·è¤¹¤ë¤Ë¤Ï°Ê²¼¤Î¤è¤¦¤Ë½ñ¤±¤Þ¤¹:
use Socket;
$packed_ip = gethostbyname("www.perl.org");
if (defined $packed_ip) {
$ip_address = inet_ntoa($packed_ip);
}
gethostbyname() ¤Ï¥¹¥«¥é¥³¥ó¥Æ¥¥¹¥È¤Ç¸Æ¤Ó½Ð¤¹¤è¤¦¤Ë¤·¤Æ¡¢ÊÖ¤êÃͤ¬
ÄêµÁ¤µ¤ì¤Æ¤¤¤ë¤«¤òɬ¤º¥Á¥§¥Ã¥¯¤·¤Æ¤¯¤À¤µ¤¤¡£
ÊÖ¤êÃͤΥꥹ¥È¤Î²¿ÈÖÌܤ¬¤É¤ÎÍ×ÁǤ«¤ò³Ð¤¨¤ë¤Î¤ËÈè¤ì¤¿¤Ê¤é¡¢
̾Á°¥Ù¡¼¥¹¤Î¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤¬É¸½à¥â¥¸¥å¡¼¥ë¤ÇÄ󶡤µ¤ì¤Æ¤¤¤Þ¤¹:
File::stat, Net::hostent, Net::netent,
Net::protoent, Net::servent, Time::gmtime, Time::localtime,
User::grent ¤Ç¤¹¡£
¤³¤ì¤é¤ÏÄ̾ï¤ÎÁȤ߹þ¤ß¤ò¾å½ñ¤¤·¡¢
¤½¤ì¤¾¤ì¤Î¥Õ¥£¡¼¥ë¥É¤ËŬÀÚ¤Ê̾Á°¤ò¤Ä¤±¤¿¥ª¥Ö¥¸¥§¥¯¥È¤òÊÖ¤·¤Þ¤¹¡£
Îã:
use File::stat; use User::pwent; $is_his = (stat($filename)->uid == pwent($whoever)->uid);
Ʊ¤¸¥á¥½¥Ã¥É(uid)¤ò¸Æ¤Ó½Ð¤·¤Æ¤¤¤ë¤è¤¦¤Ë¸«¤¨¤Þ¤¹¤¬¡¢°ã¤¤¤Þ¤¹¡£
¤Ê¤¼¤Ê¤é File::stat ¥ª¥Ö¥¸¥§¥¯¥È¤Ï User::pwent ¥ª¥Ö¥¸¥§¥¯¥È¤È¤Ï
°Û¤Ê¤ë¤«¤é¤Ç¤¹¡£
SOCKET Àܳ¤Î¤³¤Á¤é¦¤Î pack ¤µ¤ì¤¿ sockaddr ¥¢¥É¥ì¥¹¤òÊÖ¤·¤Þ¤¹¡£ Ê£¿ô¤Î°Û¤Ê¤ë IP ¤«¤éÀܳ¤µ¤ì¤ë¤¿¤á¤Ë¥¢¥É¥ì¥¹¤¬¤ï¤«¤é¤Ê¤¤¾ì¹ç¤Ë»È¤¤¤Þ¤¹¡£
use Socket;
$mysockaddr = getsockname(SOCK);
($port, $myaddr) = sockaddr_in($mysockaddr);
printf "Connect to %s [%s]\n",
scalar gethostbyaddr($myaddr, AF_INET),
inet_ntoa($myaddr);
Í¿¤¨¤é¤ì¤¿ LEVEL ¤Ç SOCKET ¤Ë´ØÏ¢ÉÕ¤±¤é¤ì¤¿ OPTNAME ¤È¸À¤¦Ì¾Á°¤Î¥ª¥×¥·¥ç¥ó¤ò
Ì䤤¹ç¤ï¤»¤Þ¤¹¡£
¥ª¥×¥·¥ç¥ó¤Ï¥½¥±¥Ã¥È¤Î¼ïÎà¤Ë°Í¸¤·¤·¤¿Ê£¿ô¤Î¥×¥í¥È¥³¥ë¥ì¥Ù¥ë¤Ë¸ºß¤¹¤ë¤³¤È¤â
¤¢¤ê¤Þ¤¹¤¬¡¢¾¯¤Ê¤¯¤È¤âºÇ¾å°Ì¥½¥±¥Ã¥È¥ì¥Ù¥ë SOL_SOCKET (Socket ¥â¥¸¥å¡¼¥ë¤Ç
ÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤¹)¤Ï¸ºß¤·¤Þ¤¹¡£
¤½¤Î¾¤Î¥ì¥Ù¥ë¤Î¥ª¥×¥·¥ç¥ó¤òÌ䤤¹ç¤ï¤»¤ë¤Ë¤Ï¡¢¤½¤Î¥ª¥×¥·¥ç¥ó¤òÀ©¸æ¤¹¤ë
ŬÀڤʥץí¥È¥³¥ë¤Î¥×¥í¥È¥³¥ëÈÖ¹æ¤ò»ØÄꤷ¤Þ¤¹¡£
Î㤨¤Ð¡¢¥ª¥×¥·¥ç¥ó¤¬ TCP ¥×¥í¥È¥³¥ë¤Ç²ò¼á¤µ¤ì¤ë¤Ù¤¤Ç¤¢¤ë¤³¤È¤ò¼¨¤¹¤¿¤á¤Ë¤Ï¡¢
LEVEL ¤Ï getprotobyname ¤ÇÆÀ¤é¤ì¤ë TCP ¤Î¥×¥í¥È¥³¥ëÈÖ¹æ¤òÀßÄꤷ¤Þ¤¹¡£
¤³¤Î¸Æ¤Ó½Ð¤·¤Ï¡¢Í׵ᤵ¤ì¤¿¥½¥±¥Ã¥È¥ª¥×¥·¥ç¥ó¤Î pack ¤µ¤ì¤¿Ê¸»úÎóɽ¸½¤«¡¢
¤¢¤ë¤¤¤Ï¥¨¥é¡¼¤¬¤¢¤ë¾ì¹ç¤Ï undef ¤òÊÖ¤·¤Þ¤¹(¥¨¥é¡¼¤ÎÍýͳ¤Ï $! ¤Ë¤¢¤ê¤Þ¤¹)¡£
pack ¤µ¤ì¤¿Ê¸»úÎó¤ÎÀµ³Î¤ÊÃæ¿È¤Ï LEVEL ¤È OPTNAME ¤Ë°Í¸¤¹¤ë¤Î¤Ç¡¢
¾ÜºÙ¤Ë¤Ä¤¤¤Æ¤Ï¥·¥¹¥Æ¥à¥É¥¥å¥á¥ó¥È¤ò³Îǧ¤·¤Æ¤¯¤À¤µ¤¤¡£
¤·¤«¤·¡¢¤È¤Æ¤â°ìÈÌŪ¤Ê¾ì¹ç¤È¤¤¤¦¤Î¤Ï¥ª¥×¥·¥ç¥ó¤¬À°¿ô¤Î¾ì¹ç¤Ç¡¢¤³¤Î¾ì¹ç
·ë²Ì¤Ï unpack ¤Î i (¤¢¤ë¤¤¤Ï I)¥Õ¥©¡¼¥Þ¥Ã¥È¤Ç¥Ç¥³¡¼¥É¤Ç¤¤ë pack ¤µ¤ì¤¿
À°¿ô¤Ç¤¹¡£
¤¢¤ë¥½¥±¥Ã¥È¤Ç Nagle ¤Î¥¢¥ë¥´¥ê¥º¥à͸ú¤«¤É¤¦¤«¤òÄ´¤Ù¤ëÎã¤Ç¤¹:
use Socket qw(:all);
defined(my $tcp = getprotobyname("tcp"))
or die "Could not determine the protocol number for tcp";
# my $tcp = IPPROTO_TCP; # Alternative
my $packed = getsockopt($socket, $tcp, TCP_NODELAY)
or die "Could not query TCP_NODELAY socket option: $!";
my $nodelay = unpack("I", $packed);
print "Nagle's algorithm is turned ", $nodelay ? "off\n" : "on\n";
¥ê¥¹¥È¥³¥ó¥Æ¥¥¹¥È¤Ç¤Ï¡¢
EXPR ¤ÎÃͤò¡¢É¸½à Unix ¥·¥§¥ë /bin/csh ¤¬¹Ô¤Ê¤¦¤è¤¦¤Ë
¥Õ¥¡¥¤¥ë̾¤ÎŸ³«¤ò¹Ô¤Ê¤Ã¤¿·ë²Ì¤Î¥ê¥¹¥È(¶õ¤«¤â¤·¤ì¤Þ¤»¤ó)¤òÊÖ¤·¤Þ¤¹¡£
¥¹¥«¥é¥³¥ó¥Æ¥¥¹¥È¤Ç¤Ï¡¢glob ¤Ï¤³¤Î¤è¤¦¤Ê¥Õ¥¡¥¤¥ë̾Ÿ³«¤ò·«¤êÊÖ¤·¡¢
¥ê¥¹¥È¤¬¤Ê¤¯¤Ê¤Ã¤¿¤é undef ¤òÊÖ¤·¤Þ¤¹¡£
¤³¤ì¤Ï¡¢<*.c> ±é»»»Ò¤ò¼ÂÁõ¤¹¤ëÆâÉô´Ø¿ô¤Ç¤¹¤¬¡¢
ľÀÜ»ÈÍѤ¹¤ë¤³¤È¤â¤Ç¤¤Þ¤¹¡£
EXPR ¤ò¾Êά¤¹¤ë¤È¡¢$_¤¬»È¤ï¤ì¤Þ¤¹¡£
<*.c>±é»»»Ò¤Ë¤Ä¤¤¤Æ¤Ï
I/O Operators in perlop ¤Ç¤è¤ê¾ÜºÙ¤ËµÄÏÀ¤·¤Æ¤¤¤Þ¤¹¡£
v5.6.0 ¤«¤é¡¢¤³¤Î±é»»»Ò¤Ïɸ½à¤Î File::Glob ³ÈÄ¥¤ò»È¤Ã¤Æ
¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£
¾ÜºÙ¤Ï File::Glob ¤ò»²¾È¤·¤Æ²¼¤µ¤¤¡£
localtime ¤ÈƱÍÍ¤ËÆ¯¤¤Þ¤¹¤¬¡¢ÊÖ¤êÃͤϥ°¥ê¥Ë¥Ã¥¸É¸½à»þ¤Ë ¥í¡¼¥«¥é¥¤¥º¤µ¤ì¤Æ¤¤¤Þ¤¹¡£
Ãí°Õ: ¥ê¥¹¥È¥³¥ó¥Æ¥¥¹¥È¤Ç¸Æ¤Ó½Ð¤·¤¿»þ¡¢gmtime ¤¬ÊÖ¤¹ËöÈø¤ÎÃͤǤ¢¤ë
$isdst ¤Ï¾ï¤Ë 0 ¤Ç¤¹¡£
GMT ¤Ë¤Ï²Æ»þ´Ö¤Ï¤¢¤ê¤Þ¤»¤ó¡£
°Ü¿¢À¤ÎÌäÂê¤Ë¤Ä¤¤¤Æ¤Ï perlport/gmtime ¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£
goto-LABEL ¤Î·Á¼°¤Ï¡¢LABEL ¤È¤¤¤¦¥é¥Ù¥ë¤ÎÉÕ¤¤¤¿Ê¸¤ò
õ¤·¤Æ¡¢¤½¤³¤Ø¼Â¹Ô¤ò°Ü¤¹¤â¤Î¤Ç¤¹¡£¡¡¥µ¥Ö¥ë¡¼¥Á¥ó¤ä
foreach ¥ë¡¼¥×¤Ê¤É¡¢²¿¤é¤«¤Î½é´ü²½¤¬É¬Íפʹ½Â¤¤ÎÃæ¤Ë
Æþ¤ê¹þ¤à¤³¤È¤Ïµö¤µ¤ì¤Þ¤»¤ó¡£¡¡ºÇŬ²½¤Ë¤è¤Ã¤Æ¤Ê¤¯¤Ê¤Ã¤Æ¤·¤Þ¤¦¹½Â¤¤ÎÃæ¤Ë¤â
goto ¤¹¤ë¤³¤È¤Ï¤Ç¤¤Þ¤»¤ó¡£
¤Þ¤¿¡¢sort¤ÇÍ¿¤¨¤é¤ì¤¿¥Ö¥í¥Ã¥¯¤ä¥µ¥Ö¥ë¡¼¥Á¥ó¤«¤é³°¤Ø½Ð¤ë¤³¤È¤â¤Ç¤¤Þ¤»¤ó¡£
¤³¤ì°Ê³°¤Ï¡¢¥µ¥Ö¥ë¡¼¥Á¥ó¤Î³°¤ò´Þ¤à¡¢Æ°Åª¥¹¥³¡¼¥×Æâ¤Î
¤Û¤È¤ó¤É¤¹¤Ù¤Æ¤Î¾ì½ê¤Ø¹Ô¤¯¤¿¤á¤Ë»ÈÍѤǤ¤Þ¤¹¤¬¡¢ÉáÄ̤ϡ¢
last ¤ä die ¤È¤¤¤Ã¤¿Ê̤ι½Â¤¤ò»È¤Ã¤¿Êý¤¬Îɤ¤¤Ç¤·¤ç¤¦¡£
Perl ¤Îºî¼Ô¤Ï¤³¤Î·Á¼°¤Î goto ¤ò»È¤¦É¬Íפò´¶¤¸¤¿¤³¤È¤Ï¡¢
1 Å٤⤢¤ê¤Þ¤»¤ó (Perl ¤Ç¤Ï¡£C ¤ÏÊ̤ΤªÏäǤ¹)¡£
(°ã¤¤¤Ï¡¢C ¤Ë¤Ï¥ë¡¼¥×À©¸æ¤È·ë¤Ó¤Ä¤¤¤¿Ì¾Á°¤Ä¤¤Î¥ë¡¼¥×¤¬¤Ê¤¤¤³¤È¤Ç¤¹¡£
Perl ¤Ë¤Ï¤¢¤ê¡¢¤³¤ì¤¬Â¾¤Î¸À¸ì¤Ç¤Î¤Û¤È¤ó¤É¤Î¹½Â¤Åª¤Ê goto ¤Î»ÈÍÑË¡¤ò
ÃÖ¤´¹¤¨¤Þ¤¹¡£)
goto-EXPR ¤Î·Á¼°¤Ï¥é¥Ù¥ë̾¤òͽ¬¤·¡¢¤³¤Î¥¹¥³¡¼¥×¤ÏưŪ¤Ë²ò·è¤µ¤ì¤Þ¤¹¡£
¤³¤ì¤Ë¤è¤ê FORTRAN ¤Î¤è¤¦¤Ê»»½Ñ goto ¤¬²Äǽ¤Ë¤Ê¤ê¤Þ¤¹¤¬¡¢
ÊݼéÀ¤ò½Å»ë¤¹¤ë¤Ê¤é¤ª´«¤á¤·¤Þ¤»¤ó¡£
goto ("FOO", "BAR", "GLARCH")[$i];
goto-&NAME ¤Î·Á¼°¤Ï¡¢¤½¤Î¾¤Î goto ¤Î·Á¼°¤È¤Ï¤«¤Ê¤ê
°Û¤Ê¤Ã¤¿¤â¤Î¤Ç¤¹¡£
¼ÂºÝ¡¢¤³¤ì¤ÏÉáÄ̤δ¶³Ð¤Ç¤¤¤¦¤È¤³¤í¤Î¤É¤³¤«¤Ø¹Ô¤¯¤â¤Î¤Ç¤ÏÁ´¤¯¤Ê¤¯¡¢
¾¤Î goto ¤¬»ý¤ÄÉÔ̾ÍÀ¤ò»ý¤Ã¤Æ¤¤¤Þ¤»¤ó¡£
¸½ºß¤Î¥µ¥Ö¥ë¡¼¥Á¥ó¤ò½ªÎ»¤· (local() ¤Ë¤è¤ëÊѹ¹¤Ï¼º¤ï¤ì¤Þ¤¹)¡¢
ľ¤Á¤Ë¸½ºß¤Î @_ ¤ÎÃͤò»È¤Ã¤Æ»ØÄꤵ¤ì¤¿Ì¾Á°¤Î¥µ¥Ö¥ë¡¼¥Á¥ó¤ò¸Æ¤Ó½Ð¤·¤Þ¤¹¡£
¤³¤ì¤Ï¡¢AUTOLOAD ¥µ¥Ö¥ë¡¼¥Á¥ó¤¬Ê̤Υµ¥Ö¥ë¡¼¥Á¥ó¤ò¥í¡¼¥É¤·¤Æ¡¢
¤½¤ÎÊ̤Υµ¥Ö¥ë¡¼¥Á¥ó¤¬ºÇ½é¤Ë¸Æ¤Ð¤ì¤¿¤è¤¦¤Ë¤¹¤ë¤¿¤á¤Ë»È¤ï¤ì¤Þ¤¹
(¤¿¤À¤·¡¢¸½ºß¤Î¥µ¥Ö¥ë¡¼¥Á¥ó¤Ç @_ ¤ò½¤Àµ¤·¤¿¾ì¹ç¤Ë¤Ï¡¢
¤½¤ÎÊ̤Υµ¥Ö¥ë¡¼¥Á¥ó¤ËÅÁ¤¨¤é¤ì¤Þ¤¹)¡£
goto ¤Î¤¢¤È¤Ï¡¢caller ¤Ç¤µ¤¨¤â¡¢¸½ºß¤Î¥µ¥Ö¥ë¡¼¥Á¥ó¤¬
ºÇ½é¤Ë¸Æ¤Ó½Ð¤µ¤ì¤¿¤È¸À¤¦¤³¤È¤¬¤Ç¤¤Þ¤»¤ó¡£
NAME ¤Ï¥µ¥Ö¥ë¡¼¥Á¥ó¤Î̾Á°¤Ç¤¢¤ëɬÍפϤ¢¤ê¤Þ¤»¤ó; ¥³¡¼¥É¥ê¥Õ¥¡¥ì¥ó¥¹¤ò ´Þ¤à¥¹¥«¥éÃͤ䡢¥³¡¼¥É¥ê¥Õ¥¡¥ì¥ó¥¹¤Èɾ²Á¤µ¤ì¤ë¥Ö¥í¥Ã¥¯¤Ç¤â¹½¤¤¤Þ¤»¤ó¡£
¤³¤ì¤Ï grep(1) ¤È¤½¤Î¿ÆÎà¤ÈƱ¤¸¤è¤¦¤Ê¤â¤Î¤Ç¤¹¤¬¡¢Æ±¤¸¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£
ÆÃ¤Ë¡¢Àµµ¬É½¸½¤Î»ÈÍѤËÀ©¸Â¤µ¤ì¤Þ¤»¤ó¡£
LIST ¤Î¸Ä¡¹¤ÎÍ×ÁǤËÂФ·¤Æ¡¢BLOCK ¤« EXPR ¤òɾ²Á¤·
($_ ¤Ï¡¢¥í¡¼¥«¥ë¤Ë¸Ä¡¹¤ÎÍ×ÁǤ¬ÀßÄꤵ¤ì¤Þ¤¹) ¡¢
¤½¤ÎÍ×ÁǤΤ¦¤Á¡¢É¾²Á¤·¤¿¼°¤¬¿¿¤È¤Ê¤Ã¤¿¤â¤Î¤«¤é¤Ê¤ë¥ê¥¹¥ÈÃͤ¬ÊÖ¤µ¤ì¤Þ¤¹¡£
¥¹¥«¥é¥³¥ó¥Æ¥¥¹¥È¤Ç¤Ï¡¢¼°¤¬¿¿¤È¤Ê¤Ã¤¿²ó¿ô¤òÊÖ¤·¤Þ¤¹¡£¡¡Îã:
@foo = grep(!/^#/, @bar); # weed out comments
¤¢¤ë¤¤¤ÏÅù²Á¤ÊÎã¤È¤·¤Æ:
@foo = grep {!/^#/} @bar; # weed out comments
$_ ¤Ï¡¢LIST ¤ÎÃͤؤΥ¨¥¤¥ê¥¢¥¹¤Ç¤¹¤Î¤Ç¡¢LIST ¤ÎÍ×ÁǤò
Êѹ¹¤¹¤ë¤¿¤á¤Ë»È¤¦¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
¤³¤ì¤Ï¡¢ÊØÍø¤Ç¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤¹¤¬¡¢
LIST ¤ÎÍ×ÁǤ¬ÊÑ¿ô¤Ç¤Ê¤¤¤È¡¢¤ª¤«¤·¤Ê·ë²Ì¤Ë¤Ê¤ê¤Þ¤¹¡£
ƱÍͤˡ¢grep ¤Ï¸µ¤Î¥ê¥¹¥È¤Ø¤Î¥¨¥¤¥ê¥¢¥¹¤òÊÖ¤·¤Þ¤¹¡£
for ¥ë¡¼¥×¤Î¥¤¥ó¥Ç¥Ã¥¯¥¹ÊÑ¿ô¤¬¥ê¥¹¥ÈÍ×ÁǤΥ¨¥¤¥ê¥¢¥¹¤Ç¤¢¤ë¤Î¤È
ƱÍͤǤ¹¡£
¤Ä¤Þ¤ê¡¢grep ¤ÇÊÖ¤µ¤ì¤¿¥ê¥¹¥È¤ÎÍ×ÁǤò
(foreach, map, ¤Þ¤¿¤Ï¾¤Î grep ¤Ç)½¤Àµ¤¹¤ë¤È
¸µ¤Î¥ê¥¹¥È¤ÎÍ×ÁǤ¬Êѹ¹¤µ¤ì¤Þ¤¹¡£
¤³¤ì¤Ï¤¤ì¤¤¤Ê¥³¡¼¥É¤ò½ñ¤³¤¦¤È¤¹¤ë¼ÙËâ¤Ë¤Ê¤ë¤³¤È¤¬Â¿¤¤¤Ç¤¹¡£
(my $_ ¤È¤·¤ÆÀë¸À¤µ¤ì¤ë¤³¤È¤Ë¤è¤Ã¤Æ) $_ ¤¬ grep ¤¬¸½¤ì¤ë¥¹¥³¡¼¥×Æâ¤Ç
¥ì¥¥·¥«¥ë¤Ê¾ì¹ç¤Ï¡¢¥í¡¼¥«¥ë¤Ç¤Ï¥ê¥¹¥ÈÍ×ÁǤؤΥ¨¥¤¥ê¥¢¥¹¤Ç¤¢¤ë¤³¤È¤Ë²Ã¤¨¤Æ¡¢
$_ ¤Ï¥Ö¥í¥Ã¥¯Æâ¤Ç¥ì¥¥·¥«¥ë¤Ç¤¢¤ê¤Ä¤Å¤±¤Þ¤¹; ¤Ä¤Þ¤ê¡¢³°Â¦¤«¤é¤Ï¸«¤¨¤º¡¢
µ¯¤³¤ê¤¦¤ëÉûºîÍѤò²óÈò¤·¤Þ¤¹¡£
BLOCK ¤ä EXPR ¤Î·ë²Ì¤ò¥ê¥¹¥È¤Î·Á¤Ë¤·¤¿¤¤¾ì¹ç¤Ï map ¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£
EXPR ¤ò 16 ¿Ê¿ô¤Îʸ»úÎó¤È²ò¼á¤·¤Æ¡¢Âбþ¤¹¤ëÃͤòÊÖ¤·¤Þ¤¹¡£
(0, 0x, 0b ¤Ç»Ï¤Þ¤ëʸ»úÎó¤ÎÊÑ´¹¤Ë¤Ï¡¢oct ¤ò
»²¾È¤·¤Æ¤