[5] [DFN[[[Perl]]]] は、[[プログラミング言語]]です。

* 実装

[7] 
[FIG(short list)[
- [[perl]]
- [[ActivePerl]]
- [[stableperl]]
]FIG]

* 概念

[9] 
[FIG(short list)[

- [[Perlにおける文字コード]]
- [[正規表現]]
- [[Perlモジュール]]
- [[CPAN]]
- [[プラグマ]]
- [[標準モジュール]]
- [[Perlの版を調べる]]
- [CODE[fork][fork (Perl)]]
- [CODE[#line]]
- [CODE[undef]]
- [CODE[defined]]
- [[エラー処理][エラー処理 (Perl)]]
- [[ハンドル][ハンドル (Perl)]]
- [[Perlにおける日時]]
- [CODE[Symbol]]
- [CODE[pack]], [CODE[unpack]]
- [[Perlにおけるテスト]]
- [[SV]]

]FIG]

[FIG(short list)[ [16] [[Perlモジュール]]
- [CODE(perl)@en[Encode.pm]]
- [CODE[List::Rubyish]]
- [CODE[AnyEvent]]
- [CODE[Promise][Promise (Perl)]]
- [CITE[[[The locale interface]]]]
- [CODE[Promised::File]]
- [CODE[Image::XFace]]

]FIG]


** 歴史的意義はあっても新規で使うべきではないもの

[20] 
[[Perl]] は歴史が長いだけに、
いろいろな時代の利用事例、解説記事その他が豊富にあります。
[[Perl]] 世界は古い時代のものとの互換性も比較的保たれている方ではありますが、
うっかり古いものを学ぶと現代の世界に適用できなかったり、
無駄な苦労をしたりすることが多いです。

[21] 
次のような機能や概念や[[ソフトウェア]]は、
ある時期一世を風靡し、利用されたり解説されたりすることが多かったのですが、
今となっては知識がないと使いこなせないものですから、
初心者は迂闊に近寄らないよう気をつけましょう。

[FIG(short list)[ [22] かつて [[Perl]] 世界で重宝されたが今となっては避けるべきものたち

- [CODE[jperl]]
- [CODE[cpan]]
- [[ファイルハンドル]]
- [[ディレクトリーハンドル]]
- [[型グロブ]]
- [CODE[use encoding]]
- [CODE[jcode.pl]]
- [CODE[Jcode.pm]]
- [CODE[NKF.pm]]
- [CODE[JSON.pm]]
- [CODE[YAML]]
- [CODE[JSON::Syck]]
- [CODE[Class::Accessor]] シリーズ
- [CODE[Moose]]
- [CODE[LWP]]
- [CODE[URI.pm]]
- [[CGI]]
- [CODE[CGI.pm]]
- [CODE[mod_perl]]
- [CODE[Catalyst]]
- [CODE[Mojolicious]]
- [CODE[Plack]]
- [CODE[Starman]]
- [CODE[Starlet]]
- [CODE[DBI]]
- [CODE[DBIx::Class]]
- [CODE[DateTime.pm]]
- [[モダンPerl]]

]FIG]


* 企業

[FIG(short list)[ [12] [[Perl]] を主要な開発言語 (の1つ) としている企業
- [[株式会社はてな]]
- [[DeNA]]
- [[mixi]]

[HISTORY[
- [[livedoor]]
]HISTORY]
]FIG]

* 関連

[6] [[Perl6]] は関係ありません。

* メモ

[1] [CITE[CPAN/src]]
([TIME[2009-11-17 07:02:08 +09:00]] 版)
<http://www.cpan.org/src/README.html>

[2] 64ビット環境で実験してみた。

[PRE(perl)[
$ perl -e '$a = shift; printf "x = %s; x+1 = %s; x == x+1 = %s\n", 2**$a, 2**$a+1, (2**$a==2**$a+1)?1:0' 51
x = 2.25179981368525e+15; x+1 = 2251799813685249; x == x+1 = 0
$ perl -e '$a = shift; printf "x = %s; x+1 = %s; x == x+1 = %s\n", 2**$a, 2**$a+1, (2**$a==2**$a+1)?1:0' 52
x = 4.5035996273705e+15; x+1 = 4503599627370497; x == x+1 = 0
$ perl -e '$a = shift; printf "x = %s; x+1 = %s; x == x+1 = %s\n", 2**$a, 2**$a+1, (2**$a==2**$a+1)?1:0' 53
x = 9.00719925474099e+15; x+1 = 9.00719925474099e+15; x == x+1 = 1
$ perl -e '$a = shift; printf "x = %s; x+1 = %s; x == x+1 = %s\n", 2**$a, 2**$a+1, (2**$a==2**$a+1)?1:0' 54
x = 1.8014398509482e+16; x+1 = 1.8014398509482e+16; x == x+1 = 1
]PRE]

[[64ビット浮動小数点数]]の[[仮数]]が[[二進数]]で53桁らしく、それが[[整数]]を正しく表現できる限界らしい。

[PRE(perl)[
$ perl -Minteger -e '$a = shift; printf "x = %s; x+1 = %s; x == x+1 = %s\n", 2**$a, 2**$a+1, (2**$a==2**$a+1)?1:0' 51
x = 2.25179981368525e+15; x+1 = 2251799813685249; x == x+1 = 0
$ perl -Minteger -e '$a = shift; printf "x = %s; x+1 = %s; x == x+1 = %s\n", 2**$a, 2**$a+1, (2**$a==2**$a+1)?1:0' 52
x = 4.5035996273705e+15; x+1 = 4503599627370497; x == x+1 = 0
$ perl -Minteger -e '$a = shift; printf "x = %s; x+1 = %s; x == x+1 = %s\n", 2**$a, 2**$a+1, (2**$a==2**$a+1)?1:0' 53
x = 9.00719925474099e+15; x+1 = 9007199254740993; x == x+1 = 0
$ perl -Minteger -e '$a = shift; printf "x = %s; x+1 = %s; x == x+1 = %s\n", 2**$a, 2**$a+1, (2**$a==2**$a+1)?1:0' 54
x = 1.8014398509482e+16; x+1 = 18014398509481985; x == x+1 = 0
$ perl -Minteger -e '$a = shift; printf "x = %s; x+1 = %s; x == x+1 = %s\n", 2**$a, 2**$a+1, (2**$a==2**$a+1)?1:0' 62
x = 4.61168601842739e+18; x+1 = 4611686018427387905; x == x+1 = 0
$ perl -Minteger -e '$a = shift; printf "x = %s; x+1 = %s; x == x+1 = %s\n", 2**$a, 2**$a+1, (2**$a==2**$a+1)?1:0' 63
x = 9.22337203685478e+18; x+1 = -9223372036854775807; x == x+1 = 0
$ perl -Minteger -e '$a = shift; printf "x = %s; x+1 = %s; x == x+1 = %s\n", 2**$a, 2**$a+1, (2**$a==2**$a+1)?1:0' 64
x = 1.84467440737096e+19; x+1 = 0; x == x+1 = 0
]PRE]

[CODE(perl)@en[[[use]] [[integer]]]] すると2の63乗の1つ手前まで[[整数]]として扱えるようになる。

[3] [CITE[404 Blog Not Found:Perlの登録商標について - Perl belongs to us]]
( ([TIME[2011-10-01 13:13:31 +09:00]] 版))
<http://blog.livedoor.jp/dankogai/archives/51733482.html>

[4] [CITE@ja[リロケータブル Perl - skaji's blog]]
( ([TIME[2014-10-02 00:52:49 +09:00]] 版))
<http://ks0608.hatenablog.com/entry/2014/07/06/170328>

[8] [CITE[perldelta - search.cpan.org]]
( ([TIME[2016-05-10 17:56:10 +09:00]]))
<http://search.cpan.org/~rjbs/perl-5.24.0/pod/perldelta.pod>

[10] [CITE[perldelta - search.cpan.org]]
([TIME[2017-01-21 11:04:02 +09:00]])
<http://search.cpan.org/~shay/perl-5.24.1/pod/perldelta.pod>

[11] [CITE@en[5分でわかる Perl and web security · GitHub]]
( ([TIME[2017-04-23 16:56:43 +09:00]]))
<https://gist.github.com/mala/9bf56420da8841945ba69361dd086878>

[13] [CITE[オンプレDB、PerlのAIフレームワーク――ウェザーニューズが追求する「開発者とユーザー双方が幸せになれる技術」 | HRナビ by リクルート]]
([TIME[2018-03-24 09:51:18 +09:00]])
<http://hrnabi.com/2018/03/23/16807/>



[15] [CITE[#59207 (perl5.28 build fails on Catalina with MacPorts 2.6.1 and Xcode 11.1) – MacPorts]]
([TIME[2022-04-09T02:13:51.000Z]])
<https://trac.macports.org/ticket/59207>

[17] [CITE@en-US[perlrun - how to execute the Perl interpreter - metacpan.org]]
([TIME[2024-06-28T13:25:22.000Z]])
<https://metacpan.org/dist/perl/view/pod/perlrun.pod>

[18] 未だに「Perl」や「.pm」が名前に入ってるイベントがたまに開かれるのは不思議。そして [[Perl]] 関連の発表はしないし参加者も [[Perl]] を使っていなそうなのが謎。こういうのも一種のアレだよな、[[文化の盗用]]、はちょっと違うな。なんていうんだろう。 [TIME[2025-09-08T01:59:37.209Z]]

[19] おそらく Perl がもっと人気があった時代から続く伝統のイベント名なのだろうけれども、今や少数勢力となった Perl を名乗りながら Perl と関係ないことをするのは、[[文化の盗用]]という名前で言及される多数派による少数派の文化の表層的な借用による概念の上書きと共時的な構造は同じなんだよね。本当に Perl について語りたい人、 Perl の情報を探してる人にとってはノイズでしかなく、 Perl という文化の存在が多数派によって暴力的に希薄化されている加害者なのにその自覚が皆無というのが凶悪。 [TIME[2025-09-08T02:03:37.695Z]]

[14] [[Perl7]]