
ç æŒ ...
Perlç æŒ ã®ãã°ã«ã¯ãèªãé«ãå ã
ãããã®ããããŸãã 圌ã¯é·å¹Žã«ããã£ãŠäœåãã®ç æŒ ãè¿åããŠ1987å¹Žã«æ
ãå§ããŸãããéšå£ãå§ãŸããå¹²ã°ã€ãç¶ããšããªã¢ã·ã¹ãæ°Žã§æºãããããªã¢ã·ã¹ããã¡ãã¡ã§æhereããŠããã®ãèŠãŸããã ç æŒ ã¯ç°ãªã£ãŠãããäžé埳ãªã©ã€ããŒã圌ããŸããŸãåžæã®ãªã也ç¥ããç æŒ ã«æ·±ãé£ããŠè¡ã£ããšãã圌ã«äžå¹žãäœåºŠãèµ·ãããŸããã ããã©ããããç æŒ ã®çãäžã«éœåžå
šäœãçåœãšäººã§ãã£ã±ãã«èŠããå Žåãããã¯miæ°æ¥Œã®ããã«èŠããŸãããããã-ããã¯çŸå®ã§ããã Perlã¯ã人ã
ã®åµé çãªæèœã«é©ããããããšã決ããŠæ¢ããŸããã§ããã 圌ã¯èªåã®æå¿ãä¿¡ããŠäººã«éã課ãããç æŒ ã®å¥¥æ·±ããŸã§æªç¥ãžãšåãã£ãã 圌ã¯
1人㮠ãéçãã©ã€ããŒã«å€±æããŸãã-倧éœåžã®äººã
ã¯ãã€ãŠã¯è€éãªè»ã§æ
è¡ããŠããŸããã ããã§ãç æŒ ã§ã¯ãæãé
åçãªèæ€ã§ãããå°ãªããšã1ã¡ãŒãã«åé²ãããããšã¯ã§ããŸããã ç¿æ
£ããã圌ãã¯åœŒããšäžç·ã«ããããã®ãŽããåã£ãŠãããããåžžã«æŒããŠãããéãèµ°ãããŸãã ç æŒ ã®çŸããããã®å²åŠã¯ããããéãéããŸããããããã®å€ãã¯ãŽãŒã«ã«å°éãããçåœã®ãªãç æŒ å
šäœãæ®ããŸãã ããã©ããããç æŒ ãäœãæ°ãããç¡æã®ãåµé æ§ã®ããã®ç¡éã®ç©ºéãšããŠæãã人ã
ãããã ãã®ãããªä»²éãšäžç·ã«æ
è¡ããããšã¯åžžã«å€§ããªåã³ã§ããã ãã¬ã€ã«ã¯ãç æŒ ã®çåœã®å³¶ã§ãã£ã±ãã®å¥åŠã§ã圌ããå°ããŸããã ãã®ãããªäººã
ã®ã°ã«ãŒãã¯ãã©ã¯ãã®ãã£ã©ãã³å
šäœãåéãããã£ãããšç æŒ ãããŸãããŸãã ç æŒ ã¯é
ã£ã±ããããããŠã©ããããããç¹å¥ãªæ¹æ³ã§ãã©ã€ããŒã®è¥ããŠåŒ·ãå¿ã«éæ³ã®ããã«äœçšããŸããã Perlã¯ãè²§ãã人ã
ã倢äžã«ãªãããã以äžã®éåœã«ãªãç ã®åã建èšãå§ããã®ããã°ãã°èŠãŸããã ä»ã®äººã¯ç ã®äžã«åœŒã«ããæç¢ºã§ã¯ãªãèœæžããæããã 圌ãã¯ãŸããå®éã«ååšããªãã£ãæ°æ¥Œã«ãã£ãŠå°ç¡ãã«ãããŸããã æ®å¿µãªãããPerlã¯ãããã®è²§ãã人ã
ãå©ããããšãã§ãããæ
è¡ãæåŠããããšãã§ããŸããã
ãããŠãããã§åœŒã¯ããªãã®åã«ããŠããã®ãŸã 掻æ°ã®ãªãç æŒ ãéã£ãŠããªããè¡ãã¹ãã ãšæãè·é¢ãŸã§é
åçãªæ£æ©ãããããã«åœŒãåãã§è¹ŽããŸãã
...ã©ã¯ã2
ïŒ*ïŒ Perlã®å²åŠã¯ãé£ããåé¡ã解決ããèœåãç¶æããªãããç°¡åãªåé¡ãç°¡åã«è§£æ±ºã§ãããšãããã®ã§ãã ãããã¯ç§ãã¡ãæ¥ã
解決ããã¿ã¹ã¯ã§ãã ããªããããããšããŠããããšãèšãåã«äºåã®èšèãããããèšãå¿
èŠã¯ãããŸããã Perlã¯äŒçµ±çã«ã»ãšãã©ãã¹ãŠã®* nixãã£ã¹ããªãã¥ãŒã·ã§ã³ã®é
ä¿¡ã«å«ãŸããŠãããããç¹ã«ç°¡åã«èµ·åã§ããŸãã å®éããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãã€ã³ã¹ããŒã«ããåŸãPerlã¯åäœããæºåãã§ããŠããŸãïŒãã¡ãã* nixã«ã€ããŠè©±ããŠããïŒã
ïŒ*ïŒ Perlã®æ°ããããŒãžã§ã³ãéçºãããšãã¯ãäžäœäºææ§ã®ç¶æã«ç¹å¥ãªæ³šæãæãããŸãã Perlã§ã©ãã ãæžãããŠããããèãããšãããã¯éåžžã«éèŠã§ãã
ïŒ*ïŒ CPAN ïŒ
maven ã
ivy ïŒ/ Javaã
RubyGems ã
npm /Node.JSã®ãããªPerlã®ã¢ãžã¥ãŒã«é
åžãããã¯ãŒã¯ã åžã®èªå·±çµã¿ç«ãŠãããããå Žé¢ã«å¯Ÿå¿ããæ¢è£œã®ãœãªã¥ãŒã·ã§ã³ã®å庫ã çŸæç¹ã§ã¯ãèšèªã®äžã§æå€§ã®1ã€ïŒ
121,000以äžã®ã¢ãžã¥ãŒã«ïŒã CPANã®ãããã§ãå€ãã®è€éãªã¿ã¹ã¯ãé©åãªã¢ãžã¥ãŒã«ã®ç°¡åãªæ€çŽ¢ã«ãã£ãŠè§£æ±ºãããŸãã ãã ããmavenãšã®æ¯èŒã«ã¯å€å°ã®è² æ
ãããããCPANã¯äŸåé¢ä¿ç®¡çã®ç¹ã§ã¯ããã«ç°¡åã§ãã äºåã®èšå®ããžãã¯ã¯äžèŠã§ãDebian / Ubuntuã®
aptã«äŒŒãŠããŸãã
ïŒ*ïŒ Perlã¯ãããã¹ãããã°ã©ã ãè§£éããåã«äžé衚çŸã«ã³ã³ãã€ã«ããŸãã ããã«ããããŸãã§ã¯ãããŸããã
ã³ã³ãã€ã«æ®µéã§ããã°ã©ã ã®ãšã©ãŒãæ€åºã§ããŸãã ãŸããæ§ææ§é ã®æ£ç¢ºæ§ã®ç¢ºèªããµãããã°ã©ã ã®ååãšåŒæ°ã®æ£ç¢ºæ§ã®ç¢ºèªïŒãããã¿ã€ããããå Žåã®ã¿ïŒãã¯ã©ã¹ã®ãã£ãŒã«ãã®åŒã³åºãã®æ£ç¢ºæ§ã®ç¢ºèªãå«ãŸããŸãã ãã¡ãããããã¯C ++ã³ã³ãã€ã©ã§ã¯ãããŸããããåçèšèªã®å Žåã¯ãŸã£ããæªããããŸããã è峿·±ãããšã§ãããC ++ã³ã³ãã€ã©ãŒã§ãäœããæ®ãããšãã§ãããããPerlã³ã³ãã€ã©ãŒã¯æ°åŠæŒç®ãžã®èª€ã£ãåŒã³åºããæ€åºã§ããŸãïŒäŸãã°ãè² ã®æ°ããã®ã«ãŒãã¯ã³ã³ãã€ã«ãšã©ãŒãåŒãèµ·ãããŸãïŒã 以äžã«äŸã瀺ããŸãã
Perlã¯åžžã«
ãã®ååã«åŸã
ããããã®ãã§ãã¯ã®ã»ãšãã©ããªãã«ããã®ã«è²»çšã¯ããããŸããããããã«ã€ããŠã¯åŸã§è©³ãã説æããŸãã
ïŒ*ïŒé¢æ°ãããã¿ã€ãã䜿çšãããšãC ++ã®
忹宣èšã«äŒŒããµãã«ãŒãã³ãšãã®åŒæ°ã®ãªã¹ããäºå宣èšã§ããŸãããããã¿ã€ããããå Žåãã³ã³ãã€ã©ãŒã¯ãµãã«ãŒãã³ãæ£ããåŒã³åºãããããšã確èªãããµãã«ãŒãã³ãåŒã³åºããšãã«ãã¢ã®è§ãã£ããå¿
èŠãšããŸããã
sub feed($$); feed 'Sharik', 'Fruit';
ïŒ*ïŒ$ @ïŒ
ã Perlã¯ãç®çã«å¿ããŠå€æ°ãåé¢ããŸãïŒ '
$ 'ã¹ã«ã©ãŒïŒæ°å€ãè¡ããªã³ã¯ïŒã '
@ 'é
åïŒã¹ã«ã©ãŒã®ã·ãŒã±ã³ã¹ïŒã '
ïŒ
'ããã·ã¥ïŒã¹ã«ã©ãŒã®é£æ³é
åïŒã ã芧ã®ãšãããå€å
žçãªããªããã£ãåã¯ã¹ã«ã©ãŒã§è¡šãããŠããŸãã ãã ãããããã¯ã³ã³ããããå³å¯ã«åé¢ãããŠãããããã³ã³ãã€ã©ã¯è¿œå ã®ãã§ãã¯ãå®è¡ã§ããé¢åããè§£æŸãããŸãã Perlã¯ãã®åã®å
¥åãèš±å¯ããŠããŸããïŒOOPã®å Žåãè²æ©ãå°å
¥ãããŠããŸã-çµã¿èŸŒã¿åã®ããããã¯ã©ã¹ã«å å³ã§ããŸãïŒã ãã®ãããªæç¢ºãªåé¢ã«ãããåãé åã§ããã¹ãŠã®ã¿ã€ãã®ç«¶åããªã倿°ãæã€ããšãã§ããŸãã
Perlã®åæäœã¯ãå®è¡ã³ã³ããã¹ãã«é¢é£ããŠåé¢ã§ããŸããã Perlã¯ã空ïŒã³ã³ããã¹ããªãïŒãã¹ã«ã©ãŒãããã³ãªã¹ãã®3çš®é¡ã®ã³ã³ããã¹ããçè§£ããŸãïŒããšãã°ãã¹ã«ã©ãŒå€æ°ã«å€ãå²ãåœãŠããšãã¹ã«ã©ãŒã³ã³ããã¹ãã圢æããé
åã«å²ãåœãŠããããªã¹ãã³ã³ããã¹ããããã·ã¥ããŸãïŒã Perlã«ãŒãã³ã¯å®è¡ã®ã³ã³ããã¹ããæ±ºå®ããããšãã§ãããããã£ãŠãç°ãªãã³ã³ããã¹ãã§ç°ãªãåäœãããããšãã§ããåµé æ§ã®äœå°ãäžããŸãã
ãã®èšèªã«ã¯ãã€ã³ã¿ãŒæŒç®ã¯ãããŸãããããªã³ã¯ããããŸãã ãµãããã°ã©ã ãžã®åŒæ°ã¯åç
§ã«ãã£ãŠæž¡ãããŸããã代å
¥æŒç®åã¯å€æ°èªäœã®å€ãã³ããŒããŸãïŒã¹ã«ã©ãŒã ãã§ãªãã³ã³ãããã³ããŒãããŸãïŒã ãããã£ãŠãå€ã«ãã£ãŠãµãã«ãŒãã³ã«åŒæ°ãæž¡ãããšã¯ç°¡åã«å®è£
ãããŸãã ããã«ãPerlã§æžãå€å
žçãªãµãã«ãŒãã³ã¯ã倿ž¡ããã€ãŸã åŒæ°ã«å¯äœçšãå°å
¥ããŸããã
ïŒ*ïŒ ãªãã¬ãŒã¿ãŒã®ãªãŒããŒããŒã ïŒãŸãã«ãå¿
èŠãªå ŽåïŒã ã¹ããŒã¹ãã³ã³ã以å€ã®ã»ãšãã©ãã¹ãŠããªãŒããŒããŒãã§ããŸããããããã誰ããã³ã¡ã³ãããªãŒããŒããŒãã§ãããšèããããšã¯ãããŸããã 宿°ïŒæ°åãæåãåèªïŒããªãŒããŒããŒãã§ããå¯äžã®èšèªïŒç§ã«ç¥ãããŠããïŒã ããã¯ãããšãã°ã宿°ãšããŠå
¥åããããã¹ãŠã®æ°å€ããè€çŽ æ°ã衚ãåçã®ãªããžã§ã¯ãã«çœ®ãæããããã«äœ¿çšã§ããŸãã ãŸãã¯ãç¡å¶éã®å€ã®æ°åã䜿çšããŸãã
Perlã䜿çšãããšãæšæºèšèªã«ãŒãã³ããªãŒããŒããŒãã§ããŸãã
ïŒ*ïŒ æ£èŠè¡šçŸã¯ Perlã«æ·±ãçµ±åãããŠããŸãã éåžžã®æ£èŠè¡šçŸãã¿ãŒã³ã«å ããŠãPerlã¯ãã®æ¡åŒµæ©èœããµããŒãããŠããŸãã ããšãã°ãPerlã§ã¯ãæ€çŽ¢ãã¿ãŒã³ããã³çœ®æãã¿ãŒã³ã§çŽæ¥Perlã³ãŒãã䜿çšã§ããŸãã
my $math = '100 + 200 = 300'; $math =~ s/(\d+)/$1 * 2/ge;
æ£èŠè¡šçŸã¯
Unicodeããããã£ããµããŒãããç¬èªã®æåããããã£ãå
¥åããããšãã§ããŸãã è€éãªãã¿ãŒã³ïŒ\ sã\ wãªã©ïŒã«ã¯ç¬èªã®çç¥åœ¢ãå
¥åã§ããŸããåœç¶ãPerlã®æ£èŠè¡šçŸã¯ãè²ªæ¬²ãªæ€çŽ¢ãšè²ªæ¬²ã§ãªãæ€çŽ¢ã®äž¡æ¹ããµããŒãããŸãã
ïŒ*ïŒãµãã«ãŒãã³ã«
returnããŒã¯ãŒãããªãå ŽåãPerlã¯æåŸã«è©äŸ¡ãããåŒãè¿ããŸãïŒããã¯çŸåšæµè¡ããŠããããã§ãïŒã ããã«ããµãã«ãŒãã³ãåŒã³åºããšãã«ãäœãããŠããã®ãçè§£ããŠããå Žåã¯æ¬åŒ§ãçç¥ã§ããŸãã
ïŒ*ïŒ Perlã®ãããã¯ã ãããã¯ã¯äžæ¬åŒ§
{...}ã®ãã¢ã§ããããã¯
ãåãå
¥ãã
ããã® while ã
if ããªã©ã®æ§æäœã§ããããããã¯ã¯åç¬ã§ååšã§ããŸãã æãè峿·±ãã®ã¯ããããã¯ã
next ã
last ãããã³
redoæŒç®åããµããŒãããŠããããšã§ãã ã€ãŸã ãšã³ããªã¯éåžžã«åæ³ã§ãïŒ
{ print "Yeah\n"; last; print "Unreachable code\n"; } { print "Forever loop\n"; redo; }
ããã«ããµãã«ãŒãã³ã¯åŒæ°ãšããŠãããã¯ãåãããšãã§ããŸããããã«ãããæ§ææ§é ã䜿çšããŠèšèªãè±å¯ã«æ¡åŒµã§ããŸãã ããã«ãããçŸãããèªå·±ææžåãããããã°ã©ã ãPerlã§äœæããããšãã§ããŸãããã¡ãããæ³ååãå¿
èŠã§ãã
use strict;
Perlã¯
try /
catch /
finally ãããã¯ããµããŒãããŠããŸãããããããã¯ã«ãŒãã³ãåä¿¡ããããšã§ç°¡åã«å®è£
ã§ããŸãã æ£ç¢ºã«
if /
elseããããã¯ãåãå
¥ãããã
ãif /
else if /
elseã®æ§æã¯Perlã«ååšã§ããªãããã
if /
elsif /
elseã代ããã«äœ¿çšãããŸãã åæ§ã«ã
switch /
caseã¯ãããŸãããç°¡åã«å®è£
ãããŸãã
ïŒ*ïŒ whileã«ãŒãã¯
continueã»ã¯ã·ã§ã³ãå®çŸ©ã§ããŸã
ãnext ã
lastã ãŸãã¯redoãåŒã³åºããããã©ããã«é¢ä¿ãªãå®è¡ãããŸã
ïŒã€ãŸããåžžã«å®è¡ã
ããŸãïŒã
while (1) { next; } continue { print "Yet another loop done \n"; }
ïŒ*ïŒå€æ°ã®3ã€ã®ã¹ã³ãŒãïŒã°ããŒãã«ãã¬ãã·ã«ã«ãããã³ããŒã«ã«ã ããŒã«ã«ã¹ã³ãŒãã¯ã倿°ã®å€ãçŸåšã®ãããã¯ããã³ãã®ãããã¯ããã®ãã¹ãŠã®ãµãã«ãŒãã³åŒã³åºãã«æ¡åŒµããç¹å®ã®ãããã¯ã®ã°ããŒãã«å€æ°ã®å€ããªãŒããŒã©ã€ãããã®ã«åœ¹ç«ã¡ãŸãã ããŒã«ã«ã¹ã³ãŒãã¯å®è¡æã«æ±ºå®ãããã³ã³ãã€ã«æ®µéã§ã¬ãã·ã«ã«ã«æ±ºå®ãããŸãïŒããã¯ãããã¯å
ã§æãäžè¬çãªã¹ã³ãŒãã§ãïŒã
use strict; our $a = 'global scope';
ïŒ*ïŒ Perlã¯ã¯ããŒãžã£ãŒãå®è£
ããŸããå¿åãµãã«ãŒãã³ã宣èšããããã®æ§æã¯ãä»ã®ããã€ãã®èšèªã§èµ·ããããã«ãéåžžã®å®£èšãšåãã§ãã
ïŒ*ïŒ 2002幎以æ¥ãPerlã¯å®æ°ãµãããã°ã©ã ãèšç®ãããã®åŒã³åºãå Žæãèšç®ããã宿°ïŒ
constexpr ïŒã®å€ã«çœ®ãæããã¡ã«ããºã ããµããŒãããŠããŸãã
ïŒ*ïŒäŸ¿å©ãªãã¡ã€ã«æ€èšŒæŒç®åïŒ
-rwxoRWXOezsfdlpSbctugkTBMAC ïŒã
use strict; if (-e '/tmp' and -d '/tmp') { print '/tmp is directory', "\n"; }
ïŒ*ïŒæŒç®å
<> ã ããã€ãã®æ©èœãå®è¡ããŸãã ãŸããçŸåšã®ãã£ã¬ã¯ããªå
ã®ãã³ãã¬ãŒãã§ãã¡ã€ã«ãæ€çŽ¢ããããã«äœ¿çšã§ããŸãïŒãšããã§ãæ€çŽ¢æ¹æ³ã¯å€æŽã§ããŸããããã©ã«ãã§
ã¯globã䜿çšãããŸãïŒã
print join ',', <*.pl>, "\n";
第äºã«ããã¡ã€ã«èšè¿°åããããŒã¿ãèªã¿åãããã®æŒç®åã§ãã ããã«ãã¹ã«ã©ãŒã³ã³ããã¹ãã§ã¯ãããŒã¿ã1è¡ãã€èªã¿åãããªã¹ãã³ã³ããã¹ãã§ã¯ããã¡ã€ã«ã®è¡ãå®å
šã«é
åã«èªã¿åããŸãã
open F, '<somefile' or die; my @random = <F>;
ãããŠæåŸã«ã空ã®
<>æŒç®åã¯ãããã°ã©ã èµ·åã®åŒæ°ã§æž¡ãããååã®ãã¡ã€ã«ããèªã¿åããŸãã 1ã€ã®å€§ããªãã¡ã€ã«ã§äœæ¥ããŠããå Žåã®ããã«ãæç€ºçã«ãããè¡ããŸããã ããã°ã©ã ãåŒæ°ãªãã§èµ·åããã
å Žå ã
STDINããèªã¿åã
ãŸã ã ãã¡ã€ã«ãéãããéãããããããšãå¿é
ããå¿
èŠããªãã®ã§ãããã¯|ãéããŠçµåããããã€ãã©ã€ã³ããã°ã©ã ã®éçºã«éåžžã«äŸ¿å©ã§ãã ãã®æŒç®åãé©çšãããšã
catã³ãã³ãã®é¡äŒŒç©ã1è¡ã§å®è£
ãããŸãã
print while (<>);
ïŒ*ïŒäŸ¿å©ãªããã©ã«ã倿°
$ _ ã ã»ãšãã©ã®æšæºPerlã«ãŒãã³ãšæŒç®åã¯ãããã§åäœã§ããŸãã颿°ã®å
¥ååŒæ°ãçç¥ãããŠããå Žåã¯ããã®äœ¿çšããå§ãããŸãã ããã«ãããããç°¡æœãªã³ãŒããèšè¿°ã§ããå ŽåããããŸãã
use strict; while (<>) { print if (s/^print\s*(.*)/$1/); }
ïŒ*ïŒ Perlã§ã¯ãå²ãåœãŠçµæã¯
巊蟺å€ã§ãã ãããã£ãŠãPerlã§ã¯ãå²ãåœãŠäžã«å€ã倿Žã§ããŸãã
($new = $old) =~ s/bad/good/g;
ïŒ*ïŒæååã«é©çšãããã€ã³ã¯ãªã¡ã³ãæŒç®åã¯ãæåã»ããããæ¬¡ã®é åãè¿ããŸãã
my $a = 'aa'; print ++$a, "\n";
ïŒ*ïŒããã·ã¥ãšé
åãä»»æã®æ·±ãã«èªåçã«æ¡åŒµããŸãã ã€ãŸã ãŸã 远å ãããŠããªãããŒã§ããã·ã¥ã«ã¢ã¯ã»ã¹ãããšããã®èŠçŽ ãèªåçã«äœæãããŸãã Perlã¯ãäœæããèŠçŽ ã®ã¿ã€ããæšæž¬ããŸããããšãã°ãå¿åããã·ã¥ãå¿åé
åããŸãã¯ã¹ã«ã©ãŒãäœæã§ããŸãã
my $hash = {}; $hash->{first}->{second}->{third} = 5; print $hash->{first}->{second}->{third}, "\n";
è峿·±ãæ©èœã¯ãé
åå
ã®è² ã®ã€ã³ããã¯ã¹ã®åäœã§ãã è² ã®ã€ã³ããã¯ã¹ã¯ãé
åã®æ«å°ŸããèŠçŽ ãéžæããŸãã
ïŒ*ïŒæååãšåŒçšç¬Šã Perlã1ã€ã®å²ãåœãŠã§è€æ°è¡å
¥åããµããŒãããŠããã®ã¯çŽ æŽãããããšã§ãã
my $doc1 = 'There's More Than One Way To Do It -- 2012'; my $doc2 =<<"_DOC2_"; There's More Than One Way To Do It -- 2012 _DOC2_ print<<"_DOC3_"; There's More Than One Way To Do It -- 2012 _DOC3_
æŒç®å
= <<ã䜿çšãããšãå²ãåœãŠãšåãè¡ã§è€æ°è¡ã®ããã¥ã¡ã³ãã®æäœãç°¡åã«å®è¡ã§ããŸãã ãŸããããã¥ã¡ã³ãã颿°ã«è»¢éããããã«ãã®æŒç®åã䜿çšãããšäŸ¿å©ã§ãã
use strict; sub printAll(@) { print join '', @_; } (my $quote =<<'__QUOTE__')=~s/^\s+//gm; The Road goes ever on and on, down from the door where it began. __QUOTE__ printAll(<<'__GOOD__',<<'__BAD__', $quote); There's More Than One Way To Do It __GOOD__ TIMTOWTDI __BAD__
Perlã¯ãæååãå
¥åãã2ã€ã®æ¹æ³ïŒè§£éãããšè§£éãªãïŒãåºå¥ããŸãã åäžåŒçšç¬Š
'ã䜿çšãããšãæå\ nã¯æ¹è¡ã«å€æãããªããŠããæååã¯ãã®ãŸãŸïŒå€æŽãªãã§ïŒå€æ°ã«å²ãåœãŠãããŸãã äžæ¹ãäºéåŒçšç¬Š
"ã䜿çšãããšãæååãè§£éãããŸã-Perlã¯å€æ°åãæ€åºããŠå€ã§çœ®ãæããéåžžã«å·§åŠã«è¡ããŸããæååãã颿°ãçŽæ¥åŒã³åºãããšãã§ããŸãã
use strict; my $car = { brend => 'Lada', name => 'Kalina', drive => sub { "WEEEEEE!\n"; } };
ãã ããPerlã«ã¯ãæååãšæ£èŠè¡šçŸããšã¹ã±ãŒãããæåãéžæããæš©å©ããããŸãã
print q { ! }; (my $text = "ab c") =~ s{\s}{}g;
Perlã®ãã1ã€ã®éåžžã«äŸ¿å©ãªæ©èœã¯ãæååãšã¹ã±ãŒãæåãšã㊠`ã䜿çšãããšãã®æååã®åäœã§ãã ãã®å ŽåãPerlã¯ã·ã§ã«ã§ãã®è¡ãå®è¡ããã³ãã³ãã®çµæãè¿ããŸãã
print `uptime`;
ïŒ*ïŒ Perlã¯è峿·±ããµãã«ãŒãã³å±æ§ã¡ã«ããºã ããµããŒãããŠããŸãã Javaããã®
泚éã§é¡æšã§ããŸãã 屿§ã¯ãã³ãã³ã䜿çšããŠãµãã«ãŒãã³å®£èšã§æå®ãããŸãã ä»»æã®æ°ã®ãã«ããŠãŒã¶ãŒå±æ§ã宣èšã§ããŸãã çµã¿èŸŒã¿å±æ§
methodããã³
lvalueããããŸãã ãã°ããã
巊蟺å€å±æ§ã«ããããµãã«ãŒãã³ã¯
巊蟺å€ãšããŠæäœã«åå ã§ããŸãã ãã®ãããããšãã°ãåãã«ãŒãã³ã§
getã¡ãœãããš
setã¡ãœãããå®è£
ã§ããŸãã
my $_name = '?'; sub name(;$): lvalue { $_name = shift || $_name } name = 'caiiiycuk'; print name(), "\n";
ïŒ*ïŒé¡èãª
AUTOLOADã¡ã«ããºã ã«ããã
宣èšãããŠ
ããªãã«ãŒãã³ãžã®åŒã³åºããåŠçã§ããŸããããã¯ãããã°ã©ã ãéšåçã«åçã«ããŒãããããã«ãã䜿çšãããŸãã Perlããµãã«ãŒãã³å®£èšãèŠã€ããããªãå Žåã颿°ã·ã°ããã£ã§
AUTOLOADåŒã³åºããåŒã³åºãã倱æããå Žåã®ã¿ãšã©ãŒãã¹ããŒããããšãæå³ããŸãã ããšãã°ã
AUTOLOADã䜿çšãããšãããèªäœãïŒ
ã·ã§ã«ã¢ãžã¥ãŒã«ã®ããã«ïŒPerlã¹ããŒãã¡ã³ãã§ãããã®ããã«ãã·ã¹ãã 颿°ãããæç¢ºã«åŒã³åºãããšãã§ããŸãã
use strict; sub AUTOLOAD { my $program = our $AUTOLOAD; $program =~ s/.*:://; system($program, @_); } sub uptime(); sub echo(@); uptime; echo "AUTOLOAD";
ïŒ*ïŒ tie-ã¹ã«ã©ãŒãé
åãããã·ã¥ã®å
éšå®è£
ã眮ãæããã¡ã«ããºã ã ãã®ã¡ã«ããºã ã䜿çšãããšãé
åãŸãã¯ããã·ã¥ãããŒã¿ããŒã¹ã«çŽæ¥é¢é£ä»ããããšãã§ããããŒã¿ããŒã¹ãžã®èªã¿æžããããŒã¿ããŒã¹ã«èªåçã«è¡šç€ºãããããã«ãªããŸãã ãã®æè¡ã®å¥ã®å¯èœãªã¢ããªã±ãŒã·ã§ã³ã¯ããªãœãŒã¹ã®å²ãåœãŠã§ãã
ïŒ*ïŒ Perlã¯ãã¹ã¬ããã¢ãã«ãšããã»ã¹ã¢ãã«ã®2ã€ã®ãã«ãã¹ã¬ããã¢ãã«ããµããŒãããŠããŸãã ããã»ã¹ã¢ãã«ã«ã¯ã䞊åããŒã¿åŠççšã®èŠªããã»ã¹ã®ããŒã¿ã®å®å
šãªã³ããŒãå«ãæ°ããã·ã¹ãã ããã»ã¹ã®äœæãå«ãŸããŸãã ããã¯ã
forkã³ãã³ãã䜿çšããŠè¡ãããŸãããWindowsã§ã¯ããã»ã¹ã¢ãã«ãå®å
šã«ãµããŒããããŠããŸããããã®äžŠååã¢ãã«ã¯* nixã§ããäžè¬çã§ãã bare fork颿°ã䜿çšããã®ã¯ããŸã䟿å©ã§ã¯ãããŸãããCPANã«ã¯
forkãç°¡åã«äœ¿çšã§ããã¢ãžã¥ãŒã«ããã£ã±ãã§ããããšãã°ãã³ãŒãã¯æ¬¡ã®ããã«ãªããŸãã
use strict; use Proc::Fork; run_fork { child { print "Process 1\n" while 1; } parent { print "Process 2\n" while 1; } }
ããã»ã¹ã¢ãã«ãšã¯å¯Ÿç
§çã«ãã¹ã¬ããã¢ãã«ã¯éç«ã£ãŠããããããã®ã¹ããªãŒã ã¯ãã¹ãŠã®ããŒã¿ãªãœãŒã¹ãžã®å
±æã¢ã¯ã»ã¹ãæã¡ããã®ãããªã¹ããªãŒã ã¯Javaã¹ããªãŒã ã«äŒŒãŠããŸãã ã¹ã¬ãããµããŒãã¢ãžã¥ãŒã«ã¯
ThreadãšåŒã°ããæç¢ºãªã³ãŒããæžãã®ã«åœ¹ç«ã€éåžžã«äŸ¿å©ãªéåæé¢æ°ãæäŸããŸãã
use Thread 'async'; my $thread1 = async { sleep 5; return 1; }; my $thread2 = async { sleep 2; return 2; }; print $thread1->join(), "\n"; print $thread2->join(), "\n";
ã¹ã¬ãããåæããã¡ã«ããºã ããµããŒããããŠããŸãïŒãã¥ãŒããã¯ã¹ãã»ããã©ãã¹ãªãŒãç¶æ
ã«é¥ããæ¡ä»¶ã«ãã£ãŠã¹ã¬ãããèµ·åããŸãã
ïŒ*ïŒ pack /
unpackã®åŒ·åãªæ©èœã«ãããPerlæ§é äœããã€ãé
åã«ããŸãã¯ãã®éã«å€æã§ããŸãã ãã€ããªããŒã¿ãèªã¿åããä»»æã®å€æãè¡ãå Žåã«éåžžã«äŸ¿å©ã§ãã
ïŒ*ïŒ OOPãšPerlãããããããããç§ãè€éãªæ°æã¡ã«ãããå¯äžã®ãã®ã§ãã ããã¯JavaScriptã«ãããã®ãšéåžžã«ãã䌌ãŠãããããèšèªã«ã¯OOPæ©èœã«å¯Ÿããç¹å¥ãªãµããŒãã¯ãããŸãããããã¹ãŠã®OOPãã©ãã€ã ã¯å®çŸå¯èœã§ãããéåžžã«å®è¡å¯èœã§ãã ããããæã«ã¯æŸèæã®ãããªæããããŸãã ãªããžã§ã¯ãã«ã¯ãä»»æã®ã¹ã«ã©ãŒãé
åããŸãã¯ããã·ã¥ããŒã¿æ§é ã䜿çšã§ããŸãã
ç¹å¥ãªã³ãã³ãã䜿çšããŠããã®ã¢ã¯ã·ã§ã³Perlããã®ãªã³ã¯ããªããžã§ã¯ãã§ããããšãç¥ã£ãåŸãããŒã¿æ§é ãžã®ãªã³ã¯ããªããžã§ã¯ãã«ç¥çŠãããŸãïŒblessïŒããã®ãªããžã§ã¯ãã®ã¡ãœããã¯ããªã³ã¯ãç¥çŠãããããã±ãŒãžã§æ€çŽ¢ããå¿
èŠããããŸãããããã£ãŠãã³ã³ã¹ãã©ã¯ã¿ãŒã®å€å
žçãªæŠå¿µã¯ãããŸãã;ã³ã³ã¹ãã©ã¯ã¿ãŒã¯ãç¥çŠãããããŒã¿æ§é ãè¿ããµãã«ãŒãã³ã§ãã Perlã¯ããªããžã§ã¯ãã®ã¡ãœãããåŒã³åºãéæ¥åœ¢åŒããµããŒãããŠããŸã;ãã®åœ¢åŒã§ã¯ãã¡ãœãããæåã«æ¥ãŠã次ã«ãªããžã§ã¯ããžã®åç
§ããããŠã¡ãœããã®åŒæ°ã ããæ¥ãŸãããã®ãããæ°ããã¡ãœããã®åŒã³åºãã¯æåŸ
ã©ããã«èŠãããããããŸããããéåžžã®ã¡ãœãããåŒã³åºããšãããã®åœ¢åŒã®èšè¿°ã¯å¥åŠã«èŠãããããããŸããã { package Dog; sub new { my $class = shift; return bless { name => shift }, $class; } sub gav { my $self = shift; print "$self->{name}: gav\n"; } } { my $dog = Dog->new('Mona'); $dog->gav(); } { my $dog = new Dog 'Sharik'; gav $dog; }
Perlã®OOPã¯å€éç¶æ¿ããµããŒãããŸããuse fieldsãã©ã°ãã䜿çšãããšãã³ã³ãã€ã«æ®µéã§ç䌌ããã·ã¥ã䜿çšããŠã¯ã©ã¹ãã£ãŒã«ããžã®åŒã³åºãããã§ãã¯ãããããã©ã€ããŒãã¯ã©ã¹ããŒã¿ãå®è£
ãããããããšãã§ããŸãã { package Foo; use fields qw(foo); sub new { my Foo $self = shift; $self = fields::new($self); $self->{foo} = 10; return $self; } } my Foo $var = Foo->new; $var->{foo} = 42;
æ®å¿µãªãããã¯ã©ã¹ã¡ãœããã¯ãããã¿ã€ããæã€ããšãã§ããªããããã¡ãœããåŒã³åºããšåŒæ°ã®åãæž¡ãã®æ£åœæ§ãæ€èšŒããæ©èœã倱ããŸãããããã¯æ®å¿µã§ããPerlã¯ãªããžã§ã¯ããã¹ãã©ã¯ã¿ãŒããµããŒãããŠããŸããïŒ*ïŒç¹å¥ãªã©ãã«__DATA__ã¯ãã¹ã¯ãªããã®çµããã瀺ããŸãããã®ã©ãã«ã®åŸã®ãã¹ãŠã®ããã¹ãã¯ãç¹å¥ãªãã¡ã€ã«èšè¿°åDATAãä»ããŠããã°ã©ã ã§äœ¿çšã§ããŸããããã¯ãããŒã¿ãšãã¹ãèªäœãåé¢ã§ããªãå Žåã«å°ããªãã¹ããäœæããã®ã«éåžžã«äŸ¿å©ã§ãããã ããPerlã®ãã¹ãã·ã¹ãã å
šäœã¯äŸ¿å©ã§ããããã¹ãŠã®åçèšèªã«åºæã®ãã®ã§ãã use strict; my @content = <DATA>; print join '', @content; __DATA__ A B C
ïŒ*ïŒèšå€§ãªæ°ã®Perlã³ãã³ããã©ã°ã«ããââããã¡ã€ã«ãåŠçããããã®å¯èœãªéãçãåäžè¡ãã¡ã€ã«ãæžã蟌ãããšãã§ããŸããããšãã°ã-nãã©ã°ã¯ãåã«èª¬æããwhileïŒ<>ïŒã«ãŒãã§ã¹ã¯ãªãããã©ããããŸããã€ãŸããcatã®ã¢ããã°ã¯æ¬¡ã®ããã«æžãããšãã§ããŸãã perl -ne "print;" file1 file2 ... fileN
ïŒ*ïŒã³ãŒããžã§ãã¬ãŒã¿ãŒãäœæããéåžžã«è峿·±ãæ©äŒã§ããã³ãŒããã³ã³ãã€ã«ãããšãPerlããã°ã©ã ã¯ã¹ããŒãã¡ã³ãã®ã°ã©ãã«ãªããŸãããã®ã°ã©ãã¯ãéåžžã®å®è¡äžã«Perlã€ã³ã¿ãŒããªã¿ãŒã«è»¢éãããŸããããã®ã°ã©ãã§ã¢ã¯ã·ã§ã³ãå®è¡ããããšã«ããããã®åäœã倿Žã§ããŸããããšãã°ãåçŽã«ã°ã©ãå
šäœããã¡ã€ã«ã«ã·ãªã¢ã«åããå¥ã®ã³ã³ãã¥ãŒã¿ãŒã§èªã¿åããã³ã³ãã€ã«æ®µéãçç¥ããŠPerlã®è§£éã«æž¡ãããšãã§ããŸãããã®ãã¯ãããžãŒã®ããè€éãªã¢ããªã±ãŒã·ã§ã³ã¯ãPerlããã°ã©ã ããã®CãŸãã¯C ++ã³ãŒãã®çæã§ãããžã§ãã¬ãŒã¿ãŒB :: Cããã³B :: CCPerlã䜿çšããå Žåãããã°ã©ã ã¯ã¿ãŒã²ããèšèªã®ãœãŒã¹ã³ãŒãã«å€æããããã®åŸãã·ã³ã³ãŒãã«ã³ã³ãã€ã«ãããPerlã€ã³ã¿ãŒããªã¿ãŒãªãã§å®è¡ã§ããŸããã³ãŒããžã§ãã¬ãŒã¿ãŒã«å ããŠãPerlã«ã¯ã³ãŒããã£ã«ã¿ãŒããããã³ã³ãã€ã«ãšè§£éã®åã«ããã°ã©ã ã®ãœãŒã¹ã³ãŒããä»»æã«å€æã§ããŸããå¿
èŠã«å¿ããŠç¬èªã®èšèªãå®å
šã«äœæã§ããŸããïŒ*ïŒã¿ã°ä»ãããŒã¿ã¢ãŒãããã®ã¢ãŒãã§ã¯ãPerlã¯æãããªé ããã»ãã¥ãªãã£ããŒã«ãé¿ããããã«ç¹å¥ãªäºé²æªçœ®ãåããŸããååã¯åçŽã§ããããã°ã©ã ã®å€éšããååŸããããŒã¿ã䜿çšããŠãããã°ã©ã ã®å€éšã«ããä»ã®ãã®ã«åœ±é¿ãäžããããšã¯ã§ããŸãããå€éšããããã°ã©ã ã«å
¥ãããŒã¿ã¯ãçãããèµ·æºã®ããŒã¿ãšããŠãããŒã¯ããããŸããã©ãã«ä»ãããŒã¿ã¯ããã·ã§ã«ããåŒãèµ·ããæäœãããã³ãã¡ã€ã«ããã£ã¬ã¯ããªããŸãã¯ããã»ã¹ã倿Žããæäœã§çŽæ¥ãŸãã¯éæ¥çã«äœ¿çšããããšã¯ã§ããŸããããããã£ãŠãå€ãã®ã»ãã¥ãªãã£åé¡ãåé¿ãããŸãããµãŒããŒã§ã¹ã¯ãªãããå®è¡ãããšãã¯ãã©ãã«ä»ãããŒã¿ã¢ãŒãã䜿çšããã®ãé©åã§ããããšãã°ãSafeã¢ãžã¥ãŒã«ãªã©ãã»ãã¥ãªãã£ãããã«åäžãããã¢ãžã¥ãŒã«ããããŸãã
ïŒ*ïŒ PSGI / Plackã¯ãWebãµãŒããŒç°å¢ãWebãã¬ãŒã ã¯ãŒã¯ã³ãŒãããåé¢ããããã«èšèšããã仿§ã§ããç°¡åã«èšãã°ãããã¯Javaã®äžçã®ãµãŒãã¬ããã³ã³ããã®ãããªãã®ã§ãããã®ä»æ§ã䜿çšããŠWebã¢ããªã±ãŒã·ã§ã³ãäœæããPSGIããµããŒããããµãŒããŒã§å®è¡ããŸããPSGIã«ã¯éåžžã«å€ãã®ãµãŒããŒããããŸãã 詳现ïŒ*ïŒãŸããPerlã¯å¿å°ããææ
ã®æµ·ã§ãããACMEã¢ãžã¥ãŒã«ã®ã»ããã«ãããŸãããããšãã°ãACME :: EyeDropsã¢ãžã¥ãŒã«ã䜿çšãããšãPerlããã°ã©ã ãæ©èœããASCIIã¢ãŒãã«å€æã§ããŸããbuffyãã¡ã³ã¢ãžã¥ãŒã«ããããããã䜿çšããŠãbuffyãšããåèªã䜿çšããŠã®ã¿ããã°ã©ã ãäœæã§ããŸãããŸãã¢ãžã¥ãŒã«ACME ::ãã£ãã¯ã»ããªã¹ã¯ãèªèº«ã®ããã«èªã£ãŠããŸããããã«ãPerlã®è©©ããããŸã-ããã¯Perlã®èгç¹ããã®æå¹ãªæ§æã§ããã人éã®èгç¹ããã®è©©ã¯ãã®èšäºã®ã¿ã€ãã«ã®1ã€ã§ãããã£ãŠãã£ãããïŒ
1ã ããç§ã®Perlã¯ãããªãã¯TIMTOWTDI ãšã¯éãèãæ¹ããããããããªããšæã2ç§ã®æèŠã«èå³ãããPerlã®æ©èœ