ãããããåžãããšããèšèã¯ããŸãã«ãç²éã§ããã
ããªãCãæªãããããŠ
ããªãC ++ãæªããããã¯ããããæ£ããèŠåºãã§ãã
ãŸããPerlãçŸåšç§ã®ãæ°ã«å
¥ãã®èšèªã§ããããšãæããŠãã ãã
ããã°ã©ãã³ã°ã ç§ã¯åœŒã®åã圌ã®åªé
ãããããŠã
ãšããããç§ã¯åœŒã®è¡šçŸåã倧奜ãã§ãã ããããPerlã
確ãã«æ¬ é¥ããªãããã§ã¯ãããŸããã
ãã®èšäºã®å£èª¿ã¯åŠå®çãªãã®ãšã¯èããããŠããŸããã ç¥ã£ãŠãããšåœ¹ã«ç«ã€ãšæããŸãã
䜿çšãããŠããããã°ã©ãã³ã°èšèªãç¹ã«äººæ°ã®ããèšèªã®åŒ±ç¹ã«ã€ããŠã
ãã®ããããããã®åŒ±ç¹ãä»ã®èšèªã«è©²åœããªãããšã確信ããŠããŸãã
ã ãããããã«Perlã®åé¡ã®ãªã¹ãããããŸãïŒ
ãªããžã§ã¯ãã®ç¶æ¿ã¯ãããŸããã
Perlã®ç¶æ¿ã¯ã ISAé
åãä»ããŠå®è£
ãããŸãïŒ
ãããã¯åé¡ã§ãããªã©ïŒ
ããããã±ãŒãžããå¥ã®ããã±ãŒãžãžã®ç¥çŠããããªã³ã¯ãä»ããã¡ãœããã
ããšãã°ãSomeClassã®ã°ããŒãã«ã«SomeOtherClassãå«ãŸããŠããå Žå
ISAé
åãSomeOtherClassã¡ãœãããçŽæ¥åŒã³åºãããšãã§ããŸã
SomeClassã®bless-nutyãªã³ã¯çµç±ã
æ®å¿µãªããããªããžã§ã¯ããç¶æ¿ããæ¬åœã®æ¹æ³ã¯ãããŸãã
Perlã®å¥ã®ã¯ã©ã¹ã®å Žåãã¡ãœããã®ã¿ãç¶æ¿ã§ããŸãã éåžž
åé¿çã§äœ¿çš-å¿
èŠãªã¯ã©ã¹ã®ã³ã³ã¹ãã©ã¯ã¿ãŒãã
ç¶æ¿ãããšãã¯ã©ã¹ã®ã³ã³ã¹ãã©ã¯ã¿ãŒãåŒã³åºããã
ãªããžã§ã¯ããååŸããç¬èªã®ãã£ãŒã«ããããã·ã¥ã«è¿œå ããŠããã
ãªããžã§ã¯ããã¯ã©ã¹ã«å床bless-nullããŸãã
ããã±ãŒãžSomeClass;
SomeOtherClassã䜿çšããŸãã
@ISA = 'SomeOtherClass';
sub new {
ç§ã®$ class = shift;
ïŒæ°ããSomeOtherClassãªããžã§ã¯ããäœæããŸãã
ç§ã®$ self = $ class-> SUPER :: new;
ïŒãããå°ç¡ãã«ïŒ
$ self-> {'_ something'} = 1;
$ self-> {'_ something_else'} = 2;
ïŒä»ããããSomeClassã«ç¥çŠããŸãïŒ
blessïŒ$ selfã$ classïŒ;
$ selfãè¿ããŸãã
}
1;
åé¡ã¯ãã«ãã»ã«åã®æ³åŸã«éåããŠããããšã§ã
æœè±¡åïŒãªããžã§ã¯ãã®å®è£
ã®è©³çŽ°ãç¥ãå¿
èŠããããŸãã
ããªãã¯ãããç¶æ¿ããŸã
ãã®ãã£ãŒã«ãã¯çŽæ¥ã 1ã€ã®ã°ããŒãã«å€æ°ã宣èšã§ããŸã
ããã±ãŒãžåãããããã®å€æ°ãæäœããããã·ãŒãžã£ãäœæããŠããã
ãããã®æé ãç¶æ¿ããŸãããããã§ã¯ãããŸããã
ç¡æ°ã®ãªããžã§ã¯ãæåã¢ãžã¥ãŒã«ã§
CPAN Perlã¯ããšããšçŽç²ã«èšèšãããŠããããšãå¿ããã¡ã§ã
æ§é ããã°ã©ãã³ã°èšèªã ãã®ãããªç¬éã¯ãããå®å
šã«æ確ã«ããŸãïŒ
Perlã®ãªããžã§ã¯ãæåã¯ãæ¬åœã«ç¥çŠããããªã³ã¯ãšã»ãã®å°ãã«ãããŸãã
æ§æç³ã
åç
§ã«ãŠã³ã¿ãŒã
Perlã¯ã¬ããŒãžã³ã¬ã¯ã¿ãŒã®åç
§ã«ãŠã³ã¿ãŒã䜿çšããŠãç°¡åãªæ¹æ³
ã¿ã€ã ãªãŒãªãªãªãŒã¹ãä¿èšŒããã¡ã¢ãªç®¡ç
æªäœ¿çšã®ãªãœãŒã¹ã ãã¹ãŠã®ã¹ã«ã©ãŒãé
åãããã·ã¥ããã®ä»ã®ãã®
1ã§å§ãŸãçµã¿èŸŒã¿ã®åç
§ã«ãŠã³ã¿ãŒã æ¯å
ãã®å€æ°ã®ãªã³ã¯ãäœæããããšãåç
§ã«ãŠã³ã
å¢å ããŸãã ãªã³ã¯ãåé€ããããšãã«ãŠã³ã¿ãŒãæžå°ããŸãã ããã€ãã§
æåŸã®ãªã³ã¯ãåé€ãããã«ãŠã³ã¿ãŒããŒãã«ãªã£ãç¬éã
ãã®å€æ°ã«äœ¿çšãããŠããã¡ã¢ãªã¯è§£æŸãããŸãã
ãã®åé¡ã¯ãçžäºã«åç
§ãã2ã€ã®å€æ°ãããå Žåã«çºçããŸã
芪ããã·ã¥ãšåã®ããã·ã¥ã®ãããªå人ã
çžäºãªã³ã¯ã 誰ã®ã«ãŠã³ã¿ãŒãæžããããšãã§ããªãã®ã§
æåŸã®ãªã³ã¯ãç Žæ£ããããŸã§ãŒãã«ãªããŸãã
2çªç®ã解æŸããããŸã§è§£æŸããããã®çµæãäž¡æ¹ãæ®ããŸã
ã¡ã¢ãªã«ãã³ã°ã¢ããããŸãã ããã¯ã埪ç°åç
§ãšåŒã°ãããã®ã§ãã
ïŒè¿œå æ
å ±ãåç
§ããŠãã ããïŒ
http://www.perl.com/pub/a/2002/08/07/proxyobject.html
ïŒ
ããã¯ãPerlã®ã¡ã¢ãªãªãŒã¯ã®ä¿®æ£ãäºæ³å€ã«ç°¡åã§ããããšãæå³ããŸãã
å€ãã®ææãªPerlããã«ãŒãå¶ç¶ãããè¡ã£ãã 圌ãã¯èããïŒ
ãã¯ãããã®ãªããžã§ã¯ãã«èŠªãžã®åç
§ãå«ãŸããŠãããšäŸ¿å©ã§ãã
éããŸãåæ§ã§ãããšãã¡ã¢ãªãªãŒã¯ãçºçããŸãã
åç
§ã«ãŠã³ã¿ãŒã䜿çšããã®ã¯ãPerlã ãã§ã¯ãããŸãããVB
PHPã®ããã«ãPythonã¯ãŸã 䜿çšããŠããŸãã
ãããããªã³ã¯æ°ã®æ倧ã®åé¡ã¯äœåãªãã®ã§ã
XSæ¡åŒµæ©èœã®äœæè
ã«ããŒãããŸãã ã«ãŠã³ã¿ãŒã¯ããããäœãåºã
ã³ãŒãå
šäœã§SvREFCNT_incïŒïŒããã³SvREFCNT_decïŒïŒãåŒã³åºãããããå¶åŸ¡ããŸã
åSvREFCNT_incïŒïŒã«ã¯ã察å¿ããSvREFCNT_decïŒïŒããããŸãã ãªã«
次ã®è¿·æã«ç§ãå°ããŸã...
çŽæçãªAPIã§ã¯ãããŸããã
Perl C APIã¯ããªã奜å¥å¿isçã§ãã ãŸããç®ã«èŠãããã®ã¯ãããŸãã
åœåèŠåã ããã€ãã®ããã·ãŒãžã£åãæ··åšããŠããŸã
ã±ãŒã¹ãããšãã°newSVivïŒïŒããã®ä»ã«ã¯
ã¢ã³ããŒã¹ã³ã¢ãããšãã°ãnewRV_noincïŒïŒã å€ãã®å€æ°åãš
æ§é äœã®ã¡ã³ããŒã«ã¯çãååããããŸãã
é·ãã¯ãCurãããµã€ãºã¯ãlenãã
APIã«ã¯ãã¯ããããããããããã®å€ãã¯ããã¥ã¡ã³ãåãããŠããŸãã
perlapiãŸãã¯ãã®ä»ã®ããã¥ã¢ã«ããŒãžïŒHvKEYSïŒïŒãªã©ïŒ
ãããŠã人çãããã«é¢çœãããããã«ã
ææžåãããŠããããã«ãŠã³ã¿ãŒãå€æŽãããã©ããã¯ããèšãããªã
åŒæ°ãžã®åç
§ã
ã¹ã«ã©ãŒã³ã³ããã¹ãã§ã®é
å/ãªã¹ãã®éçŽæçãªåäœã
ç§ã¯ã次ã®ãããªäœåãªæ¬åŒ§ã§ã³ãŒããæžãã®ã¯æ¬åœã«å¥œãã§ã¯ãããŸããïŒ
myïŒ$ first_fieldïŒ= splitïŒ/ \ t /ã$ tab_delimited_fieldsïŒ;
äœããã®é¢æ°ããè¿ããããªã¹ããŸãã¯é
åã劚害ããããã
ãµããŸãã
Perlã§ã¯ãé
åã¯ã¹ã«ã©ãŒã§äœ¿çšãããšãµã€ãºãè¿ããŸã
ã³ã³ããã¹ããããã³ãªã¹ãïŒäŸïŒããã°ã©ã ããã¹ãã®ãïŒ70ã80ã90ïŒãïŒ
æåŸã®ã¢ã€ãã ãè¿ããŸãã ãŸããäžè¬çãªç®çã®ããã«
ãªã¹ããšé
åã®éããå°å
¥ããŸãããïŒ ç¬¬äºã«ããã€ããªã
ã¹ã«ã©ãŒã³ã³ããã¹ãã§ãªã¹ãã䜿çšããå¿
èŠãããå ŽåããããŸã
圌ã®æåŸã®ã¢ã€ãã ãååŸããã«ã¯ïŒ
é
åãšãªã¹ãã®äž¡æ¹ãæ©èœããå Žåãã¯ããã«è¯ããšæããŸã
åãã§ããããã®ä»£ããã«ã¹ã«ã©ãŒã³ã³ããã¹ãã®æåã®èŠçŽ ãè¿ããŸãã
é·ããŸãã¯æåŸã®ã¢ã€ãã ã 次ã«ã次ã®ãããªã³ãŒããèšè¿°ã§ããŸãã
ç§ã®$ email_address = $ input =ã/ïŒ\ S + \ @ \ S +ïŒ/;
圌ã¯åãã ããã
ã ãããããªãã¯å°ããŠãé
åã®ãµã€ãºãååŸããŸããïŒ ãããã©ãããŠ
lengthïŒïŒé¢æ°ã䜿çšããŠããŸããïŒ å€ãã®åå¿è
ã¯ãããææ¡ããŸã
ããã ãã§åäœããã¯ãã§ãã
æžåŒ
Perlã®ãã©ãŒãããã¯ããããããã¬ããŒããã®äžéšã§ãã
ãå®çšçãªæœåºãšã¬ããŒãèšèªã-ãã¡ãããPerlãã¯
é åèªã§ã¯ãªããªããæ£çŽã«èšããšã
䜿çšãããŠãããã©ãŒãããïŒ å®éãã©ã®ããã«èŠããŠããŸãã
圌ãã¯äœ¿çšããæš©å©ããããŸããïŒ
Perlã®ãã®å€§ãããå®å
šã«ç¡èŠãããéšåã¯ãããŸããŸãªæ¹æ³ã§åžã蟌ãŸããŸãã
çç±ã
ãŸãããã©ãŒããããå®çŸ©ããããã®æ§æã¯åä»ã§ãïŒçŽ20
ãŸãã¯ãæåã<ãã次ã
ã«ïŒïŒãã°ããŒãã«ïŒããªã
ã©ããã«ãããã§çµãã倧ããªãããã¯ãå¿
èŠã§ã-ããå¯èœæ§ãé«ã
ããªãã®ã³ãŒãã®äžã«ãããã¹ãŠïŒãšéåžžãšã¯å®å
šã«ç°ãªããŸã
Perlæ§æïŒç¹ã«å¿ããŠããŸãå¯èœæ§ãé«ãããç¹ã«
ããªãã¯ããã䜿çšããããšããªãã®ã§ïŒã
第äºã«ããã©ãŒãããã䜿çšããŠå®å
šãªããšãããããšããè©Šã¿
åé·æ§ã«ã€ãªãããå€ãã®å ŽåãselectïŒïŒé¢æ°ã®äœ¿çšãå¿
èŠã§ãã
writeïŒïŒãåŒã³åºãåã«$ ^ã§å€§éšããã3ã€ã®äœ¿çšã匷å¶ãã
ååãªè¡šçŸãå®çŸããããã®è¡šçŸã ïŒ4
åŒïŒã«ãŠã³ããéžæããŠåŸ©å
ããå ŽåïŒïŒïŒã
第äžã«ããã©ãŒãããã§ã§ããããšã¯ãã¹ãŠãéåžžã¯ã§ããããšã§ã
printfïŒïŒwith sprintfïŒïŒ-ãªãŒã ã ãã©ãŒãããã®æ§æãæ¬åœã«
éåžžã¯è€æ°ã®printfïŒïŒã䜿çšããŠãprintfïŒïŒãããæè»æ§ãé«ã
åé¡ã解決ããããšãã§ããŸããããã¯ãããçããããã¯ãªãŒã³ãªæ¹æ³ã§ãã
ãããããããããã¹ãŠã®ææªã®éšåã¯ãwriteïŒïŒã䜿çšãããããšã§ã
I / OãreadïŒïŒãšããŠå®è¡ãã代ããã«ãååšããªã圢åŒãåºåããã«ã¯ã
ãã®è±èªã®å察ïŒ
ãæžã蟌ã¿ã¯*ãèªã¿åããã®å察ã§ã¯ãªãããšã«æ³šæããŠãã ããã æ®å¿µãªãããã
fromïŒperldoc -f writeïŒã
å®æ°ããã¯ãã¯ãããŸããã
å®éããããã¯2ã€ã®å¥åã®ãã€ã³ãã§ããå¿
èŠããããŸããPerlã§ã¯
å€æ°ãå®æ°ãšããŠå®£èšãŸãã¯å®çŸ©ããç°¡åãªæ¹æ³
å
šäœã«ããžãã¯ãã³ããŒãåæ£ããã代ãããšããŠã®ãã¯ã
ã³ãŒãã
ã¯ããPerlã«ã¯äž¡æ¹ãè¡ãå®æ°ãã©ã°ãããããŸã
å¥ã®ããããããã¯æ¬åœã«åãªãããã¯ã§ãã å·§åŠã§ãšã¬ã¬ã³ããªããã¯ã
ããã«ãããããããããã¯ïŒ
å®æ°PORT => 80ã䜿çšããŸãã
PORTã¯ãå²ãåœãŠã®å³èŸºå€ãšããŠäœ¿çšã§ããããã«ãªããŸããã
ããã¯å®æ°ã®ãããªãã®ã§ãããäœããå²ãåœãŠãè©Šã¿ã¯
èŽåœçãªãšã©ãŒãçºçããŸãã ããããããªããèŠãããã«ãPORTã¯å®éã«ã¯
å®æ°ã§ã¯ãªãããåŒæ°ãªããã®ãããã¿ã€ããæã€åãªãé¢æ°ã§ãã
é¢æ°ããªãŒããŒã©ã€ããããããŸãã¯
ããµãã䜿çšãããŸãã¯çŽæ¥ã·ã³ãã«ããŒãã«ããã
ããã«éèŠãªããšã¯ãå®æ°ã®ç®æšã®1ã€ã¯å¹çã§ãã ãã
ã³ã³ãã€ã©ãŒã«ãšã£ãŠäººçã¯ããç°¡åã§ãå²ãåœãŠãå¿
èŠããããŸããã
å€æ°ã«äœãã ããã§ã¯ãå°ããªã²ã€ã³ã®ä»£ããã«ãperlã
éèš³è
ã¯çç£æ§ã«ãããã€ãªææãåããŸãã
åæ
å ±ã¯ãããŸããã
Perlã§ã¯ãã¹ã«ã©ãŒã«ã¯å€ãŸãã¯å€ãžã®åç
§ãå«ããããšãã§ããŸãã
æ®å¿µãªãããPerlã¯ã©ã®åãèŠã€ããããã®æŒç®åãæäŸããŠããŸãã
ãå€ãã«ã¯ã¹ã«ã©ãŒãå«ãŸããæŒç®åã¯åã決å®ããããã ãã®ãã®ã§ã
ãªã³ã¯ã ããã«ãããããšãã°ã
ç®è¡èšç®ã«ãµããããã¹ã«ã©ãŒæ°
é£ããã ã¯ããPerlããã«ãŒã¯ãã®æ°åãèããããšã«æ
£ããŠããããšãç解ããŠããŸã
ãããŠãæååã¯äº€æå¯èœã§ãããåé¡ã¯ãŸã çºçããããã¯ã°ãããŠããŸã
æ£èŠè¡šçŸãããã«ããæ±ããŠä»¥äžã決å®ããŸãã
ãæ°åãããªãïŒã ïŒ$ thing =ã/ ^ \ d + $ /ïŒ;
ãã¡ããããã®è¡šçŸã¯ããŸãæ©èœããŸããããªããªããæ°åã¯
ã+ããã-ããããããªã©ã®ä»ã®æåãå«ã ãµã€ã³ã瀺ãããã«ã
å°æ°éšãŸãã¯ææ°ã
ctype.hã®é¢æ°ã§ãããäœãããªãããã䟿å©ã§ãã
Perlãæã£ãŠããããã«èŠããã®ã§ãããã¯ããã«åä»ã§ã
SVã«ã©ã®ãããªå€ã®åãããããããªãããæšæž¬ããŸãïŒC-type typedef
ãã©ã°ãã£ãŒã«ãã®å€ã«åºã¥ããŠãã¹ã«ã©ãŒã®å€ãèšè¿°ããïŒã
å¿
èŠã«å¿ããŠç°¡åã«å€æã§ããŸãã
Autovivificationã
autovivifyããã·ã¥ã®ããŒãšå€ã®ãã¢ïŒç¿»èš³è
ã®ã¡ã¢ïŒæ¹æ³ãããããŸãã
ã€ãŸããautovivifyã翻蚳ãããšããæå³ã§-ãäœæããã
èªåçã«ããªã³ã¶ãã©ã€ã§ïŒïŒPerlã§ã ã€ãŸããæå®ã§ããããšãæå³ããŸã
ã¿ã€ããautovivedãã®æ°ããããŒãçºçããŸãã
myïŒ
hash =ïŒkey1 => 'value1'ãkey2 => 'value2'ïŒ;
$ hash {autovived} = 1;
ãŸããããŒåãšãããå°å°ã§ããããšãæå³ããŸã
èŠåãªãã«çºçããŸãã 倧ãããªã
ããã·ã¥ãèŸæžãšããŠäœ¿çšãããšãã®åé¡ã¯ãããŒã
å€ãã®å Žåãä»ã®å Žæããæ¥ãŸããã次ã®ãããªããã·ã¥ã䜿çšãããš
æ§é ãŸãã¯ãªããžã§ã¯ããããã¯åé¡ã«ã€ãªãããŸãïŒ
$ self = {
åå=> undefã
幎霢=> undef
...
ãµãããŒã {
ç§ã®$ self = shift;
$ self-> {Name} = @_ã®å Žåã«ã·ãã;
return $ self-> {name};
}
ããã·ã¥ããªããžã§ã¯ããšããŠäœ¿çšãããšãã¯ãåžžã«å®çŸ©ããŠåæåããŸã
ã³ã³ã¹ãã©ã¯ã¿ãŒå
ã®åããã·ã¥èŠçŽ ã¯ãå°ãªããšããundefãã§ãã
ããŒã¯ãŒããéçãã«äœãäžããªããšãå¹²æžããŸã
åæååŸã«æ°ããèŠçŽ ãããã·ã¥ã«è¿œå ãããŸãã
static my $ self = {
åå=> undefã
幎霢=> undef
...
$ self-> {Name} = shift; ïŒèŽåœçãšã©ãŒ
æãæµ®ãã¶ä»ã®åŒ±ãåºæ¿ãå«ãŸããŸã
æååã®åã®chopïŒïŒã«çžåœãããã®ããªããããé©çšã§ããŸãã
ãã§ãŒã³ããšã®-xãã¡ã€ã«ã®ãã¹ãïŒã-e $ filename && -T
$ filename && -w $ filename "instead of" -e -T -w $ filename "or" -eTw $ filename "ïŒã
binmodeïŒïŒãåŒã³åºãããã®å¥åŠãªæ
£ç¿ãäžå®å®ãªã·ã°ãã«ã
localïŒïŒãªã©ã®ååã®èŠåœèé害ãããã³é¢æ°sizeofïŒïŒã®æ¬ åŠã
ãã®16æ³ã®èšèªã¯ããã°ããã®éçå®ã«èšããã§ããŸãã å€ãã®åœŒ
ã¢ã¹ãã¯ãã¯çŽèŠ³çã§ãªããå¹æçã§ãªããåã«èŠèŠãããªããŸãã
å®è£
ãå€æŽããã®ãé£ãããæ°ããæ©èœãè¿œå ãã
å€ããã®ãå£ãããšãªãéåžžã«å°é£ã«ãªããŸãã
Perl 6ã¯ããããã®åé¡ã®å€ããä¿®æ£ããããšããPerlã³ãã¥ããã£ã«ããè©Šã¿ã§ãã
å®ãªããžã§ã¯ãã®ãµããŒããè¿œå ãããåç
§ã«ãŠã³ã¿ãŒããªããªããŸãã
ã·ã®ã«ïŒ$ã@ãïŒ
ïŒã¯ããçŽæçã«ãªããå€ãã®æ°æ©èœãè¿œå ãããŸãã
è¿œå ãããŸãã
ãã®ãããããŠã³ã®èšèªã®æžãçŽãã¯ãŸã å®å
šã§ã¯ãããŸããããç§ã¯ã
ä»ã®å€ãã®äººãšäžç·ã«ãç±å¿ã«åœŒãåŸ
ã£ãŠããŸãã ãã®æç¹ãŸã§ãç§ã¯ç§ãæã
ç§ã¯ãPerl 5ã䜿çšããŠã»ãšãã©ã®äœæ¥ãç¶ããŸãã