
#!/usr/bin/perl -c Please, listen to, my $words; seek love, joy, happiness for everything; study hard and sleep longer if able; # Perl Poetry, The Sentiment # (c) http://www.perlmonks.org/?node_id=882536
ç æŒ ...
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ã³ã³ãã€ã©ãŒã¯æ°åŠæŒç®ãžã®èª€ã£ãåŒã³åºããæ€åºã§ããŸãïŒäŸãã°ãè² ã®æ°ããã®ã«ãŒãã¯ã³ã³ãã€ã«ãšã©ãŒãåŒãèµ·ãããŸãïŒã 以äžã«äŸã瀺ããŸãã
#!/usr/bin/perl -w use strict; my Dog $aDog = new Dog; # : Dog $aDog->{wings} = '?'; # (. ): feed $aDog; # : sqrt -2; # :
Perlã¯åžžã«ãã®ååã«åŸãããããã®ãã§ãã¯ã®ã»ãšãã©ããªãã«ããã®ã«è²»çšã¯ããããŸããããããã«ã€ããŠã¯åŸã§è©³ãã説æããŸãã
ïŒ*ïŒé¢æ°ãããã¿ã€ãã䜿çšãããšãC ++ã®åæ¹å®£èšã«äŒŒããµãã«ãŒãã³ãšãã®åŒæ°ã®ãªã¹ããäºå宣èšã§ããŸãããããã¿ã€ããããå Žåãã³ã³ãã€ã©ãŒã¯ãµãã«ãŒãã³ãæ£ããåŒã³åºãããããšã確èªãããµãã«ãŒãã³ãåŒã³åºããšãã«ãã¢ã®è§ãã£ããå¿ èŠãšããŸããã
sub feed($$); feed 'Sharik', 'Fruit'; # Ok feed 'Sharik'; # : feed 'Sharik', 'Apple', 'Fruit'; #: sub feed($$) { print shift, ' eat ', shift, "\n"; }
ïŒ*ïŒ$ @ïŒ ã Perlã¯ãç®çã«å¿ããŠå€æ°ãåé¢ããŸãïŒ ' $ 'ã¹ã«ã©ãŒïŒæ°å€ãè¡ããªã³ã¯ïŒã ' @ 'é åïŒã¹ã«ã©ãŒã®ã·ãŒã±ã³ã¹ïŒã ' ïŒ 'ããã·ã¥ïŒã¹ã«ã©ãŒã®é£æ³é åïŒã ã芧ã®ãšãããå€å žçãªããªããã£ãåã¯ã¹ã«ã©ãŒã§è¡šãããŠããŸãã ãã ãããããã¯ã³ã³ããããå³å¯ã«åé¢ãããŠãããããã³ã³ãã€ã©ã¯è¿œå ã®ãã§ãã¯ãå®è¡ã§ããé¢åãã解æŸãããŸãã Perlã¯ãã®åã®å ¥åãèš±å¯ããŠããŸããïŒOOPã®å Žåãè²æ©ãå°å ¥ãããŠããŸã-çµã¿èŸŒã¿åã®ããããã¯ã©ã¹ã«å å³ã§ããŸãïŒã ãã®ãããªæ確ãªåé¢ã«ãããåãé åã§ããã¹ãŠã®ã¿ã€ãã®ç«¶åããªãå€æ°ãæã€ããšãã§ããŸãã
#!/usr/bin/perl -w use strict; my $solarSystem = 'Mercury Venus Earth Mars Jupiter Saturn Uranus Neptune'; my @solarSystem = qw(Mercury Venus Earth Mars Jupiter Saturn Uranus Neptune); my %solarSystem = (haveLife => 1, havePerl => 1); sub solarSystem() { print 'Mercury Venus Earth Mars Jupiter Saturn Uranus Neptune'; }
Perlã®åæäœã¯ãå®è¡ã³ã³ããã¹ãã«é¢é£ããŠåé¢ã§ããŸããã Perlã¯ã空ïŒã³ã³ããã¹ããªãïŒãã¹ã«ã©ãŒãããã³ãªã¹ãã®3çš®é¡ã®ã³ã³ããã¹ããç解ããŸãïŒããšãã°ãã¹ã«ã©ãŒå€æ°ã«å€ãå²ãåœãŠããšãã¹ã«ã©ãŒã³ã³ããã¹ãã圢æããé åã«å²ãåœãŠããããªã¹ãã³ã³ããã¹ããããã·ã¥ããŸãïŒã Perlã«ãŒãã³ã¯å®è¡ã®ã³ã³ããã¹ãã決å®ããããšãã§ãããããã£ãŠãç°ãªãã³ã³ããã¹ãã§ç°ãªãåäœãããããšãã§ããåµé æ§ã®äœå°ãäžããŸãã
ãã®èšèªã«ã¯ãã€ã³ã¿ãŒæŒç®ã¯ãããŸãããããªã³ã¯ããããŸãã ãµãããã°ã©ã ãžã®åŒæ°ã¯åç §ã«ãã£ãŠæž¡ãããŸãããä»£å ¥æŒç®åã¯å€æ°èªäœã®å€ãã³ããŒããŸãïŒã¹ã«ã©ãŒã ãã§ãªãã³ã³ãããã³ããŒãããŸãïŒã ãããã£ãŠãå€ã«ãã£ãŠãµãã«ãŒãã³ã«åŒæ°ãæž¡ãããšã¯ç°¡åã«å®è£ ãããŸãã ããã«ãPerlã§æžãå€å žçãªãµãã«ãŒãã³ã¯ãå€æž¡ããã€ãŸã åŒæ°ã«å¯äœçšãå°å ¥ããŸããã
#!/usr/bin/perl -w use strict; sub upper { my $value = $_[0]; # $value $value = uc $value; # $_[0] = $value; # } my $bigLetters = 'big-letters'; upper $bigLetters; print $bigLetters, "\n"; # BIG-LETTERS
ïŒ*ïŒ ãªãã¬ãŒã¿ãŒã®ãªãŒããŒããŒã ïŒãŸãã«ãå¿ èŠãªå ŽåïŒã ã¹ããŒã¹ãã³ã³ã以å€ã®ã»ãšãã©ãã¹ãŠããªãŒããŒããŒãã§ããŸããããããã誰ããã³ã¡ã³ãããªãŒããŒããŒãã§ãããšèããããšã¯ãããŸããã å®æ°ïŒæ°åãæåãåèªïŒããªãŒããŒããŒãã§ããå¯äžã®èšèªïŒç§ã«ç¥ãããŠããïŒã ããã¯ãããšãã°ãå®æ°ãšããŠå ¥åããããã¹ãŠã®æ°å€ããè€çŽ æ°ãè¡šãåçã®ãªããžã§ã¯ãã«çœ®ãæããããã«äœ¿çšã§ããŸãã ãŸãã¯ãç¡å¶éã®å€ã®æ°åã䜿çšããŸãã
# BigMath.pm package BigMath; use overload; use Math::BigInt; sub import { overload::constant integer => sub { Math::BigInt->new(shift) }; } 1; # BigMath.pl { use BigMath; my $bigInt = 2123; # BigInt print $bigInt->as_bin(); # 0b100001001011 } { my $int = 2123; print $int->as_bin(); # as_bin() }
Perlã䜿çšãããšãæšæºèšèªã«ãŒãã³ããªãŒããŒããŒãã§ããŸãã
ïŒ*ïŒ æ£èŠè¡šçŸã¯ Perlã«æ·±ãçµ±åãããŠããŸãã éåžžã®æ£èŠè¡šçŸãã¿ãŒã³ã«å ããŠãPerlã¯ãã®æ¡åŒµæ©èœããµããŒãããŠããŸãã ããšãã°ãPerlã§ã¯ãæ€çŽ¢ãã¿ãŒã³ããã³çœ®æãã¿ãŒã³ã§çŽæ¥Perlã³ãŒãã䜿çšã§ããŸãã
my $math = '100 + 200 = 300'; $math =~ s/(\d+)/$1 * 2/ge; # 2 print $math, "\n"; # 200 + 400 = 600
æ£èŠè¡šçŸã¯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; #sub transaction(&$); #sub update($$$); #sub set(+); #sub where(+); #sub rollback(&); #sub throw($$); transaction { update 'user', set { name => 'caiiiycuk' }, where { id => '1' }; } rollback { throw 500, "rollback exception"; }
Perlã¯try / catch / finally ãããã¯ããµããŒãããŠããŸãããããããã¯ã«ãŒãã³ãåä¿¡ããããšã§ç°¡åã«å®è£ ã§ããŸãã æ£ç¢ºã«if / elseããããã¯ãåãå ¥ãããããif / else if / elseã®æ§æã¯Perlã«ååšã§ããªãããã if / elsif / elseã代ããã«äœ¿çšãããŸãã åæ§ã«ã switch / caseã¯ãããŸãããç°¡åã«å®è£ ãããŸãã
ïŒ*ïŒ whileã«ãŒãã¯continueã»ã¯ã·ã§ã³ãå®çŸ©ã§ããŸã
while (1) { next; } continue { print "Yet another loop done \n"; }
ïŒ*ïŒå€æ°ã®3ã€ã®ã¹ã³ãŒãïŒã°ããŒãã«ãã¬ãã·ã«ã«ãããã³ããŒã«ã«ã ããŒã«ã«ã¹ã³ãŒãã¯ãå€æ°ã®å€ãçŸåšã®ãããã¯ããã³ãã®ãããã¯ããã®ãã¹ãŠã®ãµãã«ãŒãã³åŒã³åºãã«æ¡åŒµããç¹å®ã®ãããã¯ã®ã°ããŒãã«å€æ°ã®å€ããªãŒããŒã©ã€ãããã®ã«åœ¹ç«ã¡ãŸãã ããŒã«ã«ã¹ã³ãŒãã¯å®è¡æã«æ±ºå®ãããã³ã³ãã€ã«æ®µéã§ã¬ãã·ã«ã«ã«æ±ºå®ãããŸãïŒããã¯ãããã¯å ã§æãäžè¬çãªã¹ã³ãŒãã§ãïŒã
use strict; our $a = 'global scope'; # sub printLocal { local $a = 'local scope'; # ( ) printGlobal(); } sub printGlobal { print $a, "\n"; } printGlobal(); # 'global scope' printLocal(); # 'local scope' printGlobal(); # '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"; # *.pl
第äºã«ããã¡ã€ã«èšè¿°åããããŒã¿ãèªã¿åãããã®æŒç®åã§ãã ããã«ãã¹ã«ã©ãŒã³ã³ããã¹ãã§ã¯ãããŒã¿ã1è¡ãã€èªã¿åãããªã¹ãã³ã³ããã¹ãã§ã¯ããã¡ã€ã«ã®è¡ãå®å šã«é åã«èªã¿åããŸãã
open F, '<somefile' or die; my @random = <F>; # close F;
ãããŠæåŸã«ã空ã®<>æŒç®åã¯ãããã°ã©ã èµ·åã®åŒæ°ã§æž¡ãããååã®ãã¡ã€ã«ããèªã¿åããŸãã 1ã€ã®å€§ããªãã¡ã€ã«ã§äœæ¥ããŠããå Žåã®ããã«ãæ瀺çã«ãããè¡ããŸããã ããã°ã©ã ãåŒæ°ãªãã§èµ·åãããå Žå ã STDINããèªã¿åããŸã ã ãã¡ã€ã«ãéãããéãããããããšãå¿é ããå¿ èŠããªãã®ã§ãããã¯|ãéããŠçµåããããã€ãã©ã€ã³ããã°ã©ã ã®éçºã«éåžžã«äŸ¿å©ã§ãã ãã®æŒç®åãé©çšãããšã catã³ãã³ãã®é¡äŒŒç©ã1è¡ã§å®è£ ãããŸãã
print while (<>);
ïŒ*ïŒäŸ¿å©ãªããã©ã«ãå€æ°$ _ ã ã»ãšãã©ã®æšæºPerlã«ãŒãã³ãšæŒç®åã¯ãããã§åäœã§ããŸããé¢æ°ã®å ¥ååŒæ°ãçç¥ãããŠããå Žåã¯ããã®äœ¿çšããå§ãããŸãã ããã«ãããããç°¡æœãªã³ãŒããèšè¿°ã§ããå ŽåããããŸãã
use strict; while (<>) { print if (s/^print\s*(.*)/$1/); } # while ($_ = <>) { print $_ if ($_ =~ s/^print\s*(.*)/$1/); }
ïŒ*ïŒ Perlã§ã¯ãå²ãåœãŠçµæã¯å·ŠèŸºå€ã§ãã ãããã£ãŠãPerlã§ã¯ãå²ãåœãŠäžã«å€ãå€æŽã§ããŸãã
($new = $old) =~ s/bad/good/g; ## chomp($answer = <STDIN>); ## if ( ($k, $v) = $string =~ m/(\w+)=(\w+)/ ) { print "key: $k value: $v", "\n"; }
ïŒ*ïŒæååã«é©çšãããã€ã³ã¯ãªã¡ã³ãæŒç®åã¯ãæåã»ãããã次ã®é åãè¿ããŸãã
my $a = 'aa'; print ++$a, "\n"; # ab
ïŒ*ïŒããã·ã¥ãšé åãä»»æã®æ·±ãã«èªåçã«æ¡åŒµããŸãã ã€ãŸã ãŸã è¿œå ãããŠããªãããŒã§ããã·ã¥ã«ã¢ã¯ã»ã¹ãããšããã®èŠçŽ ãèªåçã«äœæãããŸãã Perlã¯ãäœæããèŠçŽ ã®ã¿ã€ããæšæž¬ããŸããããšãã°ãå¿åããã·ã¥ãå¿åé åããŸãã¯ã¹ã«ã©ãŒãäœæã§ããŸãã
my $hash = {}; $hash->{first}->{second}->{third} = 5; print $hash->{first}->{second}->{third}, "\n"; # 5
èå³æ·±ãæ©èœã¯ãé åå ã®è² ã®ã€ã³ããã¯ã¹ã®åäœã§ãã è² ã®ã€ã³ããã¯ã¹ã¯ãé åã®æ«å°ŸããèŠçŽ ãéžæããŸãã
ïŒ*ïŒæååãšåŒçšç¬Šã 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"; } }; # Do you want to drive on $car->{brend} $car->{name}?\n print 'Do you want to drive on $car->{brend} $car->{name}?\n', "\n"; # Do you want to drive on Lada Kalina? print "Do you want to drive on $car->{brend} $car->{name}?\n"; # WEEEEEE! print "@{[ $car->{drive}->() ]}"; # print "@{[ exit ]}";
ãã ããPerlã«ã¯ãæååãšæ£èŠè¡šçŸããšã¹ã±ãŒãããæåãéžæããæš©å©ããããŸãã
print q { ! }; (my $text = "ab c") =~ s{\s}{}g;
Perlã®ãã1ã€ã®éåžžã«äŸ¿å©ãªæ©èœã¯ãæååãšã¹ã±ãŒãæåãšã㊠`ã䜿çšãããšãã®æååã®åäœã§ãã ãã®å ŽåãPerlã¯ã·ã§ã«ã§ãã®è¡ãå®è¡ããã³ãã³ãã®çµæãè¿ããŸãã
print `uptime`; # print << `EOC`; # pwd ls -l EOC
ïŒ*ïŒ 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; # : $var->{zap} = 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ã¢ãžã¥ãŒã«ãªã©ãã»ãã¥ãªãã£ãããã«åäžãããã¢ãžã¥ãŒã«ããããŸãã
#!/usr/bin/perl -T use strict; print "Enter file/directory name to delete: \n"; my $file = <STDIN>; # : , # `rm -rf $file`;
ïŒ*ïŒ 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ã®æ©èœ