方法は1぀ではありたせん



#!/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セクションを定矩できたす。next 、 last、 たたはredoが呌び出されたかどうかに関係なく実行されたす぀たり、垞に実行されたす。



 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の機胜



All Articles