Perl-quick-guide
Perl-はじめに
Perlはもともとテキスト操作用に開発された汎用プログラミング言語であり、現在ではシステム管理、Web開発、ネットワークプログラミング、GUI開発などを含む幅広いタスクに使用されています。
Perlとは何ですか?
- Perlは、安定したクロスプラットフォームプログラミング言語です。
- Perlは正式には頭字語ではありませんが、*実用的な抽出とレポート言語*として使用する人はほとんどいません。
- 公共部門および民間部門のミッションクリティカルなプロジェクトに使用されます。
- Perlは_Artistic License_または_GNU General Public License(GPL)_でライセンスされる_Open Source_ソフトウェアです。
- PerlはLarry Wallによって作成されました。
- Perl 1.0は、1987年にusenetのalt.comp.sourcesにリリースされました。
- このチュートリアルを書いている時点では、perlの最新バージョンは5.16.2でした。
- Perlは_Oxford English Dictionary_にリストされています。
PC Magazineは、1998年の開発ツール部門のTechnical Excellence AwardのファイナリストとしてPerlを発表しました。
Perlの機能
- Perlは、C、awk、sed、sh、BASICなど、他の言語の最高の機能を利用します。
- Perlsデータベース統合インターフェイスDBIは、Oracle、Sybase、Postgres、MySQLなどを含むサードパーティデータベースをサポートします。
- Perlは、HTML、XML、およびその他のマークアップ言語で動作します。
- PerlはUnicodeをサポートしています。
- PerlはY2Kに準拠しています。
- Perlは、手続き型プログラミングとオブジェクト指向プログラミングの両方をサポートしています。
- Perlは、XSまたはSWIGを介して外部C/C ++ライブラリとインターフェイスします。
- Perlは拡張可能です。 Comprehensive Perl Archive Network(https://cpan.perl.org [CPAN])から20,000を超えるサードパーティモジュールが利用可能です。
- Perlインタープリターは他のシステムに組み込むことができます。
PerlとWeb
- Perlは、テキスト操作機能と迅速な開発サイクルにより、最も人気のあるWebプログラミング言語でした。
- Perlは「https://www.google.com/search?q=the%20duct-tape%20of%20the%20Internet [インターネットのダクトテープ]」として広く知られています。
- Perlは、電子商取引を含む暗号化されたWebデータを処理できます。
- PerlをWebサーバーに埋め込み、処理を2000%も高速化できます。
- Perlのhttps://perl.apache.org [mod_perl]を使用すると、Apache WebサーバーでPerlインタープリターを埋め込むことができます。
- Perlのhttps://dbi.perl.org [DBI]パッケージにより、Webデータベースの統合が容易になります。
Perlは解釈されます
Perlはインタープリター言語です。つまり、移植性のない実行可能プログラムを作成するコンパイルステージなしで、コードをそのまま実行できます。
従来のコンパイラは、プログラムを機械語に変換します。 Perlプログラムを実行すると、最初にバイトコードにコンパイルされ、次に(プログラムの実行時に)機械語命令に変換されます。 したがって、中間表現なしで*厳密*に解釈されるシェルまたはTclとはまったく異なります。
また、マシンに依存する形式に直接コンパイルされるCまたはC ++のほとんどのバージョンとは異なります。 _Python_と_awk_とEmacsの.elcファイルとともに、中間にあります。
Perl-環境
Perlプログラムの作成を始める前に、Perl環境のセットアップ方法を理解しましょう。 Perlはさまざまなプラットフォームで利用可能です-
- Unix(Solaris、Linux、FreeBSD、AIX、HP/UX、SunOS、IRIXなど)
- 9x/NT/2000/に勝つ
- WinCE
- Macintosh(PPC、68K)
- Solaris(x86、SPARC)
- OpenVMS
- アルファ(7.2以降)
- シンビアン
- Debian GNU/kFreeBSD
- MirOS BSD
- などなど…
これにより、システムにperlがインストールされる可能性が高くなります。 $プロンプトで次のコマンドを入力してみてください-
あなたのマシンにperlがインストールされている場合、次のようなメッセージが表示されます-
perlがまだインストールされていない場合は、次のセクションに進みます。
Perlのインストールを取得する
最新かつ最新のソースコード、バイナリ、ドキュメント、ニュースなど。 Perlの公式Webサイトで入手できます。
- Perl公式ウェブサイト*-https://www.perl.org/
次のサイトからPerlのドキュメントをダウンロードできます。
- PerlドキュメントWebサイト*-https://perldoc.perl.org
Perlをインストールする
Perlディストリビューションは、さまざまなプラットフォームで利用できます。 プラットフォームに適用可能なバイナリコードのみをダウンロードし、Perlをインストールする必要があります。
プラットフォームのバイナリコードが利用できない場合は、ソースコードを手動でコンパイルするCコンパイラが必要です。 ソースコードをコンパイルすると、インストールに必要な機能の選択に関して柔軟性が高まります。
以下は、さまざまなプラットフォームにPerlをインストールする簡単な概要です。
UnixおよびLinuxのインストール
Unix/LinuxマシンにPerlをインストールする簡単な手順を以下に示します。
- Webブラウザーを開き、https://www.perl.org/getl [[[1]]]にアクセスします。
- リンクに従って、Unix/Linuxで利用可能なzip形式のソースコードをダウンロードします。
- perl-5.x.y.tar.gz ファイルをダウンロードし、$プロンプトで次のコマンドを発行します。
注-ここで、$はコマンドを入力するUnixプロンプトであるため、上記のコマンドを入力するときに$を入力しないでください。
これにより、Perlは標準の場所_/usr/local/bin_にインストールされ、そのライブラリは_/usr/local/lib/perlXX_にインストールされます。XXは使用しているPerlのバージョンです。
Windowsインストール
WindowsマシンにPerlをインストールする手順は次のとおりです。
- WindowsでのStrawberry Perlインストールのリンクをたどってくださいhttp://strawberryperl.com
- 32ビットまたは64ビットバージョンのインストールをダウンロードします。
- ダウンロードしたファイルをWindowsエクスプローラーでダブルクリックして実行します。 これにより、非常に使いやすいPerlインストールウィザードが表示されます。 デフォルト設定をそのまま使用し、インストールが完了するまで待ちます。これで準備完了です。
Macintoshインストール
独自のバージョンのPerlを構築するには、「make」が必要です。これは、通常Mac OSインストールDVDで提供されるApples開発者ツールの一部です。 makeをインストールするために、最新バージョンのXcode(現在は有料)は必要ありません。
Mac OS XマシンにPerlをインストールする簡単な手順を次に示します。
- Webブラウザーを開き、https://www.perl.org/getlにアクセスします。
- リンクをクリックして、Mac OS Xで使用可能なzip形式のソースコードをダウンロードします。
- perl-5.x.y.tar.gz ファイルをダウンロードし、$プロンプトで次のコマンドを発行します。
これにより、Perlは標準の場所_/usr/local/bin_にインストールされ、そのライブラリは_/usr/local/lib/perlXX_にインストールされます。XXは使用しているPerlのバージョンです。
Perlの実行
以下は、Perlを開始するさまざまな方法です。
インタラクティブ通訳
ここに利用可能なすべてのコマンドラインオプションのリストがあります-
Sr.No. | Option & Description |
---|---|
1 |
-d[:debugger] デバッガーの下でプログラムを実行します |
2 |
-Idirectory @ INC/#includeディレクトリを指定します |
3 |
-T 汚染チェックを有効にします |
4 |
-t 汚染警告を有効にします |
5 |
-U 安全でない操作を許可します |
6 |
-w 多くの有用な警告を有効にします |
7 |
-W すべての警告を有効にします |
8 |
-X すべての警告を無効にします |
9 |
-e program プログラムとして送信されたPerlスクリプトを実行します |
10 |
file 指定されたファイルからPerlスクリプトを実行します |
コマンドラインからのスクリプト
Perlスクリプトはテキストファイルであり、Perlコードを保持し、次のようにアプリケーションのインタープリターを呼び出すことでコマンドラインで実行できます-
統合開発環境
Perlは、グラフィカルユーザーインターフェイス(GUI)環境からも実行できます。 必要なのは、Perlをサポートするシステム上のGUIアプリケーションだけです。 Padre、Perl IDEをダウンロードできます。 Eclipseに精通している場合は、Eclipseプラグインhttps://www.epic-ide.org/[EPIC-Eclipse用PerlエディターおよびIDE]を使用することもできます。
次の章に進む前に、環境が適切に設定されており、正常に機能していることを確認してください。 環境を適切にセットアップできない場合は、システム管理者から支援を受けることができます。
以降の章で示されるすべての例は、LinuxのCentOSフレーバーで利用可能なバージョン5.16.2で実行されています。
Perl-構文の概要
Perlは、多くの言語(awk、sed、C、Bourne Shell、Smalltalk、Lisp、さらには英語)から構文と概念を借用しています。 ただし、言語間には明確な違いがあります。 この章は、Perlで期待される構文をすぐに理解できるように設計されています。
Perlプログラムは、宣言とステートメントのシーケンスで構成され、上から下に実行されます。 ループ、サブルーチン、およびその他の制御構造により、コード内をジャンプできます。 すべての単純なステートメントはセミコロン(;)で終わる必要があります。
Perlは自由形式の言語です。好きなようにフォーマットしてインデントできます。 ホワイトスペースは、構文の重要な部分であるPythonや、重要ではないFortranなどの言語とは異なり、主にトークンの分離に役立ちます。
最初のPerlプログラム
インタラクティブモードプログラミング
コマンドラインで -e オプションを指定してPerlインタープリターを使用すると、コマンドラインからPerlステートメントを実行できます。 次のように$プロンプトで何か試してみましょう-
この実行は、次の結果を生成します-
スクリプトモードプログラミング
すでに$プロンプトが表示されていると仮定して、viまたはvimエディターを使用してテキストファイルhello.plを開き、ファイル内に次の行を追加します。
ここで、 /usr/bin/perl は実際のperlインタープリターバイナリです。 スクリプトを実行する前に、スクリプトファイルのモードを変更し、実行権限を付与してください。一般に0755の設定は完全に機能し、最後に次のように上記のスクリプトを実行します-
この実行は、次の結果を生成します-
関数の引数に括弧を使用することも、個人の好みに応じて括弧を省略することもできます。 これらは、優先順位の問題を明確にするために時々必要になります。 次の2つのステートメントは同じ結果を生成します。
Perlファイル拡張子
Perlスクリプトは、通常の単純なテキストエディタープログラム内で作成できます。 すべてのタイプのプラットフォームで使用可能なプログラムがいくつかあります。 プログラマー向けに設計された多くのプログラムがWebからダウンロードできます。
Perl規則として、Perlファイルは、機能するPerlスクリプトとして認識されるために、.plまたは.PLファイル拡張子で保存する必要があります。 ファイル名には数字、記号、文字を含めることができますが、スペースを含めることはできません。 スペースの場所では下線(_)を使用します。
Perlのコメント
プログラミング言語のコメントは開発者の友達です。 コメントを使用すると、プログラムを使いやすくすることができ、コードの機能に影響を与えることなくインタープリターによって単にスキップされます。 たとえば、上記のプログラムでは、ハッシュ*#*で始まる行はコメントです。
Perlで単にコメントを言うことはハッシュ記号で始まり、行の終わりまで実行されます-
=で始まる行は、埋め込みドキュメント(pod)のセクションの開始として解釈され、次の= cutまでの後続のすべての行はコンパイラーによって無視されます。 以下は例です-
これは、次の結果を生成します-
Perlの空白
Perlプログラムは空白を気にしません。 次のプログラムは完全に正常に動作します-
ただし、引用符で囲まれた文字列内にスペースが含まれている場合は、そのまま印刷されます。 たとえば-
これは、次の結果を生成します-
スペース、タブ、改行などのあらゆる種類の空白。 引用符の外で使用される場合、インタープリターにとって同等です。 コメントが含まれる可能性のある空白のみを含む行は空白行と呼ばれ、Perlはそれを完全に無視します。
Perlでの一重引用符と二重引用符
次のように、リテラル文字列の周りに二重引用符または単一引用符を使用できます-
これは、次の結果を生成します-
一重引用符と二重引用符には重要な違いがあります。 二重引用符でのみ interpolate 変数と改行\ nなどの特殊文字を使用しますが、一重引用符では変数や特殊文字を補間しません。 変数として$ aを使用して値を保存し、後でその値を出力する例を以下に示します-
これは、次の結果を生成します-
「ここ」のドキュメント
複数行のテキストを非常に快適に保存または印刷できます。 「here」ドキュメント内の変数を使用することもできます。 以下は簡単な構文です。<<と識別子の間にスペースがないように注意して確認してください。
識別子は、下のEOFを使用したように、むき出しの単語または引用テキストのいずれかです。 識別子が引用されている場合、使用する引用の種類によって、通常の引用と同様に、ここにあるテキスト内のテキストの処理が決まります。 引用符で囲まれていない識別子は、二重引用符のように機能します。
これは、次の結果を生成します-
エスケープ文字
Perlは、バックスラッシュ(\)文字を使用して、コードに干渉する可能性のあるあらゆる種類の文字をエスケープします。 二重引用符と$記号を出力したい例を見てみましょう-
これは、次の結果を生成します-
Perl識別子
Perl識別子は、変数、関数、クラス、モジュール、またはその他のオブジェクトを識別するために使用される名前です。 Perl変数名は、$、&commat;のいずれかで始まります。または%の後にゼロ個以上の文字、アンダースコア、および数字(0〜9)が続きます。
Perlでは、識別子内で&commat;、$、%などの句読点文字を使用できません。 Perlは、大文字と小文字を区別*するプログラミング言語です。 したがって、 *$ Manpower と $ manpower はPerlの2つの異なる識別子です。
Perl-データ型
Perlは緩やかに型付けされた言語であり、プログラムでの使用中にデータの型を指定する必要はありません。 Perlインタープリターは、データ自体のコンテキストに基づいてタイプを選択します。
Perlには、スカラー、スカラーの配列、および連想配列とも呼ばれるスカラーのハッシュの3つの基本データ型があります。 これらのデータ型について少し詳しく説明します。
Sr.No. | Types & Description |
---|---|
1 |
Scalar スカラーは単純な変数です。 それらの前にはドル記号($)が付いています。 スカラーは、数値、文字列、または参照です。 参照は実際には変数のアドレスであり、これについては次の章で説明します。 |
2 |
Arrays 配列は、0で始まる数値インデックスでアクセスするスカラーの順序付きリストです。 それらの前には「アット」記号(&commat;)が付いています。 |
3 |
Hashes ハッシュは、キーを添え字として使用してアクセスするキー/値ペアの順序付けられていないセットです。 これらの前にはパーセント記号(%)が付いています。 |
数値リテラル
Perlは、すべての数値を符号付き整数または倍精度浮動小数点値として内部に保存します。 数値リテラルは、次の浮動小数点または整数形式のいずれかで指定されています-
Type | Value |
---|---|
Integer | 1234 |
Negative integer | -100 |
Floating point | 2000 |
Scientific notation | 16.12E14 |
Hexadecimal | 0xffff |
Octal | 0577 |
文字列リテラル
文字列は文字の並びです。 通常は、単一引用符( ')または二重引用符( ")で区切られた英数字の値です。 これらは、単一引用符で囲まれた文字列と二重引用符で囲まれた文字列を使用できるUNIXシェル引用符のように機能します。
二重引用符で囲まれた文字列リテラルでは変数の補間が可能ですが、単一引用符で囲まれた文字列ではできません。 バックスラッシュが続く特定の文字があり、特別な意味を持ち、改行(\ n)またはタブ(\ t)のような表現に使用されます。
あなたは二重引用符で囲まれた文字列に改行または次のエスケープシーケンスのいずれかを直接埋め込むことができます-
Escape sequence | Meaning |
---|---|
\\ | Backslash |
\' | Single quote |
\" | Double quote |
\a | Alert or bell |
\b | Backspace |
\f | Form feed |
\n | Newline |
\r | Carriage return |
\t | Horizontal tab |
\v | Vertical tab |
\0nn | Creates Octal formatted numbers |
\xnn | Creates Hexideciamal formatted numbers |
\cX | Controls characters, x may be any character |
\u | Forces next character to uppercase |
\l | Forces next character to lowercase |
\U | Forces all following characters to uppercase |
\L | Forces all following characters to lowercase |
\Q | Backslash all following non-alphanumeric characters |
\E | End \U, \L, or \Q |
例
文字列が一重引用符と二重引用符でどのように動作するかをもう一度見てみましょう。 ここでは、上記の表に記載されている文字列エスケープを使用し、スカラー変数を使用して文字列値を割り当てます。
これは、次の結果を生成します-
Perl-変数
変数は、値を保存するために予約されたメモリの場所です。 これは、変数を作成するときに、メモリ内にスペースを確保することを意味します。
変数のデータ型に基づいて、インタプリタはメモリを割り当て、予約メモリに保存できるものを決定します。 したがって、異なるデータ型を変数に割り当てることにより、整数、小数、または文字列をこれらの変数に格納できます。
Perlには次の3つの基本データ型があることがわかっています-
- スカラー
- 配列 *ハッシュ
したがって、Perlでは3種類の変数を使用します。* scalar 変数の前にはドル記号($)が付き、数値、文字列、または参照のいずれかを格納できます。 *array 変数の前には符号&commat;が付きます。そして、スカラーの順序付きリストを保存します。 最後に、 Hash 変数の前に符号%を付け、キー/値のペアのセットを保存するために使用します。
Perlは、すべての変数タイプを個別のネームスペースに保持します。 したがって、競合を恐れることなく、スカラー変数、配列、またはハッシュに同じ名前を使用できます。 これは、$ fooと&commat; fooが2つの異なる変数であることを意味します。
変数を作成する
メモリ空間を確保するために、Perl変数を明示的に宣言する必要はありません。 変数に値を割り当てると、宣言が自動的に行われます。 等号(=)は、変数に値を割り当てるために使用されます。
プログラムで use strict ステートメントを使用する場合、変数を使用する前に変数を宣言することが必須であることに注意してください。
=演算子の左側のオペランドは変数の名前であり、=演算子の右側のオペランドは変数に格納されている値です。 たとえば-
ここで、25、「John Paul」および1445.50は、それぞれ_ $ age 、 $ name_、および_ $ salary_変数に割り当てられた値です。 すぐに、配列とハッシュに値を割り当てる方法を確認します。
スカラー変数
スカラーは、単一のデータ単位です。 そのデータは、整数、浮動小数点、文字、文字列、段落、またはWebページ全体です。 単に何でもいいと言っているが、ただ一つのこと。
これはスカラー変数を使用した簡単な例です-
これは、次の結果を生成します-
配列変数
配列は、スカラー値の順序付きリストを格納する変数です。 配列変数の前には「アット」(&commat;)記号が付きます。 配列の1つの要素を参照するには、変数名にドル記号($)を使用し、その後に角括弧で要素のインデックスを続けます。
これは、配列変数を使用する簡単な例です-
ここでは、単に印刷するために、$記号の前にエスケープ記号(\)を使用しました。 他のPerlはそれを変数として理解し、その値を出力します。 実行すると、これは次の結果を生成します-
ハッシュ変数
ハッシュは*キー/値*のペアのセットです。 ハッシュ変数の前にはパーセント記号(%)が付きます。 ハッシュの単一の要素を参照するには、ハッシュ変数名の後に、中括弧で囲まれた値に関連付けられた「キー」を使用します。
ハッシュ変数を使用した簡単な例を次に示します-
これは、次の結果を生成します-
可変コンテキスト
Perlは、コンテキスト、つまり変数が使用されている状況に基づいて、同じ変数を異なる方法で処理します。 次の例を確認しましょう-
これは、次の結果を生成します-
ここで&commat; namesは配列であり、2つの異なるコンテキストで使用されています。 最初に、それを他の配列、つまりリストにコピーしたので、コンテキストがリストコンテキストであると仮定してすべての要素を返しました。 次に、同じ配列を使用し、この配列をスカラーに格納しようとしたため、この場合、コンテキストがスカラーコンテキストであると仮定して、この配列の要素数のみを返しました。 次の表は、さまざまなコンテキストを示しています-
Sr.No. | Context & Description |
---|---|
1 |
Scalar スカラー変数への代入は、スカラーコンテキストの右側を評価します。 |
2 |
List 配列またはハッシュへの割り当ては、リストコンテキストの右側を評価します。 |
3 |
Boolean ブールコンテキストは、式がtrueまたはfalseであるかどうかを確認するために式が評価される場所です。 |
4 |
Void このコンテキストは、戻り値が何であるかを気にしないだけでなく、戻り値も必要としません。 |
5 |
Interpolative このコンテキストは、引用符、または引用符のように機能するものの内部でのみ発生します。 |
Perl-スカラー
スカラーは、単一のデータ単位です。 そのデータは、整数、浮動小数点、文字、文字列、段落、またはWebページ全体です。
これはスカラー変数を使用した簡単な例です-
これは、次の結果を生成します-
数値スカラー
ほとんどの場合、スカラーは数値または文字列です。 次の例は、数値スカラーのさまざまなタイプの使用方法を示しています-
これは、次の結果を生成します-
ストリングスカラー
次の例は、さまざまなタイプの文字列スカラーの使用法を示しています。 一重引用符で囲まれた文字列と二重引用符で囲まれた文字列の違いに注意してください-
これは、次の結果を生成します-
スカラー操作
Perlで利用可能なさまざまな演算子の詳細については別の章で説明しますが、ここではいくつかの数値操作と文字列操作をリストします。
これは、次の結果を生成します-
複数行の文字列
あなたのプログラムに複数行の文字列を導入したい場合は、以下のように標準の一重引用符を使用できます-
これは、次の結果を生成します-
以下のように「here」ドキュメント構文を使用して、複数行を保存または印刷できます-
これも同じ結果を生成します-
Vストリング
v1.20.300.4000形式のリテラルは、指定された序数の文字で構成される文字列として解析されます。 この形式はv-stringsとして知られています。
v-stringは、やや読みにくい補間形式 "\ x \ {1} \ x \ {14} \ x \ {12c} \ x \ {fa0}"を使用するのではなく、文字列を構築するための代替の読みやすい方法を提供します。
これらは、vで始まり、1つ以上のドット区切り要素が続くリテラルです。 たとえば-
これも同じ結果を生成します-
特別なリテラル
これまでのところ、文字列スカラーとその連結と補間の操作についての感覚が必要です。 したがって、3つの特別なリテラルFILE、LINE、およびPACKAGEは、プログラムのその時点での現在のファイル名、行番号、およびパッケージ名を表します。
それらは個別のトークンとしてのみ使用でき、文字列に補間されません。 以下の例を確認してください-
これは、次の結果を生成します-
Perl-配列
配列は、スカラー値の順序付きリストを格納する変数です。 配列変数の前には「アット」(&commat;)記号が付きます。 配列の1つの要素を参照するには、変数名にドル記号($)を使用し、その後に角括弧で要素のインデックスを続けます。
これは、配列変数を使用する簡単な例です-
ここでは、単に印刷するために、$記号の前にエスケープ記号(\)を使用しました。 他のPerlはそれを変数として理解し、その値を出力します。 実行すると、これは次の結果を生成します-
Perlでは、リストと配列の用語はしばしば交換可能として使用されます。 しかし、リストはデータであり、配列は変数です。
配列作成
配列変数の先頭には&commat;が付きます署名し、かっこまたはqw演算子を使用して入力します。 たとえば-
2行目はqw//演算子を使用します。これは、区切り文字列を空白で区切った文字列のリストを返します。 この例では、これにより4要素配列になります。最初の要素は「this」で、最後(4番目)は「array」です。 これは、次のように異なる行を使用できることを意味します-
また、次のように各値を個別に割り当てることにより、配列を移入することができます-
配列要素へのアクセス
配列から個々の要素にアクセスするときは、変数の前にドル記号($)を付け、変数名の後に角かっこ内に要素インデックスを追加する必要があります。 たとえば-
これは、次の結果を生成します-
配列インデックスはゼロから始まるため、最初の要素にアクセスするには、インデックスとして0を指定する必要があります。 負のインデックスを指定することもできます。その場合、配列の先頭ではなく末尾から要素を選択します。 これは次を意味します-
連番配列
Perlは、連続した数字と文字のショートカットを提供します。 たとえば、100にカウントするときに各要素を入力するのではなく、次のようにできます-
ここで、二重ドット(..)は*範囲演算子*と呼ばれます。 これは、次の結果を生成します-
配列サイズ
配列のサイズは、配列上のスカラーコンテキストを使用して決定することができます-返される値は、配列内の要素の数になります-
返される値は、有効な要素の数ではなく、常に配列の物理サイズになります。 あなたはこれを実証することができ、このフラグメントを使用して、スカラー&commat; arrayと$#arrayの違いは次のとおりです-
これは、次の結果を生成します-
配列には情報を含む要素が4つしかありませんが、配列の長さは51で、最高のインデックスは50です。
配列内の要素の追加と削除
Perlには、配列内の要素を追加および削除するための便利な関数が多数用意されています。 機能とは何か質問があるかもしれませんか? これまで、 print 関数を使用してさまざまな値を印刷してきました。 同様に、さまざまな他の機能またはサブルーチンと呼ばれることもありますが、これらはさまざまな他の機能に使用できます。
Sr.No. | Types & Description |
---|---|
1 |
push COMMATARRAY, LIST リストの値を配列の最後にプッシュします。 |
2 |
pop COMMATARRAY ポップオフし、配列の最後の値を返します。 |
3 |
shift COMMATARRAY 配列の最初の値をシフトオフして返し、配列を1だけ短くしてすべてを下に移動します。 |
4 |
unshift COMMATARRAY, LIST リストの先頭に配列の先頭を付け、新しい配列の要素数を返します。 |
これは、次の結果を生成します-
配列要素のスライス
配列から「スライス」を抽出することもできます。つまり、配列から複数の項目を選択して、別の配列を作成できます。
これは、次の結果を生成します-
スライスの仕様には、それぞれがコンマで区切られた正または負の有効なインデックスのリストが必要です。 速度のために、 .. 範囲演算子も使用できます-
これは、次の結果を生成します-
配列要素の置き換え
今、私たちは* splice()*と呼ばれるもう1つの関数を紹介しようとしています。
この関数は、OFFSETおよびLENGTHで指定された@ARRAYの要素を削除し、指定されている場合はLISTに置き換えます。 最後に、配列から削除された要素を返します。 以下は例です-
これは、次の結果を生成します-
ここで、実際の置換は5番目の要素が6から10に21、22、23、24、25の数字に置き換えられた後、6番目の数字から始まります。
文字列を配列に変換する
次の構文を持つ* split()*と呼ばれるもう1つの関数を見てみましょう-
この関数は、文字列を文字列の配列に分割して返します。 LIMITが指定されている場合、最大でその数のフィールドに分割されます。 PATTERNを省略すると、空白で分割されます。 以下は例です-
これは、次の結果を生成します-
配列を文字列に変換する
- join()*関数を使用して、配列要素を再結合し、1つの長いスカラー文字列を形成できます。 この関数の構文は次のとおりです-
この関数は、LISTの個別の文字列を、EXPRの値で区切られたフィールドを持つ単一の文字列に結合し、文字列を返します。 以下は例です-
これは、次の結果を生成します-
配列の並べ替え
- sort()*関数は、ASCII数値標準に従って配列の各要素をソートします。 この関数の構文は次のとおりです-
この関数はLISTをソートし、ソートされた配列値を返します。 SUBROUTINEが指定されている場合、要素のソート中にSUBTROUTINE内の指定されたロジックが適用されます。
これは、次の結果を生成します-
ソートは単語のASCII数値に基づいて実行されることに注意してください。 したがって、最適なオプションは、最初に配列のすべての要素を小文字に変換してから、ソート機能を実行することです。
$ [特殊変数
これまでに、プログラムで定義した単純な変数を見て、それらを使用してスカラー値と配列値を保存および印刷しました。 Perlは、定義済みの意味を持つ多数の特殊変数を提供します。
- $ [*と記述された特別な変数があります。 この特殊変数は、すべての配列の最初のインデックスを含むスカラーです。 Perl配列にはゼロベースのインデックス付けがあるため、$ [はほとんど常に0になります。 ただし、$ [を1に設定すると、すべての配列でオンベースのインデックスが使用されます。 ゼロ以外のインデックスを使用しないことをお勧めします。 ただし、$ [変数の使用法を示すために例を見てみましょう-
これは、次の結果を生成します-
配列のマージ
配列は単なるコンマ区切りの値のシーケンスであるため、以下に示すようにそれらを組み合わせることができます-
これは、次の結果を生成します-
埋め込み配列は、以下に示すようにメイン配列の一部になります-
これは、次の結果を生成します-
リストから要素を選択する
リスト表記は配列の表記と同じです。 あなたは、リストに角括弧を追加し、1つ以上のインデックスを与えることにより、配列から要素を抽出することができます-
これは、次の結果を生成します-
同様に、先頭の&commat;を必要とせずに、スライスを抽出できます。文字-
これは、次の結果を生成します-
Perl-ハッシュ
ハッシュは*キー/値*のペアのセットです。 ハッシュ変数の前にはパーセント記号(%)が付きます。 ハッシュの単一の要素を参照するには、「$」記号が前にあり、中括弧内の値に関連付けられた「キー」が後に続くハッシュ変数名を使用します。
ハッシュ変数を使用した簡単な例を次に示します-
これは、次の結果を生成します-
ハッシュを作成する
ハッシュは、次の2つの方法のいずれかで作成されます。 最初の方法では、名前付きキーに値を1つずつ割り当てます-
2番目の場合、リストを使用します。これは、リストから個々のペアを取得することによって変換されます。ペアの最初の要素がキーとして使用され、2番目の要素が値として使用されます。 たとえば-
明確にするために、⇒をのエイリアスとして使用して、次のようにキー/値のペアを示すことができます-
上記のフォームのもう1つのバリアントがあります、それを見てください、ここではすべてのキーの前にハイフン(-)があり、それらの周りに引用符は必要ありません-
しかし、単一の単語があることに注意することが重要です。つまり、スペースなしでこの形式のハッシュ形成でキーが使用されており、この方法でハッシュを構築する場合、キーは以下に示すようにハイフンのみを使用してアクセスされます。
ハッシュ要素へのアクセス
ハッシュから個々の要素にアクセスするときは、変数の前にドル記号($)を付けてから、変数の名前の後に中括弧内に要素キーを追加する必要があります。 たとえば-
これは、次の結果を生成します-
スライスの抽出
配列からスライスを抽出できるように、ハッシュのスライスを抽出できます。 &commat;を使用する必要があります。値のリストになるため、返された値を保存する変数のプレフィックス-
これは、次の結果を生成します-
キーと値の抽出
あなたは、次の構文を持つ*キー*関数を使用して、ハッシュからすべてのキーのリストを取得することができます-
この関数は、名前付きハッシュのすべてのキーの配列を返します。 以下は例です-
これは、次の結果を生成します-
同様に、 values 関数を使用して、すべての値のリストを取得できます。 この関数の構文は次のとおりです-
この関数は、名前付きハッシュのすべての値で構成される通常の配列を返します。 以下は例です-
これは、次の結果を生成します-
存在の確認
存在しないハッシュからキー/値のペアにアクセスしようとすると、通常は undefined 値を取得し、警告がオンになっている場合は、実行時に警告が生成されます。 これを回避するには、 exists 関数を使用します。この関数は、値が何であるかに関係なく、名前付きキーが存在する場合にtrueを返します-
ここで、IF … ELSEステートメントを紹介しました。これについては、別の章で学習します。 現時点では、指定された条件が真の場合にのみ* if(condition)パーツが実行されると仮定します。そうでない場合は *else パーツが実行されます。 上記のプログラムを実行すると、次の結果が生成されます。ここで、指定された条件_exists($ data \ {'Lisa'} _はtrueを返すためです-
ハッシュサイズの取得
サイズ、つまり、キーまたは値のスカラーコンテキストを使用してハッシュから要素の数を取得できます。 単に最初にあなたがキーまたは値のいずれかの配列を取得する必要があると言ってから、次のように配列のサイズを取得できます
これは、次の結果を生成します-
ハッシュ内の要素の追加と削除
新しいキー/値のペアの追加は、単純な代入演算子を使用して1行のコードで実行できます。 しかし、ハッシュから要素を削除するには、例で以下に示すように*削除*機能を使用する必要があります-
これは、次の結果を生成します-
Perl条件ステートメント-IF … ELSE
Perl条件ステートメントは、意思決定を支援します。これは、プログラマーが、プログラムによって評価またはテストされる1つ以上の条件と、条件が真であると判断された場合に実行されるステートメントを指定する必要があります。条件が偽と判断された場合に実行されるステートメント。
以下は、ほとんどのプログラミング言語で見られる典型的な意思決定構造の一般的なものです-
数値0、文字列 '0’および ""、空のリスト()、およびundefはすべてブールコンテキストで false であり、他のすべての値は true です。 !*または *not による真の値の否定は、特別な偽の値を返します。
Perlプログラミング言語は、次のタイプの条件ステートメントを提供します。
Sr.No. | Statement & Description |
---|---|
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
Perlの最新バージョンでは、 switch ステートメントを使用できます。 これにより、変数値をさまざまな条件と簡単に比較できます。 |
は? :オペレーター
条件演算子を確認しましょうか? : if … else ステートメントを置き換えるために使用できます。 それは次の一般的な形式を持っています-
Exp1、Exp2、およびExp3は式です。 コロンの使用と配置に注意してください。
aの値 式は次のように決定されます:Exp1が評価されます。 真の場合、Exp2が評価され、?全体の値になります。 式です。 Exp1がfalseの場合、Exp3が評価され、その値が式の値になります。 以下は、この演算子を利用した簡単な例です-
これは、次の結果を生成します-
Perl-ループ
コードのブロックを数回実行する必要がある場合があります。 一般に、ステートメントは順番に実行されます。関数の最初のステートメントが最初に実行され、次に2番目のステートメントが実行されます。
プログラミング言語は、より複雑な実行パスを可能にするさまざまな制御構造を提供します。
ループステートメントを使用すると、ステートメントまたはステートメントのグループを複数回実行できます。ほとんどのプログラミング言語では、ループステートメントの一般的な形式は次のとおりです-
Perlプログラミング言語は、ループ要件を処理するために次のタイプのループを提供します。
Sr.No. | Loop Type & Description |
---|---|
1 |
特定の条件が真の間、ステートメントまたはステートメントのグループを繰り返します。 ループ本体を実行する前に条件をテストします。 |
2 |
特定の条件が真になるまで、ステートメントまたはステートメントのグループを繰り返します。 ループ本体を実行する前に条件をテストします。 |
3 |
一連のステートメントを複数回実行し、ループ変数を管理するコードを短縮します。 |
4 |
foreachループは、通常のリスト値を反復処理し、変数VARをリストの各要素に順番に設定します。 |
5 |
while文と似ていますが、ループ本体の最後で条件をテストします |
6 |
while、for、またはdo..whileループ内で1つ以上のループを使用できます。 |
ループ制御ステートメント
ループ制御ステートメントは、通常のシーケンスから実行を変更します。 実行がスコープを離れると、そのスコープで作成されたすべての自動オブジェクトが破棄されます。
Perlは、次の制御ステートメントをサポートしています。 詳細を確認するには、次のリンクをクリックしてください。
Sr.No. | Control Statement & Description |
---|---|
1 |
ループがその本体の残りをスキップし、反復する前にその状態をすぐに再テストします。 |
2 |
ループステートメントを終了し、ループの直後のステートメントに実行を転送します。 |
3 |
継続ブロック。条件が再び評価される直前に常に実行されます。 |
4 |
redoコマンドは、条件を再度評価せずにループブロックを再起動します。 continueブロック(存在する場合)は実行されません。 |
5 |
Perlは、goto label、goto expr、およびgoto&nameの3つの形式でgotoコマンドをサポートしています。 |
無限ループ
条件が決して偽にならない場合、ループは無限ループになります。 for ループは伝統的にこの目的に使用されます。 for ループを形成する3つの式はいずれも必要ないため、条件式を空のままにして無限ループを作成できます。
Ctrl + Cキーを押すと、上記の無限ループを終了できます。
条件式が存在しない場合、trueと見なされます。 初期化式と増分式を使用できますが、プログラマはより一般的にfor(;;)構造を使用して無限ループを示します。
Perl-演算子
オペレーターとは?
式_4 + 5 is equal to 9_を使用して簡単な答えを出すことができます。 ここで、4と5はオペランドと呼ばれ、+は演算子と呼ばれます。 Perl言語は多くの演算子タイプをサポートしていますが、以下は重要で最も頻繁に使用される演算子のリストです-
- 算術演算子
- 平等演算子
- 論理演算子
- 割り当て演算子
- ビット演算子
- 論理演算子
- 引用のような演算子 *その他の演算子
すべての演算子を1つずつ見てみましょう。
Perlの算術演算子
変数$ aが10を保持し、変数$ bが20を保持すると仮定すると、以下はPerlの算術演算子です-
リンク:/perl/arithmetic_operators_example [例を表示]
Sr.No. | Operator & Description |
---|---|
1 |
演算子の両側に値を追加します 例-$ a + $ bは30を与える |
2 |
左側のオペランドから右側のオペランドを減算します 例-$ a-$ bは-10になります |
3 |
演算子の両側の値を乗算します 例-$ a *$ bは200を与える |
4 |
/(Division) 左オペランドを右オペランドで除算します 例-$ b/$ aは2を与える |
5 |
% (Modulus) 左オペランドを右オペランドで除算し、剰余を返します 例-$ b%$ aは0を与える |
6 |
演算子で指数(パワー)計算を実行します 例-$ a * *$ bは10の20乗になります |
Perlの等価演算子
これらは関係演算子とも呼ばれます。 変数$ aが10を保持し、変数$ bが20を保持すると仮定して、次の数値等式演算子をチェックします-
リンク:/perl/numeric_equality_operators_example [例を表示]
Sr.No. | Operator & Description |
---|---|
1 |
2つのオペランドの値が等しいかどうかを確認し、等しい場合は条件が真になります。 例-($ a == $ b)は正しくありません。 |
2 |
!= (not equal to) 2つのオペランドの値が等しいかどうかをチェックし、値が等しくない場合は条件が真になります。 例-($ a!= $ b)はtrueです。 |
3 |
<⇒ 2つのオペランドの値が等しいかどうかをチェックし、左の引数が右の引数より数値的に小さいか、等しいか、大きいかによって-1、0、または1を返します。 例-($ a <⇒ $ b)は-1を返します。 |
4 |
> (greater than) 左のオペランドの値が右のオペランドの値よりも大きいかどうかをチェックし、そうであれば条件が真になります。 例-($ a> $ b)は正しくありません。 |
5 |
< (less than) 左のオペランドの値が右のオペランドの値よりも小さいかどうかを確認し、そうであれば条件が真になります。 例-($ a <$ b)は真です。 |
6 |
>= (greater than or equal to) 左のオペランドの値が右のオペランドの値以上かどうかをチェックし、はいの場合は条件が真になります。 例-($ a> = $ b)は正しくありません。 |
7 |
⇐ (less than or equal to) 左のオペランドの値が右のオペランドの値以下かどうかをチェックし、そうであれば条件が真になります。 例-($ a ⇐ $ b)はtrueです。 |
以下はエクイティ演算子のリストです。 変数$ aが「abc」を保持し、変数$ bが「xyz」を保持すると仮定して、次の文字列等式演算子をチェックします-
link:/perl/string_equality_operators_example [例を表示]
Sr.No. | Operator & Description |
---|---|
1 |
lt 左引数が文字列単位で右引数よりも小さい場合にtrueを返します。 例-($ a lt $ b)はtrueです。 |
2 |
gt 左の引数が右の引数よりも文字列的に大きい場合、trueを返します。 例-($ a gt $ b)はfalseです。 |
3 |
le 左引数が文字列単位で右引数以下の場合にtrueを返します。 例-($ a le $ b)はtrueです。 |
4 |
ge 左引数が文字列単位で右引数以上の場合にtrueを返します。 例-($ a ge $ b)はfalseです。 |
5 |
eq 左の引数が右の引数と文字列的に等しい場合にtrueを返します。 例-($ a eq $ b)はfalseです。 |
6 |
ne 左引数が文字列単位で右引数と等しくない場合にtrueを返します。 例-($ a ne $ b)はtrueです。 |
7 |
cmp 左の引数が右の引数よりも文字列的に小さいか、等しいか、大きいかによって、-1、0、または1を返します。 例-($ a cmp $ b)は-1です。 |
Perl割り当て演算子
変数$ aが10を保持し、変数$ bが20を保持すると仮定すると、Perlで使用可能な代入演算子とその使用法は次のとおりです-
リンク:/perl/assignment_operators_example [例を表示]
Sr.No. | Operator & Description |
---|---|
1 |
= 単純な代入演算子、右側のオペランドから左側のオペランドに値を割り当てます 例-$ c = $ a + $ bは、$ a + $ bの値を$ cに割り当てます。 |
2 |
=* *= AND代入演算子を追加します。左オペランドに右オペランドを追加し、結果を左オペランドに割り当てます 例-$ c + = $ aは$ c = $ c + $ aと同等 |
3 |
-= AND代入演算子を減算します。左オペランドから右オペランドを減算し、結果を左オペランドに割り当てます 例-$ c-= $ aは$ c = $ c-$ aと同等です |
4 |
=*=* AND代入演算子を乗算します。右オペランドと左オペランドを乗算し、結果を左オペランドに割り当てます。 例-$ c = $ aは$ c = $ c $ aと同等 |
5 |
/= /= 除算AND代入演算子。左オペランドを右オペランドで除算し、結果を左オペランドに割り当てます。 例-$ c/= $ aは$ c = $ c/$ aと同等 |
6 |
%= モジュラスAND代入演算子。2つのオペランドを使用してモジュラスを取り、結果を左のオペランドに割り当てます。 例-$ c%= $ aは$ c = $ c%aと同等 |
7 |
*=* 指数AND代入演算子、演算子で指数(べき乗)計算を実行し、左のオペランドに値を割り当てます 例-$ c * = $ aは$ c = $ c *$ aと同等 |
Perlビット演算子
ビットごとの演算子はビットに対して機能し、ビットごとの演算を実行します。 $ a = 60であると仮定します。および$ b = 13;今バイナリ形式では、次のようになります-
$ a = 0011 1100
$ b = 0000 1101
Perl-日付と時刻
この章では、Perlで日付と時刻を処理および操作する方法に関する基本的な理解を提供します。
現在の日付と時刻
引数を指定しない場合、現在の日付と時刻の値を返す* localtime()関数から始めましょう。 以下は、リストコンテキストで使用中に *localtime 関数によって返される9要素のリストです-
localtime()関数によって返されるさまざまな要素を印刷するには、次の例を試してください-
上記のコードが実行されると、次の結果が生成されます-
localtime()関数をスカラーコンテキストで使用する場合、システムに設定されている現在のタイムゾーンの日付と時刻が返されます。 現在の日付と時刻を完全な形式で印刷するには、次の例を試してください-
上記のコードが実行されると、次の結果が生成されます-
GMT時間
関数* gmtime()*はlocaltime()関数と同様に機能しますが、返される値は標準のグリニッジ標準時ゾーンにローカライズされます。 リストコンテキストで呼び出された場合、gmtimeによって返される最後の値である$ isdstは常に0です。 GMTには夏時間はありません。
localtime()はスクリプトを実行するマシンの現在の現地時間を返し、gmtime()はグリニッジ標準時(GMT)(またはUTC)を返すことに注意してください。
現在の日付と時刻をGMTスケールで印刷するには、次の例を試してください-
上記のコードが実行されると、次の結果が生成されます-
日付と時刻のフォーマット
localtime()関数を使用して9要素のリストを取得し、後で* printf()*関数を使用して、次のように要件に基づいて日付と時刻をフォーマットできます-
上記のコードが実行されると、次の結果が生成されます-
エポックタイム
time()関数を使用してエポック時間を取得できます。つまり、1970年1月1日のUnixでは、特定の日付から経過した秒数です。
上記のコードが実行されると、次の結果が生成されます-
次のように、指定された秒数を日付と時刻の文字列に変換できます-
上記のコードが実行されると、次の結果が生成されます-
POSIX関数strftime()
POSIX関数* strftime()を使用して、次の表を使用して日付と時刻をフォーマットできます。 アスタリスク()でマークされた指定子はロケールに依存することに注意してください。
Specifier | Replaced by | Example |
---|---|---|
%a
|
Abbreviated weekday name * | Thu
|
%A
|
Full weekday name* | Thursday
|
%b
|
Abbreviated month name * | Aug
|
%B
|
Full month name* | August
|
%c
|
Date and time representation * | Thu Aug 23 14:55:02 2001
|
%C
|
Year divided by 100 and truncated to integer (00-99 )
|
20
|
%d
|
Day of the month, zero-padded (01-31 )
|
23
|
%D
|
Short MM/DD/YY date, equivalent to %m/%d/%y
|
08/23/01
|
%e
|
Day of the month, space-padded (+ 1-31+ )
|
23
|
%F
|
Short YYYY-MM-DD date, equivalent to %Y-%m-%d
|
2001-08-23
|
%g
|
Week-based year, last two digits (00-99 )
|
01
|
%G
|
Week-based year | 2001
|
%h
|
Abbreviated month name* (same as %b )
|
Aug
|
%H
|
Hour in 24h format (00-23 )
|
14
|
%I
|
Hour in 12h format (01-12 )
|
02
|
%j
|
Day of the year (001-366 )
|
235
|
%m
|
Month as a decimal number (01-12 )
|
08
|
%M
|
Minute (00-59 )
|
55
|
%n
|
New-line character ('\n' )
|
|
%p
|
AM or PM designation | PM
|
%r
|
12-hour clock time * | 02:55:02 pm
|
%R
|
24-hour HH:MM time, equivalent to %H:%M
|
14:55
|
%S
|
Second (00-61 )
|
02
|
%t
|
Horizontal-tab character ('\t' )
|
|
%T
|
ISO 8601 time format (HH:MM:SS ), equivalent to %H:%M:%S
|
14:55
|
%u
|
ISO 8601 weekday as number with Monday as 1 (1-7 )
|
4
|
%U
|
Week number with the first Sunday as the first day of week one (00-53 )
|
33
|
%V
|
ISO 8601 week number (00-53 )
|
34
|
%w
|
Weekday as a decimal number with Sunday as 0 (0-6 )
|
4
|
%W
|
Week number with the first Monday as the first day of week one (00-53 )
|
34
|
%x
|
Date representation* | 08/23/01
|
%X
|
Time representation * | 14:55:02
|
%y
|
Year, last two digits (00-99 )
|
01
|
%Y
|
Year | 2001
|
%z
|
ISO 8601 offset from UTC in timezone (1 minute = 1, 1 hour = 100) タイムゾーンを終了できない場合、文字はありません |
+100
|
%Z
|
Timezone name or abbreviation* タイムゾーンを終了できない場合、文字はありません |
CDT
|
%%
|
A % sign
|
%
|
使用法を理解するために、次の例をチェックしましょう-
上記のコードが実行されると、次の結果が生成されます-
Perl-サブルーチン
Perlのサブルーチンまたは関数は、一緒にタスクを実行するステートメントのグループです。 コードを別々のサブルーチンに分割できます。 異なるサブルーチン間でコードを分割する方法はユーザー次第ですが、論理的に分割するのは通常、各関数が特定のタスクを実行するためです。
Perlは、サブルーチン、メソッド、および関数という用語を同じ意味で使用します。
サブルーチンを定義して呼び出す
Perlプログラミング言語のサブルーチン定義の一般的な形式は次のとおりです-
そのPerlサブルーチンを呼び出す典型的な方法は次のとおりです-
5.0より前のバージョンのPerlでは、サブルーチンを呼び出すための構文は以下に示すようにわずかに異なっていました。 これはPerlの最新バージョンでも機能しますが、サブルーチンプロトタイプをバイパスするためお勧めしません。
簡単な関数を定義し、それを呼び出す次の例を見てみましょう。 Perlはプログラムを実行する前にコンパイルするため、サブルーチンをどこで宣言するかは関係ありません。
上記のプログラムが実行されると、次の結果が生成されます-
サブルーチンへの引数の受け渡し
他のプログラミング言語で行うように、サブルーチンにさまざまな引数を渡すことができ、特別な配列@_を使用して関数内でアクセスできます。 したがって、関数の最初の引数は$ _ [0]にあり、2番目の引数は$ _ [1]にあります。
スカラーと同様に引数として配列とハッシュを渡すことができますが、通常、複数の配列またはハッシュを渡すと、それらは別々のアイデンティティを失います。 そのため、参照(次の章で説明)を使用して、配列またはハッシュを渡します。
次の例を試してみましょう。これは、数値のリストを取り、その平均を出力します-
上記のプログラムが実行されると、次の結果が生成されます-
リストをサブルーチンに渡す
@_変数は配列であるため、サブルーチンにリストを提供するために使用できます。 ただし、Perlがリストと配列を受け入れて解析する方法のために、@ _から個々の要素を抽出することは困難です。 あなたが他のスカラー引数と一緒にリストを渡す必要がある場合、次に示すように最後の引数としてリストを作成します-
上記のプログラムが実行されると、次の結果が生成されます-
ハッシュをサブルーチンに渡す
リストを受け入れるサブルーチンまたは演算子にハッシュを提供すると、ハッシュはキー/値ペアのリストに自動的に変換されます。 たとえば-
上記のプログラムが実行されると、次の結果が生成されます-
サブルーチンから値を返す
他のプログラミング言語で行うように、サブルーチンから値を返すことができます。 サブルーチンから値を返さない場合、サブルーチンで最後に実行された計算はすべて自動的に戻り値にもなります。
スカラーと同様にサブルーチンから配列とハッシュを返すことができますが、通常、複数の配列またはハッシュを返すと、それらは別々のアイデンティティを失います。 したがって、参照(次の章で説明)を使用して、関数から配列またはハッシュを返します。
数字のリストを取り、それらの平均を返す次の例を試してみましょう-
上記のプログラムが実行されると、次の結果が生成されます-
サブルーチン内のプライベート変数
デフォルトでは、Perlのすべての変数はグローバル変数です。つまり、プログラム内のどこからでもアクセスできます。 ただし、 my 演算子を使用すると、 lexical variables と呼ばれる private 変数をいつでも作成できます。
以下は、 my 演算子を使用して単一または複数のプライベート変数を定義する方法を示す例です-
グローバル変数とプライベート変数を区別するために次の例をチェックしましょう-
上記のプログラムが実行されると、次の結果が生成されます-
local()による一時的な値
ローカルに複数の変数または式が指定されている場合、それらを括弧で囲む必要があります。 この演算子は、それらの変数の現在の値を隠しスタックの引数リストに保存し、ブロック、サブルーチン、またはevalの終了時にそれらを復元することにより機能します。
グローバル変数とローカル変数を区別するために次の例をチェックしましょう-
上記のプログラムが実行されると、次の結果が生成されます-
state()を介した状態変数
別のタイプの字句変数があります。これはプライベート変数に似ていますが、状態を維持し、サブルーチンの複数の呼び出しで再初期化されません。 これらの変数は state 演算子を使用して定義され、Perl 5.9.4以降で使用可能です。
- 状態*変数の使用を示すために、次の例をチェックしましょう-
上記のプログラムが実行されると、次の結果が生成されます-
Perl 5.10より前は、次のように記述する必要があります-
サブルーチン呼び出しコンテキスト
サブルーチンまたはステートメントのコンテキストは、予期される戻り値のタイプとして定義されます。 これにより、ユーザーが受け取るものに基づいて異なる値を返す単一の関数を使用できます。 たとえば、次のlocaltime()は、スカラーコンテキストで呼び出されると文字列を返しますが、リストコンテキストで呼び出されるとリストを返します。
この例では、$ timestrの値は現在の日付と時刻で構成される文字列になります(たとえば、Thu Nov 30 15:21:33 2000)。 逆に-
現在、個々の変数には、localtime()サブルーチンによって返される対応する値が含まれています。
Perl-リファレンス
Perl参照は、別の値の場所を保持するスカラーデータ型で、スカラー、配列、またはハッシュの場合があります。 スカラーの性質のため、参照はどこでも使用でき、スカラーを使用できます。
他のリストへの参照を含むリスト、ハッシュへの参照を含むリストなどを作成できます。 これが、ネストされたデータ構造がPerlで構築される方法です。
参照を作成する
次のようにバックスラッシュを前に付けることで、変数、サブルーチン、または値の参照を作成するのは簡単です-
あなたは、バックスラッシュ演算子を使用してI/Oハンドル(ファイルハンドルまたはdirhandle)に参照を作成することはできませんが、匿名配列への参照は、次のように角括弧を使用して作成することができます-
同様に、次のように中括弧を使用して匿名ハッシュへの参照を作成できます-
匿名サブルーチンへの参照は、次のようにサブ名なしでサブを使用して作成することができます-
参照解除
参照解除は、参照ポイントからその場所への値を返します。 参照を間接参照するには、参照がスカラー、配列、ハッシュのいずれを指しているかに応じて、参照変数のプレフィックスとして$、@、または%を使用します。 以下は、概念を説明するための例です-
上記のプログラムが実行されると、次の結果が生成されます-
変数の型がわからない場合は、 ref を使用してその型を簡単に知ることができます。引数が参照の場合、次の文字列のいずれかが返されます。 そうでなければ、それはfalseを返します-
次の例を試してみましょう-
上記のプログラムが実行されると、次の結果が生成されます-
循環参照
循環参照は、2つの参照に相互参照が含まれている場合に発生します。 参照を作成するときは注意する必要があります。そうしないと、循環参照がメモリリークを引き起こす可能性があります。 以下は例です-
上記のプログラムが実行されると、次の結果が生成されます-
関数への参照
これは、シグナルハンドラーを作成して、関数名の前に\&を付けて関数への参照を生成し、アンパサンド&を使用して参照変数のプレフィックスを付けるだけで参照を逆参照できるようにする必要がある場合に発生することがあります。 以下は例です-
上記のプログラムが実行されると、次の結果が生成されます-
Perl-フォーマット
Perlは、レポートを出力するために「フォーマット」と呼ばれる記述テンプレートを使用します。 Perlのフォーマット機能を使用するには、最初にフォーマットを定義する必要があり、次にそのフォーマットを使用してフォーマットされたデータを書き込むことができます。
フォーマットを定義する
以下は、Perl形式を定義するための構文です-
ここで、 FormatName はフォーマットの名前を表します。 fieldline は特定の方法であり、データをフォーマットする必要があります。 値行は、フィールド行に入力される値を表します。 単一のピリオドでフォーマットを終了します。
次の fieldline には、任意のテキストまたはフィールドホルダーを含めることができます。 フィールドホルダーは、後日そこに配置されるデータ用のスペースを保持します。 フィールドホルダーの形式は次のとおりです-
このフィールドホルダーは、フィールドスペースが5の左寄せです。 フィールド内のスペースの数を知るには、@記号と<記号を数える必要があります。 他のフィールドホルダーには次のものがあります-
例の形式は次のようになります-
この例では、$ nameは22文字のスペース内で左揃えとして書き込まれ、それ以降は2つのスペースに書き込まれます。
フォーマットを使用する
このフォーマット宣言を呼び出すには、 write キーワードを使用します-
問題は、通常、形式名が開いているファイルハンドルの名前であり、書き込みステートメントがこのファイルハンドルに出力を送信することです。 データをSTDOUTに送信するため、EMPLOYEEをSTDOUTファイルハンドルに関連付ける必要があります。 ただし、最初に、select()関数を使用して、STDOUTが選択されたファイルハンドルであることを確認する必要があります。
次に、次のように特別な変数$〜または$ FORMAT_NAMEを使用して、新しいフォーマット名をSTDOUTに設定することにより、EMPLOYEEをSTDOUTに関連付けます。
write()を実行すると、データはSTDOUTに送信されます。 要確認:STDOUTの代わりに他のファイルハンドルでレポートを作成する場合は、select()関数を使用してそのファイルハンドルを選択できます。残りのロジックは同じままです。
次の例を見てみましょう。 ここでは、使用法を示すために値をハードコードしています。 実際の使用では、ファイルまたはデータベースから値を読み取って実際のレポートを生成し、最終レポートをファイルに再度書き込む必要がある場合があります。
実行すると、これは次の結果を生成します-
レポートヘッダーを定義する
すべてうまくいきます。 ただし、レポートにヘッダーを追加することに興味があります。 このヘッダーは各ページの上部に印刷されます。 これを行うのは非常に簡単です。 テンプレートの定義とは別に、ヘッダーを定義して$ ^または$ FORMAT_TOP_NAME変数に割り当てる必要があります-
これで、レポートは次のようになります-
ページネーションを定義する
レポートが複数のページを使用している場合はどうですか? あなたはそのための解決策を持っています、単に次のようにヘッダーと一緒に* $%*または$ FORMAT_PAGE_NUMBER変数を使用してください-
これで、出力は次のようになります-
ページの行数
特別な変数 $ = (または$ FORMAT_LINES_PER_PAGE)を使用してページごとの行数を設定できます。デフォルトでは$ =は60です。
レポートフッターを定義する
$ ^または$ FORMAT_TOP_NAMEには現在のヘッダー形式の名前が含まれていますが、フッターに対して同じことを自動的に行う対応するメカニズムはありません。 固定サイズのフッターがある場合、各write()の前に変数$-または$ FORMAT_LINES_LEFTをチェックしてフッターを取得し、必要に応じて次のように定義された別の形式を使用してフッターを自分で印刷します-
フォーマットに関連する変数の完全なセットについては、リンクを参照してください:/perl/perl特殊変数[Perl特殊変数]セクション。
Perl-ファイルI/O
ファイル処理の基本は簡単です。 filehandle を外部エンティティ(通常はファイル)に関連付け、Perl内のさまざまな演算子と関数を使用して、ファイルハンドルに関連付けられたデータストリーム内に格納されているデータを読み取り、更新します。
ファイルハンドルは、物理ファイルを名前に関連付ける名前付きの内部Perl構造です。 すべてのファイルハンドルは読み取り/書き込みアクセスが可能なため、ファイルハンドルに関連付けられたファイルまたはデバイスから読み取りおよび更新できます。 ただし、ファイルハンドルを関連付ける場合、ファイルハンドルを開くモードを指定できます。
3つの基本的なファイルハンドル- STDIN 、 STDOUT 、および* STDERR、*は、それぞれ標準入力、標準出力、および標準エラーデバイスを表します。
ファイルの開閉
Perlで新規または既存のファイルを開くために使用できる、複数のフォームを持つ次の2つの関数があります。
ここで、FILEHANDLEは open 関数によって返されるファイルハンドルであり、EXPRはファイル名とファイルを開くモードを持つ式です。
機能を開く
以下は、 file.txt を読み取り専用モードで開くための構文です。 ここで、より小さい記号は、ファイルを読み取り専用モードで開く必要があることを示します。
ここで、DATAはファイルハンドルで、ファイルの読み取りに使用されます。 以下に例を示します。この例では、ファイルを開き、画面にコンテンツを印刷します。
以下は、書き込みモードでfile.txtを開くための構文です。 ここで、小なり記号は、ファイルを書き込みモードで開く必要があることを示します。
この例では、書き込みのためにファイルを開く前に実際にファイルを切り捨てます(空にします)。これは望ましい効果ではない場合があります。 読み取りおよび書き込み用にファイルを開く場合は、>または<文字の前にプラス記号を付けることができます。
たとえば、ファイルを切り捨てずに更新するために開くには-
最初にファイルを切り捨てるには-
追加モードでファイルを開くことができます。 このモードでは、書き込みポイントはファイルの最後に設定されます。
ダブル>>は、追加するファイルを開き、ファイルポインタを最後に配置して、情報の追加をすぐに開始できるようにします。 ただし、その前にプラス記号も配置しない限り、そこから読み取ることはできません-
次の表は、さまざまなモードの可能な値を示しています
Sr.No. | Entities & Definition |
---|---|
1 |
< or r 読み取り専用アクセス |
2 |
> or w 作成、書き込み、切り捨て |
3 |
>> or a 書き込み、追加、作成 |
4 |
< or r 読み取りと書き込み |
5 |
> or w 読み取り、書き込み、作成、切り捨て |
6 |
>> or a 読み取り、書き込み、追加、および作成 |
Sysopen関数
たとえば、更新のためにファイルを開くには、openから + <filename 形式をエミュレートします-
または更新する前にファイルを切り捨てます-
O_CREATを使用して新しいファイルを作成し、O_WRONLY-を使用してファイルを書き込み専用モードで開き、O_RDONLY-を使用してファイルを読み取り専用モードで開くことができます。
次の表は、MODEの可能な値を示しています。
Sr.No. | Entities & Definition |
---|---|
1 |
O_RDWR 読み書き |
2 |
O_RDONLY 読み取り専用 |
3 |
O_WRONLY 書き込みのみ |
4 |
O_CREAT ファイルを作成する |
5 |
O_APPEND ファイルを追加する |
6 |
O_TRUNC ファイルを切り捨てる |
7 |
O_EXCL ファイルが既に存在する場合は停止します |
8 |
O_NONBLOCK ノンブロッキングユーザビリティ |
クローズ機能
ファイルハンドルを閉じて、対応するファイルからファイルハンドルの関連付けを解除するには、 close 関数を使用します。 これにより、ファイルハンドルのバッファがフラッシュされ、システムのファイル記述子が閉じられます。
FILEHANDLEが指定されていない場合、現在選択されているファイルハンドルを閉じます。 バッファを正常にフラッシュしてファイルを閉じることができる場合にのみtrueを返します。
ファイルの読み書き
ファイルハンドルを開いたら、情報を読み書きできるようにする必要があります。 ファイルへのデータの読み取りと書き込みには、さまざまな方法があります。
<FILEHANDL>オペレーター
開いているファイルハンドルから情報を読み取る主な方法は、<FILEHANDLE>演算子です。 スカラーコンテキストでは、ファイルハンドルから1行を返します。 たとえば-
リストコンテキストで<FILEHANDLE>演算子を使用すると、指定されたファイルハンドルから行のリストが返されます。 たとえば、ファイルからすべての行を配列にインポートするには-
getc関数
getc関数は、指定されたFILEHANDLE、または指定されていない場合はSTDINから単一の文字を返します-
エラーがあった場合、またはファイルハンドルがファイルの最後にある場合、代わりにundefが返されます。
読み取り機能
read関数は、バッファリングされたファイルハンドルから情報のブロックを読み取ります。この関数は、ファイルからバイナリデータを読み取るために使用されます。
読み取られるデータの長さはLENGTHによって定義され、OFFSETが指定されていない場合、データはSCALARの先頭に配置されます。 それ以外の場合、データはSCALARのOFFSETバイトの後に配置されます。 この関数は、成功時に読み込まれたバイト数、ファイルの終わりにゼロ、エラーがあった場合はundefを返します。
印刷機能
ファイルハンドルから情報を読み取るために使用されるすべての異なる方法で、情報を書き戻すための主な機能は印刷機能です。
print関数は、LISTの評価値をFILEHANDLEまたは現在の出力ファイルハンドル(デフォルトではSTDOUT)に出力します。 たとえば-
ファイルをコピーする
次に例を示します。既存のファイルfile1.txtを開き、1行ずつ読み取り、別のコピーファイルfile2.txtを生成します。
ファイルの名前を変更する
次に、ファイルfile1.txtをfile2.txtに名前変更する方法を示す例を示します。 ファイルが/usr/testディレクトリにあると仮定します。
この関数 renames は2つの引数を取り、既存のファイルの名前を変更します。
既存のファイルを削除する
次に、 unlink 関数を使用してファイルfile1.txtを削除する方法を示す例を示します。
ファイル内の配置
関数を伝える
最初の要件は、ファイル内の位置を見つけることです。これは、tell関数を使用して行います-
これは、指定されている場合はFILEHANDLE内のファイルポインターの位置をバイト単位で返し、指定されていない場合は現在のデフォルトで選択されているファイルハンドルを返します。
シーク機能
シーク機能は、ファイル内の指定されたバイト数にファイルポインタを配置します-
この関数はfseekシステム関数を使用しており、開始、終了、現在の位置の3つの異なる点を基準にして同じ位置に配置できます。 これを行うには、WHENCEの値を指定します。
ゼロは、ファイルの先頭に相対的な位置を設定します。 たとえば、この行はファイルポインターをファイルの256番目のバイトに設定します。
ファイル情報
-Xテストと総称される一連のテスト演算子を使用して、Perl内で特定の機能を非常に迅速にテストできます。 たとえば、ファイルに対するさまざまな権限の簡単なテストを実行するには、次のようなスクリプトを使用できます-
ここにファイルまたはディレクトリを確認できる機能のリストがあります-
Sr.No. | Operator & Definition |
---|---|
1 |
-A スクリプトの開始時刻からファイルの最終アクセス時刻を引いた日数。 |
2 |
-B バイナリファイルですか? |
3 |
-C スクリプトの開始時刻からファイルの最終iノード変更時刻を引いた日数。 |
3 |
-M スクリプト開始時間からファイル変更時間を引いた日数。 |
4 |
-O ファイルは実際のユーザーIDによって所有されていますか? |
5 |
-R ファイルは実際のユーザーIDまたは実際のグループで読み取り可能ですか? |
6 |
-S ファイルはソケットですか? |
7 |
-T テキストファイルですか? |
8 |
-W ファイルは実際のユーザーIDまたは実際のグループによって書き込み可能ですか? |
9 |
-X ファイルは実際のユーザーIDまたは実際のグループで実行可能ですか? |
10 |
-b ブロックスペシャルファイルですか? |
11 |
-c キャラクタースペシャルファイルですか? |
12 |
-d ファイルはディレクトリですか? |
13 |
-e ファイルは存在しますか? |
14 |
-f それは普通のファイルですか? |
15 |
-g ファイルにsetgidビットが設定されていますか? |
16 |
-k ファイルにスティッキービットが設定されていますか? |
17 |
-l ファイルはシンボリックリンクですか? |
18 |
-o ファイルは実効ユーザーIDによって所有されていますか? |
19 |
-p ファイルは名前付きパイプですか? |
20 |
-r ファイルは有効なユーザーIDまたはグループIDで読み取り可能ですか? |
21 |
-s ファイルのサイズを返します。ゼロサイズ=空のファイル。 |
22 |
-t ファイルハンドルはTTY(端末)によって開かれていますか? |
23 |
-u ファイルにsetuidビットが設定されていますか? |
24 |
-w ファイルは有効なユーザーIDまたはグループIDで書き込み可能ですか? |
25 |
-x ファイルは有効なユーザーIDまたはグループIDで実行可能ですか? |
26 |
-z ファイルサイズはゼロですか? |
Perl-ディレクトリ
以下は、ディレクトリで遊ぶために使用される標準関数です。
すべてのファイルを表示する
特定のディレクトリで利用可能なすべてのファイルを一覧表示するさまざまな方法があります。 まず、 glob 演算子を使用して、すべてのファイルを取得およびリストする簡単な方法を使用しましょう-
ディレクトリを開き、このディレクトリ内で使用可能なすべてのファイルをリストする別の例を次に示します。
使用する可能性のあるCソースファイルのリストを印刷するもう1つの例は-
新しいディレクトリを作成
ディレクトリを削除する
ディレクトリを変更する
Perl-エラー処理
実行とエラーは常に一緒になります。 存在しないファイルを開いている場合。 この状況を適切に処理しなかった場合、プログラムは品質が悪いと見なされます。
エラーが発生すると、プログラムは停止します。 そのため、プログラムの実行中に発生し、プログラムを完全に停止する代わりに適切なアクションを実行するさまざまなタイプのエラーを処理するために、適切なエラー処理が使用されます。
さまざまな方法でエラーを識別してトラップできます。 Perlでエラーを簡単にトラップし、適切に処理します。 使用できる方法はいくつかあります。
ifステートメント
- ifステートメント*は、ステートメントからの戻り値を確認する必要がある場合の明らかな選択肢です。例えば-
ここで変数$! 実際のエラーメッセージを返します。 また、そうすることが理にかなっている状況では、ステートメントを1行に減らすことができます。例えば-
except関数
ここでは、chdir操作が失敗し、うまく読み込めた場合にのみ死にます。
三項演算子
非常に短いテストでは、条件演算子*?:*を使用できます
ここで達成しようとしていることはそれほど明確ではありませんが、効果は if または unless ステートメントを使用した場合と同じです。 条件演算子は、式またはステートメント内の2つの値のいずれかをすばやく返す場合に最適です。
警告機能
warn関数は警告を発するだけで、メッセージはSTDERRに出力されますが、それ以上のアクションは実行されません。 したがって、ユーザーへの警告を出力し、残りの操作を続行する場合は、より便利です-
ダイ機能
die関数は、exitも呼び出すことを除いて、warnと同じように機能します。 通常のスクリプト内では、この関数には実行を即座に終了する効果があります。 プログラムにエラーがある場合、続行するのが役に立たない場合にこの機能を使用する必要があります-
モジュール内のエラー
私たちが扱うことができるはずの2つの異なる状況があります-
モジュールのファイル名と行番号を引用するモジュールのエラーを報告する-これは、モジュールをデバッグするとき、またはスクリプト関連のエラーではなく、モジュール関連のエラーを発生させたいときに役立ちます。
エラーの原因となったスクリプト内の行をデバッグできるように、呼び出し元の情報を引用するモジュール内のエラーを報告します。 この方法で発生したエラーは、呼び出し元のスクリプトの発信ラインに関連するエラーを強調するため、エンドユーザーにとって便利です。
以下のようなスクリプトから呼び出された場合-
それは次の結果を生成します-
これは多かれ少なかれあなたが期待するものですが、必ずしもあなたが望むものではありません。 モジュールプログラマの観点から見ると、この情報はモジュール自体のバグを指摘するのに役立つので便利です。 エンドユーザーにとって、提供される情報はほとんど役に立たず、強化されたプログラマーを除くすべてにとって、それは完全に無意味です。
このような問題の解決策はCarpモジュールです。これは、呼び出し元のスクリプトに関する情報を返すモジュール内のエラーを報告する簡単な方法を提供します。 Carpモジュールは、carp、cluck、croak、およびconfessの4つの機能を提供します。 これらの機能については以下で説明します。
コイ関数
carp関数はwarnと基本的に同等であり、実際にスクリプトを終了してスクリプト名を出力することなく、メッセージをSTDERRに出力します。
以下のようなスクリプトから呼び出された場合-
それは次の結果を生成します-
cluck関数
cluck関数は一種のスーパーチャージドコイです。同じ基本原理に従っていますが、元のスクリプトの情報を含む、呼び出された関数につながったすべてのモジュールのスタックトレースも出力します。
以下のようなスクリプトから呼び出された場合-
それは次の結果を生成します-
クローク関数
以下のようなスクリプトから呼び出された場合-
それは次の結果を生成します-
carpと同様に、warnおよびdie機能に応じた行およびファイル情報の組み込みに関して、同じ基本規則が適用されます。
告白機能
以下のようなスクリプトから呼び出された場合-
それは次の結果を生成します-
Perl-特殊変数
Perlには、事前定義された特別な意味を持つ変数がいくつかあります。 これらは、$ _などの通常の変数インジケーター($、@、または%)の後に句読点文字を使用する変数です(以下で説明します)。
ほとんどの特別な変数には、英語のような長い名前があります。たとえば、オペレーティングシステムエラー変数$! $ OS_ERRORとして記述できます。 ただし、英語のような名前を使用する場合は、プログラムファイルの先頭に use English; を1行追加する必要があります。 これにより、インタープリターは変数の正確な意味をピックアップします。
最も一般的に使用される特殊変数は$ _で、デフォルトの入力とパターン検索文字列が含まれています。 たとえば、次の行で-
実行すると、これは次の結果を生成します-
繰り返しますが、$ _変数を明示的に使用せずに同じ例をチェックしましょう-
実行すると、これは次の結果も生成します-
ループが初めて実行されると、「ヒッコリー」が出力されます。 2回目は「dickory」が印刷され、3回目は「doc」が印刷されます。 これは、ループの各反復で、現在の文字列が$ _に配置され、デフォルトでprintによって使用されるためです。 以下は、Perlが指定しなくても$ _を想定する場所です-
- ordやintなどの関数を含むさまざまな単項関数、およびデフォルトのSTDINである-tを除くすべてのファイルテスト(-f、-d)。
- 印刷やリンク解除などのさまざまなリスト機能。
- =〜演算子なしで使用した場合のパターンマッチング操作m//、s///、およびtr///。
- 他の変数が指定されていない場合のforeachループのデフォルトの反復子変数。
- grepおよびmap関数の暗黙的な反復子変数。
- 行入力操作の結果がwhileテストの唯一の基準として単独でテストされるときに入力レコードを置くデフォルトの場所(つまり)。 whileテスト以外では、これは起こらないことに注意してください。
特別な変数タイプ
特殊変数の使用法と性質に基づいて、次のカテゴリに分類できます-
- グローバルスカラーの特殊変数。
- グローバル配列の特殊変数。
- グローバルハッシュ特殊変数。
- グローバルスペシャルファイルハンドル。
- グローバル特殊定数。
- 正規表現の特殊変数。
- ファイルハンドルの特殊変数。
グローバルスカラーの特殊変数
すべてのスカラー特殊変数のリストを次に示します。 対応する英語のような名前と記号名をリストしました。
$_
デフォルトの入力およびパターン検索スペース。
$ARG
$.
最後に読み取られたファイルハンドルの現在の入力行番号。 ファイルハンドルを明示的に閉じると、行番号がリセットされます。
$NR
$/
入力レコードセパレータ。デフォルトでは改行。 NULL文字列に設定すると、空白行が区切り文字として扱われます。
$RS
$,
印刷演算子の出力フィールド区切り文字。
$OFS
$\
印刷オペレーターの出力レコード分離文字。
$ORS
$"
「$」と同様ですが、二重引用符で囲まれた文字列(または同様の解釈された文字列)に補間されるリスト値に適用される点が異なります。 デフォルトはスペースです。
$ LIST_SEPARATOR
$;
多次元配列エミュレーションの添え字区切り文字。 デフォルトは「\ 034」です。
$ SUBSCRIPT_SEPARATOR
$^L
フォームフィードを実行するためにフォーマットが出力するもの。 デフォルトは「\ f」です。
$ FORMAT_FORMFEED
$:
フォーマット内の継続フィールド(^で始まる)を埋めるために文字列を分割できる現在の文字セット。 デフォルトは「\ n」です。
$ FORMAT_LINE_BREAK_CHARACTERS
$^A
フォーマット行の書き込みアキュムレーターの現在の値。
$ ACCUMULATOR
$#
印刷された数字の出力形式が含まれています(非推奨)。
$ OFMT
$?
最後のパイプクローズ、バックティック( ``)コマンド、またはシステムオペレーターによって返されたステータス。
$ CHILD_ERROR
$!
数値コンテキストで使用した場合、errno変数の現在の値を生成し、最後のシステムコールエラーを識別します。 文字列コンテキストで使用すると、対応するシステムエラー文字列が生成されます。
$ OS_ERRORまたは$ ERRNO
$@
最後のevalコマンドからのPerl構文エラーメッセージ。
$ EVAL_ERROR
$$
このスクリプトを実行しているPerlプロセスのpid。
$ PROCESS_IDまたは$ PID
$<
このプロセスの実際のユーザーID(uid)。
$ REAL_USER_IDまたは$ UID
$>
このプロセスの実効ユーザーID。
$ EFFECTIVE_USER_IDまたは$ EUID
$(
このプロセスの実際のグループID(gid)。
$ REAL_GROUP_IDまたは$ GID
$)
このプロセスの効果的なgid。
$ EFFECTIVE_GROUP_IDまたは$ EGID
$0
実行中のPerlスクリプトを含むファイルの名前が含まれます。
$ PROGRAM_NAME
$[
配列の最初の要素と部分文字列の最初の文字のインデックス。 デフォルトは0です。
$]
バージョンとパッチレベルを1000で割った値を返します。
$ PERL_VERSION
$^D
デバッグフラグの現在の値。
$デバッグ
$^E
一部のプラットフォームでの拡張エラーメッセージ。
$ EXTENDED_OS_ERROR
$^F
最大システムファイル記述子、通常は2。
$ SYSTEM_FD_MAX
$^H
特定の実用的なモジュールによって有効にされる内部コンパイラヒントが含まれています。
$^I
インプレース編集拡張機能の現在の値。 インプレース編集を無効にするには、undefを使用します。
$ INPLACE_EDIT
$^M
$ Mの内容は、Perlがメモリ不足エラーで終了した場合の緊急メモリプールとして使用できます。 $ Mを使用するには、Perlの特別なコンパイルが必要です。 詳細については、INSTALLドキュメントを参照してください。
$^O
現在のPerlバイナリがコンパイルされたオペレーティングシステムの名前が含まれています。
$ OSNAME
$^P
デバッガがそれ自体をデバッグしないようにクリアする内部フラグ。
$ PERLDB
$^T
スクリプトが実行を開始した時間(エポックからの秒単位)。
$ BASETIME
$^W
警告スイッチの現在の値、trueまたはfalse。
$警告
$^X
Perlバイナリ自体が実行された名前。
$ EXECUTABLE_NAME
$ ARGV
<ARGV>から読み取るときの現在のファイルの名前が含まれます。
グローバル配列の特殊変数
@ARGV | The array containing the command-line arguments intended for the script. |
@INC | The array containing the list of places to look for Perl scripts to be evaluated by the do, require, or use constructs. |
@F | The array into which the input lines are split when the -a command-line switch is given. |
グローバルハッシュ特殊変数
%INC | The hash containing entries for the filename of each file that has been included via do or require. |
%ENV | The hash containing your current environment. |
%SIG | The hash used to set signal handlers for various signals. |
グローバルスペシャルファイルハンドル
ARGV | The special filehandle that iterates over command line filenames in @ARGV. Usually written as the null filehandle in <>. |
STDERR | The special filehandle for standard error in any package. |
STDIN | The special filehandle for standard input in any package. |
STDOUT | The special filehandle for standard output in any package. |
DATA | The special filehandle that refers to anything following the END token in the file containing the script. Or, the special filehandle for anything following the DATA token in a required file, as long as you’re reading data in the same package DATA was found in. |
_ (underscore) | The special filehandle used to cache the information from the last stat, lstat, or file test operator. |
グローバル特殊定数
END | Indicates the logical end of your program. Any following text is ignored, but may be read via the DATA filehandle. |
FILE | Represents the filename at the point in your program where it’s used. Not interpolated into strings. |
LINE | Represents the current line number. Not interpolated into strings. |
PACKAGE | Represents the current package name at compile time, or undefined if there is no current package. Not interpolated into strings. |
正規表現の特殊変数
$ digit
最後に一致したパターンの対応する括弧のセットと一致したテキストが含まれます。 たとえば、$ 1は、前の正規表現の最初の括弧セットに含まれていたものに一致します。
$&
最後に成功したパターン一致で一致した文字列。
$ MATCH
$`
最後に成功したパターン一致で一致したものに先行する文字列。
$ PREMATCH
$'
最後に成功したパターン一致で一致したものに続く文字列。
$ POSTMATCH
$+
最後の検索パターンと一致した最後のブラケット。 これは、代替パターンのセットのどれが一致したかわからない場合に便利です。 例:/Version:(。)| Revision:(。)/&&($ rev = $ +);
$ LAST_PAREN_MATCH
ファイルハンドルの特殊変数
$|
ゼロ以外に設定すると、現在選択されている出力チャネルでの書き込みまたは印刷のたびに、fflush(3)を強制します。
$ OUTPUT_AUTOFLUSH
$%
現在選択されている出力チャンネルの現在のページ番号。
$ FORMAT_PAGE_NUMBER
$=
現在選択されている出力チャネルの現在のページ長(印刷可能な行)。 デフォルトは60です。
$ FORMAT_LINES_PER_PAGE
$-
現在選択されている出力チャンネルのページに残っている行数。
$ FORMAT_LINES_LEFT
$~
現在選択されている出力チャネルの現在のレポート形式の名前。 デフォルトはファイルハンドルの名前です。
$ FORMAT_NAME
$^
現在選択されている出力チャンネルの現在のページトップ形式の名前。 デフォルトは、_TOPが付加されたファイルハンドルの名前です。
$ FORMAT_TOP_NAME
Perl-コーディング標準
もちろん、各プログラマーはフォーマットに関して独自の好みを持っていますが、プログラムを読み、理解し、保守しやすくする一般的なガイドラインがいくつかあります。
最も重要なことは、プログラムを常に-wフラグの下で実行することです。 必要に応じて、no warningsプラグマまたは$ ^ W変数を使用して、コードの特定の部分に対して明示的にオフにすることができます。 また、常に厳格な使用の下で実行するか、そうでない理由を知っておく必要があります。 sigtrapを使用し、さらに診断プラグマを使用することも有用である可能性があります。
コードのレイアウトの美しさに関して、Larryが強く気をつけている唯一のことは、複数行のブロックの閉じ中括弧が、構造を開始したキーワードと並ぶことです。 それを超えて、彼はそれほど強くない他の好みを持っています-
- 4列のインデント。
- 可能であれば、キーワードと同じ行でカーリーを開き、それ以外の場合は整列します。
- 複数行ブロックの開始カーリーの前のスペース。
- 1行のブロックは、カーリーを含めて1行に配置できます。
- セミコロンの前にスペースはありません。
- 「短い」1行ブロックではセミコロンが省略されています。
- ほとんどのオペレーターの周りのスペース。
- 「複雑な」添え字の周りのスペース(括弧内)。
- 異なることを行うチャンク間の空白行。
- 抱きしめられていない他人。
- 関数名とその開き括弧の間にスペースはありません。
- 各コンマの後にスペース。
- 演算子の後の長い行(andおよびorを除く)。
- 現在の行の最後の括弧のマッチング後のスペース。
- 対応するアイテムを垂直に並べます。
- 明瞭さが損なわれない限り、冗長な句読点を省略します。
考えるべき他のいくつかのより本質的なスタイルの問題は次のとおりです。特定の方法で何かを実行できるからといって、そのように実行する必要はありません。 Perlは何でもできるようにいくつかの方法を提供するように設計されているので、最も読みやすいものを選ぶことを検討してください。 例えば-
より良いです-
2番目の方法は、修飾子のステートメントの主要なポイントを隠すためです。 一方、
より良いです-
主なポイントは、ユーザーが-vを入力したかどうかではないからです。
Perlが最後の演算子を提供しているので、途中で終了できるようになっている場合は、愚かなゆがみを繰り返して、上部または下部でループを終了しないでください。 少し「アウトデント」するだけで、見やすくなります-
さらにいくつかの重要なポイントを見てみましょう-
- ループラベルを使用することをためらわないでください。読みやすさを向上させるためだけでなく、マルチレベルのループブレークを可能にするためにもあります。 前の例を参照してください。
- voidコンテキストで、つまり戻り値を破棄するだけで、grep()(またはmap())または `backticks`を使用しないでください。 これらの関数にはすべて戻り値があるため、それらを使用します。 それ以外の場合は、代わりにforeach()ループまたはsystem()関数を使用します。
- 移植性のために、すべてのマシンに実装されていない可能性がある機能を使用する場合は、evalでコンストラクトをテストして、失敗するかどうかを確認してください。 特定の機能が実装されたバージョンまたはパッチレベルがわかっている場合は、$](英語では$ PERL_VERSION)をテストして、そこにあるかどうかを確認できます。 Configモジュールでは、Perlのインストール時にConfigureプログラムによって決定された値を調べることもできます。
- ニーモニック識別子を選択します。 ニーモニックの意味を思い出せない場合は、問題が発生しています。
- $ gotitなどの短い識別子はおそらく大丈夫ですが、アンダースコアを使用して長い識別子の単語を区切ります。 一般的に、$ VarNamesLikeThisよりも$ var_names_like_thisの方が読みやすく、特に英語を母国語としない人にとっては読みやすいです。 また、VAR_NAMES_LIKE_THISと一貫して機能する単純なルールです。
- パッケージ名は、この規則の例外になる場合があります。 Perlは、integerやstrictなどの「プラグマ」モジュールの小文字のモジュール名を非公式に予約しています。 他のモジュールは大文字で始め、大文字と小文字を混ぜて使用する必要がありますが、原始ファイルシステムのモジュール名の表現がスパースバイトに収まる必要があるファイルであるため、アンダースコアは使用しないでください。
- 本当に毛むくじゃらの正規表現がある場合は、/x修飾子を使用し、空白を入れて、ラインノイズのように見えないようにします。 正規表現にスラッシュまたはバックスラッシュが含まれる場合は、スラッシュを区切り文字として使用しないでください。
- システムコールのリターンコードを常に確認してください。 適切なエラーメッセージはSTDERRに送られ、問題を引き起こしたプログラム、失敗したシステムコールと引数、および(非常に重要な)失敗したものに関する標準システムエラーメッセージを含める必要があります。 これはシンプルだが十分な例です-
- 再利用性について考えてください。 もう一度同じようなことをしたいのに、なぜ一発で頭脳力を浪費するのですか? コードを一般化することを検討してください。 モジュールまたはオブジェクトクラスの作成を検討してください。 use strictおよびuse warnings(または-w)を有効にしてコードをきれいに実行することを検討してください。 コードを提供することを検討してください。 全世界の見方を変えることを検討してください。 検討してください… ああ気にしません。
- 一貫性を保ってください。
- いいね。
Perl-メールの送信
sendmailユーティリティの使用
プレーンメッセージの送信
Linux/Unixマシンで作業している場合は、Perlプログラム内で sendmail ユーティリティを使用してメールを送信できます。 特定のメールIDにメールを送信できるサンプルスクリプトを次に示します。 sendmailユーティリティの指定されたパスが正しいことを確認してください。 これは、Linux/Unixマシンによって異なる場合があります。
実際、上記のスクリプトはクライアントの電子メールスクリプトです。このスクリプトは、電子メールを作成し、Linux/Unixマシンでローカルに実行されているサーバーに送信します。 このスクリプトは、実際の宛先にメールを送信する責任を負いません。 そのため、特定の電子メールIDに電子メールを送信するには、電子メールサーバーが適切に構成され、マシンで実行されていることを確認する必要があります。
HTMLメッセージを送信する
sendmailを使用してHTML形式の電子メールを送信する場合は、次のように電子メールのヘッダー部分に Content-type:text/html \ n を追加するだけです-
MIME :: Liteモジュールの使用
Windowsマシンで作業している場合、sendmailユーティリティにアクセスできません。 ただし、MIME:Lite perlモジュールを使用して独自のメールクライアントを作成することもできます。 このモジュールは、http://search.cpan.org/CPAN/authors/id/Y/YV/YVES/MIME-Lite-3.01.tar.gz [MIME-Lite-3.01.tar.gz]からダウンロードしてインストールできます。マシンのWindowsまたはLinux/Unixで使用します。 それをインストールするには、簡単な手順に従ってください-
- 以上で、マシンにMIME
- Liteモジュールがインストールされます。 これで、以下で説明する簡単なスクリプトを使用してメールを送信する準備ができました。
プレーンメッセージの送信
次に、指定された電子メールIDに電子メールを送信する処理を行うスクリプトを示します-
HTMLメッセージを送信する
sendmailを使用してHTML形式の電子メールを送信する場合は、電子メールのヘッダー部分に Content-type:text/html \ n を追加するだけです。 以下は、HTML形式の電子メールの送信を処理するスクリプトです。
添付ファイルを送信する
あなたが添付ファイルを送信したい場合は、次のスクリプトが目的を果たします-
attach()メソッドを使用して、メールに好きなだけファイルを添付できます。
SMTPサーバーを使用する
マシンが電子メールサーバーを実行していない場合は、リモートロケーションで利用可能な他の電子メールサーバーを使用できます。 ただし、他のメールサーバーを使用するには、ID、パスワード、URLなどが必要です。 必要な情報がすべて揃ったら、次のように* send()*メソッドでその情報を提供するだけです-
電子メールサーバー管理者に連絡して、上記の使用情報を入手してください。ユーザーIDとパスワードがまだ利用できない場合は、管理者が数分で作成できます。
Perl-ソケットプログラミング
ソケットとは何ですか?
ソケットは、異なるプロセス間で仮想二重接続を作成するBerkeley UNIXメカニズムです。 これは後に、既知のすべてのOSに移植され、異なるOSソフトウェアで実行されている地理的な場所にあるシステム間の通信を可能にしました。 ソケットを使用しない場合、システム間のネットワーク通信のほとんどは発生しませんでした。
よく見てください。ネットワーク上の一般的なコンピューターシステムは、その上で実行されているさまざまなアプリケーションが必要とする情報を送受信します。 一意のIPアドレスが指定されているため、この情報はシステムにルーティングされます。 システムでは、この情報は、さまざまなポートでリッスンする関連アプリケーションに提供されます。 たとえば、インターネットブラウザはポート80でWebサーバーから受信した情報をリッスンします。 また、特定のポート番号で情報をリッスンおよび送受信できるカスタムアプリケーションを作成することもできます。
とりあえず、ソケットはIPアドレスとポートであり、ネットワークを介してデータを送受信するための接続を可能にします。
上記のソケットの概念を説明するために、Perlを使用したクライアント-サーバープログラミングの例を取り上げます。 クライアントサーバーアーキテクチャを完了するには、次の手順を実行する必要があります-
サーバーを作成するには
- socket 呼び出しを使用してソケットを作成します。
- bind 呼び出しを使用して、ソケットをポートアドレスにバインドします。
- listen 呼び出しを使用して、ポートアドレスでソケットをリッスンします。
- accept 呼び出しを使用してクライアント接続を受け入れます。
クライアントを作成するには
- socket 呼び出しでソケットを作成します。
- connect 呼び出しを使用して、サーバーに(ソケット)を接続します。
次の図は、クライアントとサーバーが互いに通信するために使用する呼び出しの完全なシーケンスを示しています-
サーバー側のソケット呼び出し
socket()呼び出し
- socket()*呼び出しは、ネットワーク接続を確立してソケットを作成する最初の呼び出しです。 この呼び出しには、次の構文があります-
上記の呼び出しはSOCKETを作成し、他の3つの引数は整数であり、TCP/IP接続に対して次の値を持つ必要があります。
- DOMAIN はPF_INETである必要があります。 お使いのコンピューターではおそらく2です。
- TCP/IP接続の場合、 TYPE はSOCK_STREAMである必要があります。
- PROTOCOL は*(getprotobyname( 'tcp'))[2] *でなければなりません。 ソケットを介して話されるのは、TCPなどの特定のプロトコルです。
したがって、サーバーによって発行されたソケット関数呼び出しは、このようなものになります-
bind()呼び出し
socket()呼び出しによって作成されたソケットは、ホスト名とポート番号にバインドされるまでは役に立ちません。 サーバーは、次の* bind()*関数を使用して、クライアントからの接続を受け入れるポートを指定します。
ここで、SOCKETはsocket()呼び出しによって返される記述子であり、ADDRESSは3つの要素を含むソケットアドレス(TCP/IP用)です-
- アドレスファミリ(TCP/IPの場合、AF_INETであり、おそらくシステム上で2)。
- ポート番号(21など)。
- コンピューターのインターネットアドレス(たとえば、10.12.12.168)。
bind()はサーバーによって使用されるため、サーバーは自身のアドレスを知る必要がないため、引数リストは次のようになります-
listen()呼び出し
これがサーバープログラムの場合、指定されたポートで* listen()*を呼び出してリッスンする、つまり、着信要求を待つ必要があります。 この呼び出しには、次の構文があります-
上記の呼び出しは、socket()呼び出しによって返されるSOCKET記述子を使用し、QUEUESIZEは同時に許可される未処理の接続要求の最大数です。
accept()呼び出し
これがサーバープログラムの場合、* access()*関数の呼び出しを発行して、着信接続を受け入れる必要があります。 この呼び出しには、次の構文があります-
socket()関数によって返されるSOCKET記述子を受け取るaccept呼び出しは、正常に完了すると、クライアントとサーバー間の今後のすべての通信に対して新しいソケット記述子NEW_SOCKETが返されます。 access()呼び出しが失敗した場合、最初に使用したSocketモジュールで定義されているFLASEを返します。
一般的に、accept()は無限ループで使用されます。 1つの接続が到着するとすぐに、サーバーはそれを処理する子プロセスを作成するか、自分でサービスを提供してから戻ってさらに接続をリッスンします。
これで、サーバーに関連するすべての呼び出しが終了し、クライアントが必要とする呼び出しを確認できます。
クライアント側のソケット呼び出し
connect()呼び出し
クライアントプログラムを準備する場合は、まず* socket()呼び出しを使用してソケットを作成し、次に connect()呼び出しを使用してサーバーに接続する必要があります。 あなたはすでにsocket()呼び出し構文を見てきました、そしてそれはサーバーsocket()呼び出しに類似したままですが、ここに connect()*呼び出しの構文があります-
ここで、SCOKETはクライアントによって発行されたsocket()呼び出しによって返されたソケット記述子であり、ADDRESSは_bind_呼び出しと同様のソケットアドレスです。ただし、リモートサーバーのIPアドレスが含まれています。
サーバーに正常に接続すると、SOCKET記述子を使用してサーバーへのコマンドの送信を開始できます。そうしないと、エラーメッセージが表示されてクライアントが表示されます。
クライアント-サーバーの例
以下は、Perlソケットを使用して簡単なクライアントサーバープログラムを実装するPerlコードです。 ここで、サーバーは着信要求をリッスンし、接続が確立されると、_サーバーからのスマイル_を単に返信します。 クライアントはそのメッセージを読み取り、画面に印刷します。 サーバーとクライアントが同じマシン上にあると仮定して、どのように行われたかを見てみましょう。
サーバーを作成するスクリプト
バックグラウンドモードでサーバーを実行するには、Unixプロンプトで次のコマンドを発行します-
クライアントを作成するスクリプト
今すぐコマンドプロンプトでクライアントを起動してみましょう。これはサーバーに接続し、サーバーから送信されたメッセージを読み取り、次のように画面に表示します-
注-実際のIPアドレスをドット表記で指定する場合、混乱を避けるために、クライアントとサーバーの両方で同じ形式のIPアドレスを提供することをお勧めします。
PERLでのオブジェクト指向プログラミング
PerlおよびPerlの匿名配列およびハッシュの参照については既に検討しています。 Perlのオブジェクト指向の概念は、参照と匿名配列およびハッシュに非常に基づいています。 オブジェクト指向Perlの基本概念の学習を始めましょう。
オブジェクトの基本
Perlがオブジェクトを処理する方法の観点から説明される3つの主要な用語があります。 用語は、オブジェクト、クラス、およびメソッドです。
- Perl内の*オブジェクト*は、それが属するクラスを知っているデータ型への単なる参照です。 オブジェクトは、参照としてスカラー変数に格納されます。 スカラーにはオブジェクトへの参照のみが含まれるため、同じスカラーは異なるクラスの異なるオブジェクトを保持できます。
- Perl内の class は、オブジェクトの作成と操作に必要な対応するメソッドを含むパッケージです。
- Perl内の method は、パッケージで定義されたサブルーチンです。 メソッドの最初の引数は、メソッドが現在のオブジェクトまたはクラスに影響するかどうかに応じて、オブジェクト参照またはパッケージ名です。
Perlは* bless()*関数を提供します。これは、最終的にオブジェクトになる参照を返すために使用されます。
クラスを定義する
Perlでクラスを定義するのは非常に簡単です。 クラスは、最も単純な形式のPerlパッケージに対応しています。 Perlでクラスを作成するには、まずパッケージをビルドします。
パッケージは、ユーザー定義の変数とサブルーチンの自己完結型のユニットであり、繰り返し再利用できます。
Perlパッケージは、サブルーチンと変数を他のパッケージと競合しないように保つPerlプログラム内に別の名前空間を提供します。
PerlでPersonという名前のクラスを宣言するには、次のようにします-
パッケージ定義の範囲は、ファイルの最後まで、または別のパッケージキーワードが見つかるまで続きます。
オブジェクトの作成と使用
クラス(オブジェクト)のインスタンスを作成するには、オブジェクトコンストラクターが必要です。 このコンストラクタは、パッケージ内で定義されたメソッドです。 ほとんどのプログラマーはこのオブジェクトコンストラクターメソッドにnewという名前を付けることを選択しますが、Perlでは任意の名前を使用できます。
Perlでは、あらゆる種類のPerl変数をオブジェクトとして使用できます。 ほとんどのPerlプログラマは、配列またはハッシュへの参照を選択します。
Perlハッシュ参照を使用してPersonクラスのコンストラクターを作成しましょう。 オブジェクトを作成するときは、コンストラクターを提供する必要があります。コンストラクターは、オブジェクト参照を返すパッケージ内のサブルーチンです。 オブジェクト参照は、パッケージのクラスへの参照を祝福することによって作成されます。 たとえば-
次に、オブジェクトの作成方法を見てみましょう。
クラス変数に値を割り当てたくない場合は、コンストラクターで単純なハッシュを使用できます。 たとえば-
メソッドの定義
他のオブジェクト指向言語には、データのセキュリティという概念があり、プログラマがオブジェクトデータを直接変更するのを防ぎ、オブジェクトデータを変更するためのアクセサメソッドを提供します。 Perlにはプライベート変数はありませんが、ヘルパーメソッドの概念を使用してオブジェクトデータを操作できます。
人の名を取得するヘルパーメソッドを定義しましょう-
人の名を設定する別のヘルパー機能-
次に、完全な例を見てみましょう。Personパッケージとヘルパー関数をPerson.pmファイルに保存します。
次のようにemployee.plファイルのPersonオブジェクトを利用しましょう-
上記のプログラムを実行すると、次の結果が生成されます-
継承
オブジェクト指向プログラミングには、継承と呼ばれる非常に優れた便利な概念があります。 継承とは、親クラスのプロパティとメソッドが子クラスで利用できることを意味します。 したがって、同じコードを何度も書く必要はなく、親クラスを継承するだけです。
たとえば、Personを継承するEmployeeクラスを作成できます。 これは、従業員が個人であるため、「isa」関係と呼ばれます。 Perlには、これを支援する特別な変数@ISAがあります。 @ISAは(メソッド)継承を管理します。
以下は、継承を使用する際に考慮すべき重要な点です-
- Perlは、指定されたオブジェクトのクラスで、指定されたメソッドまたは属性、つまり変数を検索します。
- Perlは、オブジェクトクラスの@ISA配列で定義されたクラスを検索します。
- 手順1または2でメソッドが見つからない場合、@ ISAツリーで見つかった場合、PerlはAUTOLOADサブルーチンを使用します。
- それでも一致するメソッドが見つからない場合、Perlは標準Perlライブラリの一部として提供されるUNIVERSALクラス(パッケージ)内でメソッドを検索します。
- メソッドがまだ見つからない場合、Perlは放棄してランタイム例外を発生させます。
したがって、Personクラスからメソッドと属性を継承する新しいEmployeeクラスを作成するには、次のようにコーディングするだけです。このコードをEmployee.pmに保持します。
これで、従業員クラスにはPersonクラスから継承されたすべてのメソッドと属性があり、次のように使用できます。main.plファイルを使用してテストします-
上記のプログラムを実行すると、次の結果が生成されます-
メソッドのオーバーライド
子クラスEmployeeは、親クラスPersonからすべてのメソッドを継承します。 ただし、子クラスでこれらのメソッドをオーバーライドする場合は、独自の実装を提供することでそれを行うことができます。 追加の関数を子クラスに追加するか、親クラスの既存のメソッドの機能を追加または変更できます。 次のように実行できます。Employee.pmファイルを変更します。
ここで、再びmain.plファイルでEmployeeオブジェクトを使用して実行してみましょう。
上記のプログラムを実行すると、次の結果が生成されます-
デフォルトのオートローディング
Perlには、他のプログラミング言語にはない機能、デフォルトのサブルーチンがあります。 つまり、* AUTOLOAD()*という関数を定義すると、未定義のサブルーチンを呼び出すと、AUTOLOAD()関数が自動的に呼び出されます。 不足しているサブルーチンの名前には、このサブルーチン内で$ AUTOLOADとしてアクセスできます。
デフォルトの自動ロード機能は、エラー処理に非常に役立ちます。 AUTOLOADを実装する例を次に示します。この関数は独自の方法で実装できます。
デストラクタとガベージコレクション
以前にオブジェクト指向プログラミングを使用してプログラミングしたことがある場合は、オブジェクトの使用が終了したときにオブジェクトに割り当てられたメモリを解放するために*デストラクタ*を作成する必要があることに気付くでしょう。 Perlは、オブジェクトがスコープから外れるとすぐにこれを自動的に行います。
ファイルを閉じたり、余分な処理を行うデストラクタを実装する場合は、 DESTROY という特別なメソッドを定義する必要があります。 このメソッドは、Perlがそれに割り当てられたメモリを解放する直前にオブジェクトで呼び出されます。 他のすべての点で、DESTROYメソッドは他のメソッドとまったく同じであり、このメソッド内に任意のロジックを実装できます。
デストラクタメソッドは、単にDESTROYという名前のメンバー関数(サブルーチン)であり、次の場合に自動的に呼び出されます-
- オブジェクト参照の変数が範囲外になるとき。
- オブジェクト参照の変数が未定義の場合。
- スクリプトが終了するとき
- Perlインタープリターが終了するとき
たとえば、次のメソッドDESTROYをクラスに単純に入れることができます-
オブジェクト指向Perlの例
次に、Perlのオブジェクト指向の概念を理解するのに役立つ別の素晴らしい例を示します。 このソースコードを任意のperlファイルに入れて実行します。
上記のプログラムを実行すると、次の結果が生成されます-
Perl-データベースアクセス
この章では、Perlスクリプト内のデータベースにアクセスする方法を説明します。 Perl 5以降、 DBI モジュールを使用してデータベースアプリケーションを非常に簡単に作成できるようになりました。 DBIはPerl用の Database Independent Interface の略です。つまり、DBIはPerlコードと基礎となるデータベースの間に抽象化レイヤーを提供し、データベース実装を簡単に切り替えることができることを意味します。
DBIは、Perlプログラミング言語用のデータベースアクセスモジュールです。 使用される実際のデータベースに関係なく、一貫したデータベースインターフェイスを提供する一連のメソッド、変数、および規則を提供します。
DBIアプリケーションのアーキテクチャ
DBIは、バックエンドで使用可能なデータベースから独立しています。 Oracle、MySQL、Informixなどのいずれで作業していても、DBIを使用できます。 これは、次のアーキテクチャ図から明らかです。
ここで、DBIはすべてのSQLコマンドをAPI(つまり、アプリケーションプログラミングインターフェース)から取得し、実際の実行のために適切なドライバーにディスパッチする責任があります。 最後に、DBIはドライバーから結果を取得し、呼び出し元のscritpに結果を返す責任があります。
表記法と規則
この章では、次の表記法を使用します。同じ規則に従うことをお勧めします。
データベース接続
MySQLデータベースを使用すると仮定します。 データベースに接続する前に、次のことを確認してください。 MySQLデータベースにデータベースとテーブルを作成する方法を知らない場合は、MySQLチュートリアルを利用できます。
- TESTDBという名前のデータベースを作成しました。
- TESTDBにTEST_TABLEという名前のテーブルを作成しました。
- このテーブルには、FIRST_NAME、LAST_NAME、AGE、SEX、およびINCOMEフィールドがあります。
- ユーザーID「testuser」とパスワード「test123」は、TESTDBにアクセスするように設定されています。
- PerlモジュールDBIがマシンに正しくインストールされています。
- MySQLの基本を理解するために、MySQLチュートリアルを完了しました。
以下は、MySQLデータベース「TESTDB」と接続する例です-
データソースとの接続が確立されると、データベースハンドルが返され、さらに使用するために$ dbhに保存されます。
INSERT操作
いくつかのレコードをテーブルに作成する場合は、INSERT操作が必要です。 ここでは、テーブルTEST_TABLEを使用してレコードを作成しています。 したがって、データベース接続が確立されると、TEST_TABLEにレコードを作成する準備が整います。 以下は、TEST_TABLEに単一のレコードを作成する手順です。 同じコンセプトを使用して、好きなだけレコードを作成できます。
レコードの作成は次の手順を実行します-
- INSERTステートメントでSQLステートメントを準備しています。 これは、* prepare()* APIを使用して行われます。
- SQLクエリを実行して、データベースからすべての結果を選択します。 これは、* execute()* APIを使用して行われます。
- Stattementハンドルを解放します。 これは* finish()* APIを使用して行われます。
- すべてが正常に完了したら、この操作を*コミット*します。それ以外の場合は、トランザクションを*ロールバック*できます。 コミットとロールバックについては、次のセクションで説明します。
バインド値の使用
入力する値が事前に指定されていない場合があります。 そのため、実行時に必要な値を取得するバインド変数を使用できます。 Perl DBIモジュールは、実際の値の代わりに疑問符を使用し、実際の値は実行時にexecute()APIを介して渡されます。 以下は例です-
読み取り操作
任意のデータベースに対するREAD操作は、データベースからいくつかの有用な情報、つまり1つ以上のテーブルから1つ以上のレコードを取得することを意味します。 したがって、データベース接続が確立されると、このデータベースにクエリを実行する準備が整います。 以下は、20より大きいAGEを持つすべてのレコードを照会する手順です。 これは4つのステップがかかります-
- 必要な条件に基づいてSQL SELECTクエリを準備します。 これは、* prepare()* APIを使用して行われます。
- SQLクエリを実行して、データベースからすべての結果を選択します。 これは、* execute()* APIを使用して行われます。
- すべての結果を1つずつ取得し、それらの結果を出力します。これは、* fetchrow_array()* APIを使用して行われます。
- Stattementハンドルを解放します。 これは* finish()* APIを使用して行われます。
バインド値の使用
事前に条件が与えられない場合があります。 そのため、実行時に必要な値を取得するバインド変数を使用できます。 Perl DBIモジュールは、実際の値の代わりに疑問符を使用し、実行時に実際の値がexecute()APIを介して渡されます。 以下は例です-
更新操作
データベースでのUPDATE操作とは、データベーステーブルですでに使用可能な1つ以上のレコードを更新することです。 以下は、SEXが「M」であるすべてのレコードを更新する手順です。 ここでは、すべての男性の年齢を1年増やします。 これには3つのステップがかかります-
- 必要な条件に基づいてSQLクエリを準備します。 これは、* prepare()* APIを使用して行われます。
- SQLクエリを実行して、データベースからすべての結果を選択します。 これは、* execute()* APIを使用して行われます。
- Stattementハンドルを解放します。 これは* finish()* APIを使用して行われます。
- すべてが正常に完了したら、この操作を*コミット*します。それ以外の場合は、トランザクションを*ロールバック*できます。 コミットおよびロールバックAPIについては、次のセクションをご覧ください。
バインド値の使用
事前に条件が与えられない場合があります。 そのため、実行時に必要な値を取るバインド変数を使用できます。 Perl DBIモジュールは、実際の値の代わりに疑問符を使用し、実行時に実際の値がexecute()APIを介して渡されます。 以下は例です-
場合によっては、次のようにバインディング値を使用できるように、事前に指定されていない値を設定したいことがあります。 この例では、すべての男性の収入が10000に設定されます。
削除操作
データベースから一部のレコードを削除する場合は、DELETE操作が必要です。 以下は、AGEが30であるTEST_TABLEからすべてのレコードを削除する手順です。 この操作では、次の手順を実行します。
- 必要な条件に基づいてSQLクエリを準備します。 これは、* prepare()* APIを使用して行われます。
- SQLクエリを実行して、データベースから必要なレコードを削除します。 これは、* execute()* APIを使用して行われます。
- Stattementハンドルを解放します。 これは* finish()* APIを使用して行われます。
- すべてが正常に完了したら、この操作を*コミット*します。それ以外の場合は、トランザクションを*ロールバック*できます。
doステートメントの使用
UPDATE、INSERT、またはDELETEを実行している場合、データベースから返されるデータはないため、この操作を実行するためのショートカットがあります。 do ステートメントを使用して、次のようにコマンドを実行できます。
コミット操作
コミットは、変更をファイナライズするためにデータベースに緑のシグナルを与える操作であり、この操作の後、変更を元の位置に戻すことはできません。
ロールバック操作
すべての変更に満足できない場合、または操作の間にエラーが発生した場合は、それらの変更を元に戻して rollback APIを使用できます。
以下は、 rollback APIを呼び出す簡単な例です。
トランザクション開始
多くのデータベースはトランザクションをサポートしています。 これは、データベースを変更するクエリの全体を作成できることを意味しますが、実際には変更は行われません。 最後に、特別なSQLクエリ COMMIT を発行すると、すべての変更が同時に行われます。 または、クエリROLLBACKを発行できます。この場合、すべての変更は破棄され、データベースは変更されません。
Perl DBIモジュールは begin_work APIを提供し、次のコミットまたはロールバックの呼び出しまでトランザクションを有効にします(AutoCommitをオフにすることにより)。 次のコミットまたはロールバックの後、AutoCommitは再び自動的にオンになります。
AutoCommitオプション
トランザクションが単純な場合、多くのコミットを発行する手間を省くことができます。 接続呼び出しを行う場合、クエリが成功するたびに自動コミット操作を実行する AutoCommit オプションを指定できます。 これは次のようなものです-
ここで、AutoCommitは値1または0を取ることができます。1はAutoCommitがオンになり、0はAutoCommitがオフになることを意味します。
自動エラー処理
接続呼び出しを行うとき、エラーを自動的に処理するRaiseErrorsオプションを指定できます。 エラーが発生すると、DBIはエラーコードを返す代わりにプログラムを中止します。 エラーでプログラムを中止するだけであれば、これは便利です。 これは次のようなものです-
ここで、RaiseErrorは値1または0を取ります。
データベースの切断
データベース接続を切断するには、次のように disconnect APIを使用します-
悲しいことに、disconnectメソッドのトランザクションの動作は未定義です。 一部のデータベースシステム(OracleやIngresなど)は未解決の変更を自動的にコミットしますが、他のデータベースシステム(Informixなど)は未解決の変更をロールバックします。 AutoCommitを使用しないアプリケーションは、disconnectを呼び出す前に、commitまたはrollbackを明示的に呼び出す必要があります。
NULL値の使用
未定義の値、またはundefは、NULL値を示すために使用されます。 非NULL値の場合と同様に、NULL値を持つ列を挿入および更新できます。 これらの例では、列の経過時間をNULL値で挿入および更新します-
ここで、 qq \ {} は、引用符付き文字列を prepare APIに返すために使用されます。 ただし、WHERE句でNULL値を使用する場合は注意が必要です。 考慮-
undef(NULL)をプレースホルダーにバインドすると、NULL年齢の行は選択されません! 少なくとも標準SQLに準拠するデータベースエンジン用。 この理由については、ご使用のデータベースエンジンのSQLマニュアルまたはSQLの本を参照してください。 NULLを明示的に選択するには、「WHERE age IS NULL」と言わなければなりません。
一般的な問題は、実行時に定義済みまたはundef(非NULLまたはNULL)のいずれかの値をコードフラグメントで処理することです。 簡単な手法は、必要に応じて適切なステートメントを準備し、非NULLの場合のプレースホルダーを置き換えることです-
その他のDBI関数
available_drivers
- @INCのディレクトリからDBD
- *モジュールを検索することにより、使用可能なすべてのドライバーのリストを返します。 デフォルトでは、一部のドライバーが以前のディレクトリにある同じ名前の他のドライバーによって隠されている場合、警告が表示されます。 $ quietに真の値を渡すと、警告が抑制されます。
installed_drivers
現在のプロセスに「インストール」(ロード)されているすべてのドライバーのドライバー名とドライバーハンドルのペアのリストを返します。 ドライバー名には「DBD ::」プレフィックスは含まれません。
data_sources
指定されたドライバーを介して利用可能なデータソース(データベース)のリストを返します。 $ driverが空またはundefの場合、DBI_DRIVER環境変数の値が使用されます。
見積もり
文字列内に含まれる特殊文字(引用符など)をエスケープし、必要な種類の外部引用符を追加することにより、SQLステートメントでリテラル値として使用する文字列リテラルを引用します。
ほとんどのデータベースタイプでは、quoteは 'Dont'(外側の引用符を含む)を返します。 quote()メソッドが、目的の文字列に評価されるSQL式を返すことは有効です。 たとえば-
すべてのハンドルに共通のメソッド
err
- 最後に呼び出されたドライバーメソッドからネイティブデータベースエンジンのエラーコードを返します。 通常、コードは整数ですが、それを想定しないでください。 これは、$ DBI
- errまたは$ h→ errと同等です。
errstr
- 最後に呼び出されたDBIメソッドからのネイティブデータベースエンジンエラーメッセージを返します。 これには、上記の「err」メソッドと同じ寿命の問題があります。 これは、$ DBI
- errstrまたは$ h→ errstrと同等です。
rows
- これは、前のSQLステートメントの影響を受けた行数を返し、$ DBI
- rowsと同等です。
トレース
DBIは、実行中の実行時トレース情報を生成する非常に便利な機能を備えています。これは、DBIプログラムの奇妙な問題を突き止めようとする場合に非常に時間を節約できます。 さまざまな値を使用して、トレースレベルを設定できます。 これらの値は、0〜4です。 値0はトレースを無効にすることを意味し、4は完全なトレースを生成することを意味します。
補間された声明は禁止されています
次のように補間されたステートメントを使用しないことを強くお勧めします-
したがって、代わりに*バインド値*を使用して動的SQLステートメントを準備する補間ステートメントを使用しないでください。
Perl-CGIプログラミング
CGIとは何ですか?
- Common Gateway Interface(CGI)は、Webサーバーとカスタムスクリプトの間で情報を交換する方法を定義する一連の標準です。
- CGIの仕様は現在NCSAによって維持されており、NCSAは次のようにCGIを定義しています-
- Common Gateway Interface(CGI)は、外部ゲートウェイプログラムがHTTPサーバーなどの情報サーバーとインターフェイスするための標準です。
- 現在のバージョンはCGI/1.1で、CGI/1.2は進行中です。
ウェブブラウジング
CGIの概念を理解するために、特定のWebページまたはURLを閲覧するためにWebページで利用可能なハイパーリンクをクリックするとどうなるかを見てみましょう。
- ブラウザは、HTTPプロトコルを使用してWebサーバーにアクセスし、URL、つまりWebページのファイル名を要求します。
- WebサーバーはURLをチェックし、要求されたファイル名を探します。 Webサーバーがそのファイルを見つけると、それ以上実行せずにファイルをブラウザーに送ります。そうしないと、間違ったファイルを要求したことを示すエラーメッセージを送信します。
- WebブラウザはWebサーバーからの応答を受け取り、ファイルが見つからない場合は、受信したファイルコンテンツまたはエラーメッセージを表示します。
ただし、特定のディレクトリ内のファイルが要求されるたびにそのファイルが送り返されないように、HTTPサーバーを設定することは可能です。代わりに、プログラムとして実行され、そのプログラムが結果として出力するものは何でも、ブラウザに戻されて表示されます。 これは、Webサーバーで使用可能な特別な機能を使用して実行できます。 Common Gateway Interface またはCGIと呼ばれ、最終結果を生成するためにサーバーによって実行されるプログラムはCGIスクリプトと呼ばれます。 これらのCGIプログラムは、PERLスクリプト、シェルスクリプト、CまたはC ++プログラムなどです。
CGIアーキテクチャ図
Webサーバーのサポートと構成
CGIプログラミングに進む前に、WebサーバーがCGI機能をサポートし、CGIプログラムを処理するように構成されていることを確認してください。 Webサーバーによって実行されるすべてのCGIプログラムは、事前に構成されたディレクトリに保持されます。 このディレクトリはCGIディレクトリと呼ばれ、慣例により/cgi-binと名付けられます。 慣例により、Perl CGIファイルの拡張子は .cgi になります。
最初のCGIプログラム
link:/cgi-bin/hello.cgi [hello.cgi]と呼ばれるCGIスクリプトにリンクされている簡単なリンクを次に示します。 このファイルは /cgi-bin/ ディレクトリに保存されており、次の内容が含まれています。 CGIプログラムを実行する前に、 chmod 755 hello.cgi UNIXコマンドを使用してファイルの変更モードがあることを確認してください。
このhello.cgiスクリプトは、出力をSTDOUTファイル、つまり画面に書き込む単純なPerlスクリプトです。 印刷される最初の行である Content-type:text/html \ r \ n \ r \ n という重要で追加の機能が1つあります。 この行はブラウザに送り返され、ブラウザ画面に表示されるコンテンツタイプを指定します。 CGIの基本概念を理解している必要があり、Perlを使用して多くの複雑なCGIプログラムを作成できます。 このスクリプトは、データベース、Webサービス、またはその他の複雑なインターフェイスなどの情報を交換するために、他の労力を要するシステムとも対話できます。
HTTPヘッダーについて
最初の行の Content-type:text/html \ r \ n \ r \ n はHTTPヘッダーの一部であり、ブラウザーがサーバー側からの着信コンテンツを理解できるようにブラウザーに送信されます。 すべてのHTTPヘッダーは次の形式になります-
例-
CGIプログラミングで頻繁に使用する他の重要なHTTPヘッダーはほとんどありません。
Sr.No. | Header & Description |
---|---|
1 |
Content-type: String 返されるコンテンツの形式を定義するMIME文字列。 例はContent-type:text/htmlです |
2 |
Expires: Date String 情報が無効になる日付。 これは、ブラウザがページを更新する必要がある時期を決定するために使用する必要があります。 有効な日付文字列は、1998年1月1日12:00:00 GMTの形式である必要があります。 |
3 |
Location: URL String 要求されたURLの代わりに返されるURL。 このフィールドを使用して、リクエストを他の場所にリダイレクトできます。 |
4 |
Last-modified: String ファイルの最終変更日。 |
5 |
Content-length: String 返されるデータの長さ(バイト単位)。 ブラウザはこの値を使用して、ファイルの推定ダウンロード時間を報告します。 |
6 |
Set-Cookie: String _string_を介して渡されるCookieを設定します |
CGI環境変数
すべてのCGIプログラムは、次の環境変数にアクセスできます。 これらの変数は、CGIプログラムの作成中に重要な役割を果たします。
Sr.No. | Variables Names & Description |
---|---|
1 |
CONTENT_TYPE コンテンツのデータ型。 クライアントが添付コンテンツをサーバーに送信するときに使用されます。 たとえば、ファイルのアップロードなど。 |
2 |
CONTENT_LENGTH クエリ情報の長さ。 POSTリクエストでのみ利用可能です |
3 |
HTTP_COOKIE 設定されたCookieをキーと値のペアの形式で返します。 |
4 |
HTTP_USER_AGENT User-Agent request-headerフィールドには、リクエストを発信したユーザーエージェントに関する情報が含まれています。 Webブラウザーの名前。 |
5 |
PATH_INFO CGIスクリプトのパス。 |
6 |
QUERY_STRING GETメソッド要求で送信されるURLエンコードされた情報。 |
7 |
REMOTE_ADDR 要求を行っているリモートホストのIPアドレス。 これは、ロギングまたは認証の目的に役立ちます。 |
8 |
REMOTE_HOST 要求を行っているホストの完全修飾名。 この情報が利用できない場合、REMOTE_ADDRを使用してIRアドレスを取得できます。 |
9 |
REQUEST_METHOD 要求を行うために使用されるメソッド。 最も一般的なメソッドはGETおよびPOSTです。 |
10 |
SCRIPT_FILENAME CGIスクリプトへのフルパス。 |
11 |
SCRIPT_NAME CGIスクリプトの名前。 |
12 |
SERVER_NAME サーバーのホスト名またはIPアドレス。 |
13 |
SERVER_SOFTWARE サーバーが実行しているソフトウェアの名前とバージョン。 |
以下は、WebサーバーでサポートされているすべてのCGI変数をリストする小さなCGIプログラムです。 このリンクをクリックして結果を確認してくださいhttps://www.finddevguides.com/cgi-bin/get_env.cgi[Get Environment]
[ファイルのダウンロード]ダイアログボックスを表示しますか?
ユーザーがリンクをクリックし、実際のコンテンツを表示する代わりに、「ファイルのダウンロード」ダイアログボックスをユーザーに表示するオプションを提供したい場合があります。 これは非常に簡単で、HTTPヘッダーを介して実現されます。
このHTTPヘッダーは、前のセクションで説明したヘッダーとは異なります。 たとえば、特定のリンクから FileName ファイルをダウンロード可能にしたい場合、その構文は次のようになります-
GETおよびPOSTメソッド
ブラウザからWebサーバーに、そして最終的にはリクエストを処理するCGIプログラムに情報を渡す必要がある場合、多くの状況に遭遇したに違いありません。 ほとんどの場合、ブラウザは2つの方法を使用してこの情報をWebサーバーに渡します。 これらのメソッドは GET メソッドと POST メソッドです。 それらを一つ一つ確認しましょう。
GETメソッドを使用して情報を渡す
GETメソッドは、エンコードされたユーザー情報をページURL自体に追加して送信します。 ページとエンコードされた情報は、? 次のような文字-
GETメソッドは、ブラウザーからWebサーバーに情報を渡すdefualtメソッドであり、ブラウザーのLocation:boxに表示される長い文字列を生成します。 サーバーに渡すパスワードやその他の機密情報がある場合は、GETメソッドを使用しないでください。 GETメソッドにはサイズ制限があります。リクエスト文字列で渡すことができるのは1024文字のみです。
この情報は QUERY_STRING ヘッダーを使用して渡され、CGIプログラムで解析して使用できるQUERY_STRING環境変数を介してCGIプログラムでアクセスできます。
キーと値のペアを任意のURLと連結するだけで情報を渡すことができます。または、HTML <FORM>タグを使用して、GETメソッドを使用して情報を渡すことができます。
単純なURLの例:Getメソッド
GETメソッドを使用してhello_get.cgiプログラムに2つの値を渡す簡単なURLを次に示します。
リンク:/cgi-bin/hello_get.cgi?first_name = ZARA&last_name = ALI [http://www.finddevguides.com/cgi-bin/hello_get.cgi?first_name=ZARA&last_name=ALI]
以下は、Webブラウザからの入力を処理する hello_get.cgi スクリプトです。
単純なFORMの例:GETメソッド
HTML FORMと送信ボタンを使用して2つの値を渡す簡単な例を次に示します。 この入力を処理するために、同じCGIスクリプトhello_get.cgiを使用します。
上記のフォームコーディングの実際の出力を次に示します。 これで、姓と名を入力し、送信ボタンをクリックして結果を確認できます。
名前苗字:
POSTメソッドを使用して情報を渡す
CGIプログラムに情報を渡すより信頼性の高い方法は、 POST メソッドです。 これは、GETメソッドとまったく同じ方法で情報をパッケージ化しますが、URLの*?*の後にテキスト文字列として送信する代わりに、HTTPヘッダーの一部として別のメッセージとして送信します。 Webサーバーは、このメッセージを標準入力の形式でCGIスクリプトに提供します。
以下は、Webブラウザーからの入力を処理するために変更された hello_post.cgi スクリプトです。 このスクリプトは、GETメソッドとPOSTメソッドを処理します。
上記と同じ例をもう一度見てみましょう。これは、HTML FORMと送信ボタンを使用して2つの値を渡します。 この入力を処理するには、CGIスクリプトhello_post.cgiを使用します。
上記のフォームコーディングの実際の出力を次に示します。名と姓を入力し、[送信]ボタンをクリックして結果を確認します。
名前苗字:
チェックボックスデータをCGIプログラムに渡す
チェックボックスは、複数のオプションを選択する必要がある場合に使用されます。 以下に、2つのチェックボックスがあるフォームのHTMLコードの例を示します。
このコードの結果は次の形式です-
数学物理学
以下は、ラジオボタンのWebブラウザーからの入力を処理する checkbox.cgi スクリプトです。
ラジオボタンデータをCGIプログラムに渡す
オプションを1つだけ選択する必要がある場合は、ラジオボタンが使用されます。 これは、2つのラジオボタンがあるフォームのHTMLコードの例です-
このコードの結果は次の形式です-
数学物理学
以下は、ラジオボタン用にWebブラウザから与えられた入力を処理する radiobutton.cgi スクリプトです。
テキスト領域データをCGIプログラムに渡す
textarea要素は、複数行のテキストをCGIプログラムに渡す必要がある場合に使用されます。 ここにTEXTAREAボックスを持つフォームのHTMLコードの例があります-
このコードの結果は次の形式です-
以下は、Webブラウザからの入力を処理する textarea.cgi スクリプトです。
ドロップダウンボックスデータをCGIプログラムに渡す
ドロップダウンボックスは、使用可能なオプションが多数あるが、1つまたは2つだけが選択される場合に使用されます。 これは、ドロップダウンボックスが1つあるフォームのHTMLコードの例です
このコードの結果は次の形式です-
数学物理学
以下は、Webブラウザからの入力を処理する dropdown.cgi スクリプトです。
CGIでのCookieの使用
HTTPプロトコルはステートレスプロトコルです。 ただし、商用Webサイトの場合は、異なるページ間でセッション情報を維持する必要があります。 たとえば、多くのページにまたがるトランザクションの後、1人のユーザー登録が終了します。 しかし、すべてのWebページにわたってユーザーのセッション情報を維持する方法は?
多くの場合、Cookieの使用は、ユーザーの利便性やサイトの統計情報を改善するために必要な設定、購入、手数料、その他の情報を記憶および追跡する最も効率的な方法です。
使い方
サーバーは、Cookieの形式で訪問者のブラウザにデータを送信します。 ブラウザはCookieを受け入れる場合があります。 存在する場合、訪問者のハードドライブにプレーンテキストレコードとして保存されます。 これで、訪問者がサイトの別のページに到達すると、Cookieを取得できます。 取得されると、サーバーは保存された内容を認識/記憶します。
クッキーは5つの可変長フィールドのプレーンテキストデータレコードです-
- 有効期限-Cookieの有効期限が切れる日付。 これが空白の場合、訪問者がブラウザを終了すると、Cookieは期限切れになります。
- ドメイン-サイトのドメイン名。
- Path -Cookieを設定するディレクトリまたはWebページへのパス。 任意のディレクトリまたはページからCookieを取得する場合、これは空白になる場合があります。
- 安全-このフィールドに「安全」という単語が含まれている場合、Cookieは安全なサーバーでのみ取得できます。 このフィールドが空白の場合、そのような制限はありません。
- 名前=値-Cookieはキーと値のペアの形式で設定および再表示されます。
クッキーを設定する
クッキーをブラウザに送信するのは非常に簡単です。 これらのCookieは、HTTPヘッダーとともに送信されます。 ユーザーIDとパスワードをCookieとして設定するとします。 だから、次のように行われます-
ここでは、 Set-Cookie HTTPヘッダーを使用してCookieを設定しました。 Expires、Domain、PathなどのCookie属性を設定することはオプションです。 マジックライン "Content-type:text/html \ r \ n \ r \ n を送信する前にCookieが設定されることに注意することが重要です。
Cookieを取得する
設定されたすべてのCookieを取得するのは非常に簡単です。 クッキーはCGI環境変数HTTP_COOKIEに保存され、次の形式になります。
Cookieを取得する方法の例を次に示します。
上記のCookieが検索Cookieスクリプトを呼び出す前に設定されている場合、これにより次の結果が生成されます。
CGIモジュールとライブラリ
インターネットには、CGIプログラムで使用する機能を直接提供する多くの組み込みモジュールがあります。 以下はかつて重要です。
Perl-パッケージとモジュール
パッケージとは何ですか?
- パッケージは、独自の名前空間に存在するコードのコレクションです。
- 名前空間は、一意の変数名の名前付きコレクションです(シンボルテーブルとも呼ばれます)。
- 名前空間は、パッケージ間の変数名の衝突を防ぎます。
- パッケージを使用すると、モジュールの構築が可能になります。使用すると、モジュールの名前空間外の変数や関数が上書きされなくなります。
- パッケージは、別のパッケージステートメントが呼び出されるまで、または現在のブロックまたはファイルの終わりまで有効です。
- :: パッケージ修飾子を使用して、パッケージ内の変数を明示的に参照できます。
次に、ファイルにmainパッケージとFooパッケージがある例を示します。 ここでは、パッケージ名の出力に特殊変数PACKAGEが使用されています。
上記のコードが実行されると、次の結果が生成されます-
BEGINブロックとENDブロック
BEGINおよびENDという名前のコードブロックをいくつでも定義できます。これらは、それぞれコンストラクターおよびデストラクタとして機能します。
- perlスクリプトがロードされコンパイルされた後、他のステートメントが実行される前に、すべての BEGIN ブロックが実行されます。
- すべてのENDブロックは、perlインタープリターが終了する直前に実行されます。
- BEGINブロックとENDブロックは、Perlモジュールを作成するときに特に役立ちます。
次の例は、その使用法を示しています-
上記のコードが実行されると、次の結果が生成されます-
Perlモジュールとは何ですか?
Perlモジュールは、拡張子が.pmのパッケージの名前と同じ名前のライブラリファイルで定義された再利用可能なパッケージです。
Perlモジュールに関するいくつかの重要なポイント
- 関数 require および use はモジュールをロードします。
- どちらも、モジュールを見つけるために @ INC の検索パスのリストを使用します。
- どちらの関数も require と use は eval 関数を呼び出してコードを処理します。
- 下部の 1; により、evalはTRUEと評価されます(したがって失敗しません)。
Require関数
モジュールは、次のように require 関数を呼び出すことでロードできます-
サブルーチン名を呼び出すには、サブルーチン名が完全修飾されている必要があることに注意してください。 Foo ::修飾子を使用する必要がないように、サブルーチン bar および blat を独自のネームスペースにインポートできるようにすると便利です。
使用機能
モジュールは、 use 関数を呼び出すことでロードできます。
パッケージの関数名を完全に修飾する必要がないことに注意してください。 use 関数は、モジュール内にいくつかのステートメントが追加されると、モジュールからシンボルのリストをエクスポートします。
次に、 @ EXPORT という名前のリスト変数を入力して、シンボルのリスト(スカラー、リスト、ハッシュ、サブルーチンなど)を提供します。
Perlモジュールツリーを作成する
Perlモジュールを出荷する準備ができたら、Perlモジュールツリーを作成する標準的な方法があります。 これは、 h2xs ユーティリティを使用して行われます。 このユーティリティはPerlに付属しています。 ここにh2xsを使用する構文があります-
たとえば、モジュールが Person.pm ファイルで使用可能な場合、次のコマンドを発行するだけです-
これは、次の結果を生成します-
ここにこれらのオプションの説明があります-
- -A はオートローダーコードを省略します(頻繁に使用されない多数のサブルーチンを定義するモジュールで最適に使用されます)。
- -X はXS要素を省略します(eXternal Subroutine、eXternalはPerlの外部、つまりCを意味します)。
- -n はモジュールの名前を指定します。
したがって、上記のコマンドはPersonディレクトリ内に次の構造を作成します。 実際の結果は上に示されています。
- 変更点
- Makefile.PL
- MANIFEST(パッケージ内のすべてのファイルのリストが含まれています)
- README
- t/(テストファイル)
- lib/(実際のソースコードはここにあります
最後に、このディレクトリ構造を* Person.tar.gzファイルに tar すると、出荷できます。 適切な手順でREADMEファイルを更新する必要があります。 tディレクトリにいくつかのテスト例ファイルを提供することもできます。
Perlモジュールのインストール
tar.gzファイルの形式でPerlモジュールをダウンロードします。 次のシーケンスを使用して、 Person.tar.gz ファイルとしてダウンロードされたPerlモジュール Person.pm をインストールします。
Perlインタープリターには、モジュールを検索するディレクトリーのリストがあります(グローバル配列@INC)。
Perl-プロセス管理
Perlをさまざまな方法で使用して、要件に従って新しいプロセスを作成できます。 このチュートリアルでは、Perlプロセスを作成および管理する重要で最も頻繁に使用されるいくつかの方法をリストします。
- 特別な変数 $$ または $ PROCESS_ID を使用して、現在のプロセスIDを取得できます。
- 上記の方法のいずれかを使用して作成されたすべてのプロセスは、*%ENV *変数を使用して独自の仮想環境を維持します。
- * exit()*関数は常にこの関数を実行する子プロセスのみを終了し、実行中のすべての子プロセスが終了しない限り、メインプロセス全体は終了しません。
- 開いているすべてのハンドルは子プロセスでdup()処理されるため、1つのプロセスでハンドルを閉じても他のプロセスには影響しません。
バックスティック演算子
Unixコマンドを実行するこの最も簡単な方法は、バックスティック演算子を使用することです。 あなたは単にバックスティック演算子の中にコマンドを置くだけで、コマンドの実行になり、次のように保存できる結果を返します-
上記のコードが実行されると、現在のディレクトリで使用可能なすべてのファイルとディレクトリが一覧表示されます-
system()関数
- system()*関数を使用して、Unixコマンドを実行することもできます。このコマンドの出力は、perlスクリプトの出力に送られます。 デフォルトでは、画面、つまりSTDOUTですが、リダイレクト演算子を使用して任意のファイルにリダイレクトできます>-
上記のコードが実行されると、現在のディレクトリで使用可能なすべてのファイルとディレクトリが一覧表示されます-
コマンドに$ PATHや$ HOMEなどのシェル環境変数が含まれている場合は注意してください。 次の3つのシナリオを試してください-
上記のコードが実行されると、シェル変数$ PATHの設定に応じて次の結果が生成されます。
fork()関数
Perlは、同じ名前のUnixシステムコールに対応する* fork()*関数を提供します。 fork()システムコールが使用可能なほとんどのUNIXライクプラットフォームでは、Perlのfork()が単にそれを呼び出します。 fork()システムコールが利用できないWindowsのようないくつかのプラットフォームでは、インタプリタレベルでfork()をエミュレートするためにPerlを構築することができます。
fork()関数は、現在のプロセスを複製するために使用されます。 この呼び出しは、同じポイントで同じプログラムを実行する新しいプロセスを作成します。 子pidを親プロセスに、0を子プロセスに、フォークが失敗した場合はundefを返します。
プロセス内で* exec()*関数を使用すると、要求された実行可能ファイルを起動できます。この実行可能ファイルは別のプロセス領域で実行され、exec()はそのプロセスと同じ終了ステータスで終了する前に実行を待ちます。
上記のコードが実行されると、次の結果が生成されます-
- wait()および waitpid()*は、fork()によって返される擬似プロセスIDとして渡すことができます。 これらの呼び出しは、擬似プロセスの終了を適切に待機し、そのステータスを返します。 * waitpid()*関数を使用して子供を待たずに分岐すると、ゾンビが蓄積されます。 Unixシステムでは、次のように$ SIG \ {CHLD}を「IGNORE」に設定することでこれを回避できます-
上記のコードが実行されると、次の結果が生成されます-
kill()関数
Perlの* kill( 'KILL'、(プロセスリスト))*関数を使用して、fork()によって返されたIDを渡すことにより、疑似プロセスを終了できます。
pseudo-process()でkill( 'KILL'、(Process List))を使用すると、通常、擬似プロセスを実装するスレッドがリソースをクリーンアップする機会を得られないため、メモリリークが発生する可能性があることに注意してください。
- kill()*関数を使用して、他の信号をターゲットプロセスに送信できます。たとえば、次のようにSIGINTをプロセスID 104および102に送信します-
Perl-組み込みドキュメント
PerlモジュールおよびスクリプトにPod(Plain Old Text)ドキュメントを埋め込むことができます。 以下は、Perlコードに埋め込まれたドキュメントを使用するルールです-
空の行でドキュメントを開始し、先頭に= * head1 コマンドを入力し、= * *cut *で終了します
Perlは、コードに入力したPodテキストを無視します。 以下は、Perlコード内で埋め込みドキュメントを使用する簡単な例です-
上記のコードが実行されると、次の結果が生成されます-
Podをファイルの最後に配置し、ENDまたはDATAカットマークを使用する場合、次のように最初のPodコマンドの前に空の行を配置します。 = * head1 、多くの翻訳者は= * *head1 *をPodブロックの開始として認識していません。
上記のコードが実行されると、次の結果が生成されます-
DATA部分を読み取らずに同じコードのもう1つの例を見てみましょう-
上記のコードが実行されると、次の結果が生成されます-
PODとは何ですか?
Podは、Perl、Perlプログラム、およびPerlモジュールのドキュメントを作成するために使用される、使いやすいマークアップ言語です。 Podをプレーンテキスト、HTML、マニュアルページなどのさまざまな形式に変換するためのさまざまなトランスレーターがあります。 ポッドマークアップは、3種類の基本的な段落で構成されます-
- 通常の段落-太字、斜体、コードスタイル、ハイパーリンクなど、通常の段落で書式設定コードを使用できます。
- 逐語的な段落-逐語的な段落は通常、特別な解析や書式設定を必要とせず、折り返すべきではないコードブロックやその他のテキストを表示するために使用されます。
- コマンド段落-コマンド段落は、通常、見出しまたはリストの一部として、テキスト全体を特別に扱うために使用されます。 すべてのコマンドの段落は=で始まり、その後に識別子が続き、その後にコマンドが自由に使用できる任意のテキストが続きます。 現在認識されているコマンドは-
PODの例
次のPODを考慮してください-
Linuxで利用可能な pod2html ユーティリティを使用して、上記のPODをHTMLに変換できるため、次の結果が生成されます-
著作権2005 [TUTORIALSOPOINT]。
次に、次の例を検討してください-
pod2htmlを使用して上記のPODをHTMLに変換すると、次の結果が生成されます-
Perl-関数リファレンス
以下は、標準Perlでサポートされているすべての重要な機能のリストです。
- link:/perl/perl_abs [abs]-絶対値関数
- link:/perl/perl_accept [accept]-着信ソケット接続を受け入れます
- link:/perl/perl_alarm [alarm]-SIGALRMをスケジュールします
- link:/perl/perl_atan2 [atan2]--PIからPIの範囲のY/Xのアークタンジェント
- link:/perl/perl_bind [bind]-アドレスをソケットにバインドします
- link:/perl/perl_binmode [binmode]-I/O用のバイナリファイルを準備する
- link:/perl/perl_bless [bless]-オブジェクトを作成します
- link:/perl/perl_caller [caller]-現在のサブルーチン呼び出しのコンテキストを取得します
- link:/perl/perl_chdir [chdir]-現在の作業ディレクトリを変更します
- link:/perl/perl_chmod [chmod]-ファイルのリストの権限を変更します
- link:/perl/perl_chomp [chomp]-文字列から末尾のレコード区切り文字を削除します
- link:/perl/perl_chop [chop]-文字列から最後の文字を削除します
- link:/perl/perl_chown [chown]-ファイルのリストの所有権を変更します
- link:/perl/perl_chr [chr]-この数値が表す文字を取得します
- link:/perl/perl_chroot [chroot]-ディレクトリをパス検索用の新しいルートにします
- link:/perl/perl_close [close]-ファイル(またはパイプまたはソケット)ハンドルを閉じます
- link:/perl/perl_closedir [closedir]-ディレクトリハンドルを閉じる
- link:/perl/perl_connect [connect]-リモートソケットに接続します
- link:/perl/perl_continue [continue]-whileまたはforeachのオプションの後続ブロック
- link:/perl/perl_cos [cos]-コサイン関数
- link:/perl/perl_crypt [crypt]-一方向のpasswdスタイルの暗号化
- link:/perl/perl_dbmclose [dbmclose]-関連付けられたdbmファイルのバインディングを解除します
- link:/perl/perl_dbmopen [dbmopen]-関連付けられたdbmファイルにバインディングを作成します
- link:/perl/perl_defined [defined]-値、変数、または関数が定義されているかどうかをテストします
- link:/perl/perl_delete [delete]-ハッシュから値を削除します
- link:/perl/perl_die [die]-例外を発生させるか、救済する
- link:/perl/perl_do [do]-BLOCKをTERMに変換します
- link:/perl/perl_dump [dump]-即時コアダンプを作成します
- link:/perl/perl_each [each]-ハッシュから次のキーと値のペアを取得します
- link:/perl/perl_endgrent [endgrent]-グループファイルを使用して実行
- link:/perl/perl_endhostent [endhostent]-ホストファイルを使用して実行
- link:/perl/perl_endnetent [endnetent]-ネットワークファイルを使用して実行
- link:/perl/perl_endprotoent [endprotoent]-プロトコルファイルを使用して実行
- リンク:/perl/perl_endpwent [endpwent]-passwdファイルを使用して実行
- link:/perl/perl_endservent [endservent]-サービスファイルを使用して実行
- link:/perl/perl_eof [eof]-ファイルハンドルの終わりをテストします
- link:/perl/perl_eval [eval]-例外をキャッチするか、コードをコンパイルして実行します
- link:/perl/perl_exec [exec]-このプログラムを破棄して別のプログラムを実行します
- link:/perl/perl_exists [exists]-ハッシュキーが存在するかどうかをテストします
- link:/perl/perl_exit [exit]-このプログラムを終了します
- link:/perl/perl_exp [exp]-Iを累乗します
- link:/perl/perl_fcntl [fcntl]-ファイル制御システムコール
- link:/perl/perl_fileno [fileno]-ファイルハンドルからファイル記述子を返します
- link:/perl/perl_flock [flock]-勧告的ロックでファイル全体をロックします
- link:/perl/perl_fork [fork]-このような新しいプロセスを作成します
- link:/perl/perl_format [format]-write()関数で使用する画像フォーマットを宣言します
- link:/perl/perl_formline [formline]-フォーマットに使用される内部関数
- link:/perl/perl_getc [getc]-ファイルハンドルから次の文字を取得します
- link:/perl/perl_getgrent [getgrent]-次のグループレコードを取得します
- link:/perl/perl_getgrgid [getgrgid]-グループユーザーIDを指定してグループレコードを取得します
- link:/perl/perl_getgrnam [getgrnam]-グループ名を指定してグループレコードを取得します
- link:/perl/perl_gethostbyaddr [gethostbyaddr]-アドレスを指定してホストレコードを取得します
- link:/perl/perl_gethostbyname [gethostbyname]-指定された名前のホストレコードを取得します
- link:/perl/perl_gethostent [gethostent]-次のホストレコードを取得します
- link:/perl/perl_getlogin [getlogin]-このttyにログインしたユーザーを返す
- link:/perl/perl_getnetbyaddr [getnetbyaddr]-アドレスを指定してネットワークレコードを取得します
- link:/perl/perl_getnetbyname [getnetbyname]-指定された名前のネットワークレコードを取得します
- link:/perl/perl_getnetent [getnetent]-次のネットワークレコードを取得します
- link:/perl/perl_getpeername [getpeername]-ソケット接続のもう一方の端を見つけます
- link:/perl/perl_getpgrp [getpgrp]-プロセスグループを取得する
- link:/perl/perl_getppid [getppid]-親プロセスIDを取得します
- link:/perl/perl_getpriority [getpriority]-現在の適切な値を取得します
- link:/perl/perl_getprotobyname [getprotobyname]-名前を指定してプロトコルレコードを取得します
- link:/perl/perl_getprotobynumber [getprotobynumber]-プロトコルレコード数値プロトコルを取得します
- link:/perl/perl_getprotoent [getprotoent]-次のプロトコルレコードを取得します
- link:/perl/perl_getpwent [getpwent]-次のパスワードレコードを取得します
- link:/perl/perl_getpwnam [getpwnam]-ユーザーのログイン名を指定してpasswdレコードを取得します
- link:/perl/perl_getpwuid [getpwuid]-ユーザーIDを指定してpasswdレコードを取得します
- link:/perl/perl_getservbyname [getservbyname]-名前を指定してサービスレコードを取得します
- link:/perl/perl_getservbyport [getservbyport]-数値ポートを指定してサービスレコードを取得します
- link:/perl/perl_getservent [getservent]-次のサービスレコードを取得します
- link:/perl/perl_getsockname [getsockname]-指定されたソケットのsockaddrを取得します
- link:/perl/perl_getsockopt [getsockopt]-指定されたソケットのソケットオプションを取得します
- link:/perl/perl_glob [glob]-ワイルドカードを使用してファイル名を展開します
- link:/perl/perl_gmtime [gmtime]-グリニッジ標準時形式を使用してUNIX時間をレコードまたは文字列に変換します。
- link:/perl/perl_goto [goto]-スパゲッティコードを作成
- link:/perl/perl_grep [grep]-リスト内の要素を検索します。与えられた基準に対して真になります。
- link:/perl/perl_hex [hex]-文字列を16進数に変換します
- link:/perl/perl_import [import]-モジュールの名前空間を独自のものにパッチします
- link:/perl/perl_index [index]-文字列内の部分文字列を検索します
- link:/perl/perl_int [int]-数値の整数部分を取得します
- link:/perl/perl_ioctl [ioctl]-システム依存のデバイス制御システムコール
- link:/perl/perl_join [join]-セパレータを使用してリストを文字列に結合します
- link:/perl/perl_keys [keys]-ハッシュからインデックスのリストを取得します
- link:/perl/perl_kill [kill]-プロセスまたはプロセスグループにシグナルを送信します
- link:/perl/perl_last [last]-ブロックを途中で終了します
- link:/perl/perl_lc [lc]-文字列の小文字バージョンを返す
- link:/perl/perl_lcfirst [lcfirst]-次の文字だけを小文字にした文字列を返します
- link:/perl/perl_length [length]-文字列のバイト数を返します
- link:/perl/perl_link [link]-ファイルシステムにハードリンクを作成します
- link:/perl/perl_listen [listen]-サーバーとしてソケットを登録します
- link:/perl/perl_local [local]-グローバル変数の一時的な値を作成します(動的スコープ)
- link:/perl/perl_localtime [localtime]-ローカル時間を使用してUNIX時間をレコードまたは文字列に変換します
- link:/perl/perl_lock [lock]-変数、サブルーチン、またはメソッドのスレッドロックを取得します
- link:/perl/perl_log [log]-数値の自然対数を取得します
- link:/perl/perl_lstat [lstat]-シンボリックリンクのstat
- link:/perl/perl_m [m]-文字列を正規表現パターンに一致させます
- link:/perl/perl_map [map]-リストに変更を適用して、変更を含む新しいリストを取得します
- link:/perl/perl_mkdir [mkdir]-ディレクトリを作成します
- link:/perl/perl_msgctl [msgctl]-SysV IPCメッセージ制御操作
- link:/perl/perl_msgget [msgget]-SysV IPCメッセージキューを取得します
- link:/perl/perl_msgrcv [msgrcv]-メッセージキューからSysV IPCメッセージを受信します
- link:/perl/perl_msgsnd [msgsnd]-SysV IPCメッセージをメッセージキューに送信します
- link:/perl/perl_my [my]-ローカル変数を宣言して割り当てる(字句スコープ)
- link:/perl/perl_next [next]-途中でブロックを繰り返す
- link:/perl/perl_no [no]-一部のモジュールシンボルまたはセマンティクスをコンパイル時にインポート解除します
- link:/perl/perl_oct [oct]-文字列を8進数に変換します
- link:/perl/perl_open [open]-ファイル、パイプ、または記述子を開く
- link:/perl/perl_opendir [opendir]-ディレクトリを開く
- link:/perl/perl_ord [ord]-文字の数値表現を見つける
- link:/perl/perl_our [our]-パッケージ変数を宣言して割り当てる(字句スコープ)
- link:/perl/perl_pack [pack]-リストをバイナリ表現に変換します
- link:/perl/perl_package [package]-個別のグローバル名前空間を宣言します
- link:/perl/perl_pipe [pipe]-接続されたファイルハンドルのペアを開きます
- link:/perl/perl_pop [pop]-配列から最後の要素を削除して返します
- link:/perl/perl_pos [pos]-最後/次のm//g検索のオフセットを検索または設定します
- link:/perl/perl_print [print]-ファイルハンドルにリストを出力します
- link:/perl/perl_printf [printf]-フォーマットされたリストをファイルハンドルに出力します
- link:/perl/perl_prototype [prototype]-サブルーチンのプロトタイプ(もしあれば)を取得します
- link:/perl/perl_push [push]-1つ以上の要素を配列に追加します
- link:/perl/perl_q [q]-文字列を一重引用符で囲みます
- link:/perl/perl_qq [qq]-文字列を二重引用符で囲みます
- link:/perl/perl_qr [qr]-コンパイルパターン
- link:/perl/perl_quotemeta [quotemeta]-正規表現の魔法の文字を引用する
- link:/perl/perl_qw [qw]-単語のリストを引用
- link:/perl/perl_qx [qx]-文字列を引用符で囲みます
- link:/perl/perl_rand [rand]-次の疑似乱数を取得します
- link:/perl/perl_read [read]-ファイルハンドルからの固定長のバッファリングされた入力
- link:/perl/perl_readdir [readdir]-ディレクトリハンドルからディレクトリを取得します
- link:/perl/perl_readline [readline]-ファイルからレコードを取得します
- link:/perl/perl_readlink [readlink]-シンボリックリンクが指している場所を特定する
- link:/perl/perl_readpipe [readpipe]-システムコマンドを実行し、標準出力を収集します
- link:/perl/perl_recv [recv]-ソケットを介してメッセージを受信します
- link:/perl/perl_redo [redo]-このループの繰り返しをもう一度開始します
- link:/perl/perl_ref [ref]-参照されているもののタイプを見つける
- link:/perl/perl_rename [rename]-ファイル名を変更します
- link:/perl/perl_require [require]-実行時にライブラリから外部関数をロードします
- link:/perl/perl_reset [reset]-指定された名前のすべての変数をクリアします
- link:/perl/perl_return [return]-早く関数から抜け出す
- link:/perl/perl_reverse [reverse]-文字列またはリストを反転します
- link:/perl/perl_rewinddir [rewinddir]-ディレクトリハンドルをリセットします
- link:/perl/perl_rindex [rindex]-右から左への部分文字列検索
- link:/perl/perl_rmdir [rmdir]-ディレクトリを削除します
- link:/perl/perl_s [s]-パターンを文字列に置き換えます
- link:/perl/perl_scalar [scalar]-スカラーコンテキストを強制します
- link:/perl/perl_seek [seek]-ランダムアクセスI/Oのファイルポインターの位置を変更します
- link:/perl/perl_seekdir [seekdir]-ディレクトリポインターの位置を変更します
- link:/perl/perl_select [select]-デフォルトの出力をリセットするか、I/O多重化を行います
- link:/perl/perl_semctl [semctl]-SysVセマフォ制御操作
- link:/perl/perl_semget [semget]-SysVセマフォのセットを取得します
- link:/perl/perl_semop [semop]-SysVセマフォ操作
- link:/perl/perl_send [send]-ソケットを介してメッセージを送信します
- link:/perl/perl_setgrent [setgrent]-使用するグループファイルを準備します
- link:/perl/perl_sethostent [sethostent]-ホストファイルを使用するための準備
- link:/perl/perl_setnetent [setnetent]-ネットワークファイルを使用するための準備
- link:/perl/perl_setpgrp [setpgrp]-プロセスのプロセスグループを設定します
- link:/perl/perl_setpriority [setpriority]-プロセスのnice値を設定します
- link:/perl/perl_setprotoent [setprotoent]-使用するプロトコルファイルを準備します
- link:/perl/perl_setpwent [setpwent]-使用するpasswdファイルを準備します
- link:/perl/perl_setservent [setservent]-使用するサービスファイルを準備します
- link:/perl/perl_setsockopt [setsockopt]-いくつかのソケットオプションを設定します
- link:/perl/perl_shift [shift]-配列の最初の要素を削除し、それを返します
- link:/perl/perl_shmctl [shmctl]-SysV共有メモリ操作
- link:/perl/perl_shmget [shmget]-SysV共有メモリセグメント識別子を取得します
- link:/perl/perl_shmread [shmread]-SysV共有メモリを読み取ります
- link:/perl/perl_shmwrite [shmwrite]-SysV共有メモリに書き込みます
- link:/perl/perl_shutdown [shutdown]-ソケット接続の半分だけを閉じます
- link:/perl/perl_sin [sin]-数値のサインを返します
- link:/perl/perl_sleep [sleep]-数秒間ブロックします
- link:/perl/perl_socket [socket]-ソケットを作成します
- link:/perl/perl_socketpair [socketpair]-ソケットのペアを作成します
- link:/perl/perl_sort [sort]-値のリストをソートします
- link:/perl/perl_splice [splice]-配列の任意の場所に要素を追加または削除します
- link:/perl/perl_split [split]-正規表現区切り文字を使用して文字列を分割します
- link:/perl/perl_sprintf [sprintf]-文字列にフォーマットされた出力
- link:/perl/perl_sqrt [sqrt]-平方根関数
- link:/perl/perl_srand [srand]-乱数ジェネレータをシードします
- link:/perl/perl_stat [stat]-ファイルのステータス情報を取得します
- link:/perl/perl_study [study]-検索を繰り返すために入力データを最適化します
- link:/perl/perl_sub [sub]-おそらく匿名でサブルーチンを宣言します
- link:/perl/perl_substr [substr]-攪拌の一部を取得または変更します
- link:/perl/perl_symlink [symlink]-ファイルへのシンボリックリンクを作成します
- link:/perl/perl_syscall [syscall]-任意のシステムコールを実行します
- link:/perl/perl_sysopen [sysopen]-ファイル、パイプ、または記述子を開く
- link:/perl/perl_sysread [sysread]-ファイルハンドルからの固定長のバッファリングされていない入力
- link:/perl/perl_sysseek [sysseek]-sysreadおよびsyswriteで使用されるハンドルにI/Oポインターを配置します
- link:/perl/perl_system [system]-別のプログラムを実行します
- link:/perl/perl_syswrite [syswrite]-ファイルハンドルへの固定長のバッファリングされていない出力
- link:/perl/perl_tell [tell]-ファイルハンドルの現在のシークポインターを取得します
- link:/perl/perl_telldir [telldir]-ディレクトリハンドルの現在のシークポインタを取得します
- link:/perl/perl_tie [tie]-変数をオブジェクトクラスにバインドします
- link:/perl/perl_tied [tied]-結合された変数の基礎となるオブジェクトへの参照を取得します
- link:/perl/perl_time [time]-1970年からの秒数を返します
- link:/perl/perl_times [times]-自己プロセスと子プロセスの経過時間を返します
- link:/perl/perl_tr [tr]-文字列を音訳する
- link:/perl/perl_truncate [truncate]-ファイルを短くします
- link:/perl/perl_uc [uc]-文字列の大文字バージョンを返します
- link:/perl/perl_ucfirst [ucfirst]-次の文字だけを大文字にした文字列を返します
- link:/perl/perl_umask [umask]-ファイル作成モードマスクを設定します
- link:/perl/perl_undef [undef]-変数または関数の定義を削除します
- link:/perl/perl_unlink [unlink]-ファイルへの1つのリンクを削除します
- link:/perl/perl_unpack [unpack]-バイナリ構造を通常のperl変数に変換します
- link:/perl/perl_unshift [unshift]-リストの先頭に要素を追加します
- link:/perl/perl_untie [untie]-変数へのタイバインディングを解除します
- link:/perl/perl_use [use]-コンパイル時にモジュールにロードします
- link:/perl/perl_utime [utime]-ファイルの最終アクセスを設定し、時間を変更します
- link:/perl/perl_values [values]-ハッシュの値のリストを返します
- link:/perl/perl_vec [vec]-文字列の特定のビットをテストまたは設定します
- link:/perl/perl_wait [wait]-子プロセスが終了するのを待ちます
- link:/perl/perl_waitpid [waitpid]-特定の子プロセスが終了するのを待ちます
- link:/perl/perl_wantarray [wantarray]-現在のサブルーチン呼び出しのvoid vsスカラーvsリストコンテキストを取得
- link:/perl/perl_warn [warn]-デバッグ情報を出力します
- link:/perl/perl_write [write]-画像レコードを印刷します
- リンク:/perl/perl_-X [-X]-ファイルテスト(-r、-xなど)
- link:/perl/perl_y [y]-文字列を音訳する