Perl チュートリアル: 変数、配列、ハッシュとプログラミング例

Perlとは何ですか?

パール は、高水準で汎用的な、解釈型の動的プログラミング言語です。Perl は「Practical Extraction and Reporting Language」の略語ですが、Perl の頭字語はありません。1987 年に Larry Wall によって導入されました。Perl 言語は、テキスト編集用に特別に設計されました。しかし、現在では、Linux システム管理、ネットワーク プログラミング、Web 開発など、さまざまな目的で広く使用されています。

プログラミング言語の概要

簡単に言ってみましょう。 コンピューターは 0 と 1 (バイナリ言語/機械語/[低水準言語]) だけを理解しますが、私たち人間にとってバイナリ言語でプログラムすることは非常に困難です。 Perl は、一般的な英語で使用される単語である自然言語要素を使用するプログラミング言語であるため、人間にとって理解しやすいです [高水準言語]。 ここで問題が発生しました。 コンピューターは、私たち人間が簡単に理解できる高級言語を理解できません。 そのためには、高級言語を低級言語に翻訳できるものが必要です。 ここで通訳が助けてくれます。 インタプリタは、高級言語で書かれたプログラムを低級言語に変換し、コンピュータがプログラムに書かれた命令を理解して実行できるようにするソフトウェアです。 したがって、Perl は、 解釈されたプログラミング言語.

Perl はどこで使用されますか?

Perl スクリプト言語のパワーは、多くの分野で活用できます。Perl の最も一般的な用途は Web 開発です。また、Perl は Web サーバーやその他の管理ジョブの多くのタスクを自動化するためにも使用され、電子メールを自動的に生成したり、システムをクリーンアップしたりできます。Perl は、データの抽出やレポートの生成といった本来の目的に今でも使用されています。リソースの使用状況に関するレポートを作成したり、ネットワークのセキュリティ問題をチェックしたりできます。このため、Perl は Web 開発、ネットワーキング、バイオインフォマティクスでも使用される人気の言語となっています。このほかにも、Perl は CGI プログラミングにも使用できます。

Perl は、画像の作成と操作にも利用できます。そのほかにも、telnet、FTP などによるネットワーク、グラフィカル ユーザー インターフェイスの作成、VLSI エレクトロニクス、スパム行為を減らすためのメール フィルターの作成などが、Perl の使用例の一部です。

PerlはOOP(オブジェクト指向プログラミング)の実装でも知られており、継承(単純、多重、ダイヤモンド)、ポリモーフィズム、カプセル化などあらゆる形式をサポートしています。Perlは手続き型とOOPの実践を同時にサポートできるほど柔軟です。Perlには、OOPで書かれたコードを書いたり使用/再利用したりできる追加モジュールもあります。 Python、PHP、PDL、TCL、オクターブ、 Java、C、 C++、Basic、Ruby、LuaをPerlスクリプトに組み込むことができます。つまり、Perlとこれらの追加機能を組み合わせることができます。 プログラミング言語 むしろ既存のコードを書き直す必要があります。

Perl プログラミング言語の応用

Perl プログラミング言語の応用

Perl を使用する理由

確かに、上で述べたことすべてを行うために使用できるプログラミング言語は他にもあります。では、なぜ特に Perl を使用する必要があるのでしょうか? Perl は学ぶのがとても簡単です、特にコンピュータープログラミングの背景がある場合はそうです。 Perl は、コンピュータによる処理を容易にするというよりも、人間が書きやすく理解しやすいように設計されています。 正規表現を使用します。 この言語の自然なスタイルは、特定の文法や構文を使用する他のプログラミング言語とは異なります。 したがって、Perl は非常に柔軟であり、解決策や問題を考えるための特定の方法を強制しません。 Perl は非常に移植性が高いです。 Perlインタープリタがインストールされているオペレーティングシステムであれば、どのプラットフォームでも実行できるので、プラットフォームに依存しません。 Operating SystemsにはPerlがインストールされているので、LinuxでPerlコーディングをすぐに始めることができます。これは、Linuxディストリビューションの種類によってコードが変わるシェルスクリプトとは異なり、移植性はどんどん低下します。 Perl での小さな特定のタスクが非常に簡単かつ迅速になります。 この初心者向けの Perl チュートリアルを通じて、特定のタスク用の小さくて速いプログラムをコーディングする方法を学びます。 UNIX をルーツとするプログラミング言語の学習を始めるために使用される、古典的な Hello World プログラムの簡単な例を見てみましょう。

例: Perl hello world

Perl の簡単な例

#!/usr/bin/perl
print "Hello, world!";

出力:

こんにちは、世界!

上記の2行のコードはHello, world!と表示されます。これはとてもシンプルで簡単ではないでしょうか? C言語の知識がある学生は、 C++ これらの言語で同じ出力を得るには、さらに多くのコード行が必要になることがわかります。

なぜだろうと思うかもしれません Perl は Web 上で非常に有名です。 Web 上で起こることのほとんどは TEXT であり、Perl はテキスト処理に非常に優れているため、これは単純です。 Perl を他の言語と比較すると、Perl はファイル処理、テキスト処理、出力レポートに優れた最良の言語になります。

Perl の最大の利点の XNUMX つは次のとおりです。 自由に使用する

Perl コミュニティは、ソフトウェアは自由に利用可能で、自由に変更でき、自由に配布できるべきだと強く信じています。Perl コミュニティのボランティア数名が、プログラミング言語を可能な限り優れたものにするために尽力しています。

Perl の長所と短所

長所: 短所:

Perlの利点

Perlの欠点

  • 他のプログラミング言語と比較すると、Perl はテキスト処理と解析において最も強力です。
  • これは、Perl スクリプトをコンパイルする必要がないため、実行時間が速いインタープリタ型言語です。
  • シンプルでプログラムも理解しやすい。
  • オブジェクト指向です。
  • CPAN ライブラリは Perl 開発を容易にします (これについては後で詳しく説明します)。
  • 主に支払いゲートウェイの Web 開発で使用されます。
  • オートメーションで使用され、ネットワークとストレージ関連のほとんどをテストするために使用されます。
  • 他のプログラミング言語と比較して、最小限の GUI サポートしかありません。
  • 理解するのがそれほど簡単ではない複雑なライブラリ モジュールを参照する必要があります (やり方がわかれば、すべて簡単になるので、怖がらないでください)。
  • 複雑なパターンを理解するには経験が必要です。

始めましょう

Perl の歴史と、Perl でのコーディングに必要なコンピュータ プログラミングの基本概念について十分な知識を得たので、いよいよ Perl を使い始めるときです。次の章では、システムに Perl をセットアップし、Perl でのコーディングの旅に備える方法を説明します。この Perl スクリプト チュートリアルでは、学生が Perl でのコーディングに使用する OS として Linux を取り上げます。

Perl をダウンロードしてインストールします – Windows、Mac および Linux

パールを入手するにはどうすればよいですか?

良いニュース あなたはおそらくそれを持っています!

ただし、システム上で見つからない場合でも、無料で入手できます。

Perl がすでにインストールされているかどうかを確認するには、コマンド ラインに移動して「perl -v」と入力します。

Perlのダウンロード方法

このコマンドは、Perl がインストールされている場合は、そのバージョンを表示します。 この場合、バージョンは v5.14.2 です。 でも、そうでなくても…パニックにならないでください…

Unixの初心者向け PERL チュートリアル - 完全ガイド 既にインストール済み Perl がプリインストールされていますが、最新バージョンに更新する必要がある場合があります。
Mac OSの 初心者向け PERL チュートリアル - 完全ガイド 既にインストール済み OSX には Perl がプリインストールされていますが、最新バージョンに更新する必要がある場合があります。
Windows初心者向け PERL チュートリアル - 完全ガイド インストールする必要があります XNUMX つのオプションが利用可能

  1. Strawberry Perl は、Perl のオープンソース バイナリ ディストリビューションです。 Windows OS。これには、CPAN から直接 XS CPAN モジュールをインストールする機能を提供するコンパイラーとプリインストールされたモジュールが含まれています
  2. ActiveState perl は、Perl のバイナリ ディストリビューション (多くのプラットフォーム用) と、独自の Perl パッケージ マネージャー (PPM) を提供します。

Linux での Perl の更新:

Perl バージョンを更新する必要がある場合は、コマンドを XNUMX 行入力するだけです。

sudo apt-get インストール Perl

そしてリラックス。 残りは担当させていただきます。 アクティブなインターネット接続があることを確認してください。

Linux で PERL を更新する

Linux で PERL を更新する

Perl をインストールする Windows:

まず、ここからActive Perlをダウンロードします 。 ActivePerl をインストールするには、次の手順に従ってください。 Windows システム。同じものについては、以下のスクリーンショットを参照してください。

ステップ1: インストーラーをダウンロードしてインストールを開始すると、以下のウィンドウが表示されますので、「次へ」をクリックして続行します。

Perlをインストールする方法 Windows

ステップ2: ライセンス契約に同意して、インストールを続行します。

Perlをインストールする方法 Windows

ステップ3: 以下はインストールされるさまざまなパッケージです。 デフォルトでは、すべてが選択されます。 唯一異なるのは PPM (Perl パッケージ マネージャー) です。 これは、システムに外部 Perl モジュールまたはライブラリをインストールするために Active Perl によって提供されるユーティリティです。 「次へ」をクリックして続行します。

Perl をインストールする Windows

ステップ4: これらは、Perl に使用できるさまざまなタイプの Perl 拡張機能です。 Perl では主に .Pl、.Plx、.Pm を使用します。 Perl モジュールは基本的に、ライブラリ ファイルを参照するファイル拡張子として .Pm を使用します。 すべてのオプションを選択し、「次へ」ボタンをクリックします。

Perl をインストールする Windows

ステップ5: 「インストール」ボタンをクリックしてインストールを進めます。

Perl をインストールする Windows

ステップ6: インストールしたら、「Perl –v」コマンドを実行して、Perl がシステムに正常にインストールされているかどうかを確認します。

PERL のインストール Windows

Linux と Linux の両方で Perl 環境を設定するには、議論する必要があることがたくさんあります。 Windowsこのインストールには多くのライブラリ ファイルが含まれないためです。これらを手動でインストールする必要があります。 CPAN(総合 Perl) を使用して手動でインストールできます。 Archive Network) または Perl Windows でのみ機能する PPM のいずれかです。ただし、これらのファイルは Perl でのコーディングを開始するために必須ではありません。

このWindowsの設定以外に、 Windows Windows 上の Linux サブシステムの 10 の新機能と、それを使用して Perl コードを実行する

最初の Perl プログラム

Hello world!

Perl の例: Hello World

#!/usr/bin/perl -w
#this is just a comment…
print "Hello World";

このテキストが理解できなくても心配しないでください。 もうすぐすべてが明らかになるでしょう。 さあ、行ごとに見てみましょう。

#!/usr/bin/perl		

これは、 Opera/usr/bin/perl にあるプログラムでこのファイルを実行するシステム。一部の IDE ではこの行は必要ありません。必須の場合は、インタープリターへのパスをここに記述する必要があります。覚えて!この特別な行はプログラムの先頭にあり、#! で始まる必要があります。警告を使用します。これは、インタープリタに警告を表示するように指示する別の特別なコマンドです。つまり、警告をグローバルにアクティブにする -w です。

print "Hello World";		

印刷命令はテキストを画面に書き込みます。 行末のセミコロンは、命令が終了したことを Perl インタプリタに伝えます。 Perl コードのすべての命令の最後にはセミコロンを置く必要があります。 引用符 (") に注意してください。 印刷指導に必要です。 上記のスクリプトを firstprog.pl として保存します。

Windowsの場合

Strawberry がインストールされている場合は、「実行」をクリックするだけです。 コマンドライン インターフェイスを実行して、コンソールに次のように記述することもできます。

C:\> perl path\firstprog.pl		

または、perl.exe がパスにない場合は、次のようにします。

C:\> c:\perl\bin\perl.exe firstprog.pl		

Linux/Unix の場合

ターミナルを開いて次のように書くだけです。

perl firstprog.pl		

プログラムを実行できない場合は、実行する資格があることを確認してください。 ターミナルに次のように入力します。

chmod +x firstprog.pl		

これでプログラムが実行可能になり、実行する準備が整いました。 実行するには、次のように書きます。

./firstprog		

cpanマイナスモジュールをインストールする

モジュールは、複数のプログラムで共通の操作を実行するタスクを実行するために使用されるコードのセットです。Perl モジュールを使用すると、同じ操作を実行するためにコードを書き直す必要はありません。Perl は、このような外部コード ライブラリを利用できます。最適なライブラリの 1 つは CPAN です。これは、Comprehensive Perl の略です。 Archive Network には、使用できる Perl モジュールが大量に含まれています。これは、そのようなモジュールを提供する多数の開発者のコ​​ミュニティまたはネットワークです。Perl モジュールに CPAN モジュールのサポートをインストールすることで、CPAN モジュールを利用して作業を容易にすることができます。ほとんどの Perl モジュールは Perl で書かれていますが、一部は XS (C で書かれています) を使用しているため、C コンパイラが必要です (この設定は簡単です。慌てる必要はありません)。モジュールは他のモジュール (ほとんどの場合 CPAN にあります) に依存している場合があり、それらなしでは (または特定のバージョンのモジュールなしでは) インストールできません。以下のオプションのドキュメントをよく読む価値があります。CPAN の多くのモジュールでは、最新バージョンの Perl (バージョン 5.8 以上) が必要です。他のモジュールのインストールを容易にするために、CPAN からモジュールを取得、解凍、ビルド、インストールするスクリプトである cpanminus をインストールします (後で感謝することになるでしょう)。インストールするには アプリパンマイナス Perl モジュールの場合は、コマンドラインに次のように入力します。

cpan App::cpanminus

cpan App::cpanminus Perl モジュールのダウンロードとインストール中にインターネットに接続していることを確認してください。

cpanマイナスモジュールのインストール

次に、任意のモジュールをインストールします。

cpan –i <Module_Name>.		

File::Data(ファイルデータにアクセスするためのインターフェースです)モジュールをインストールする例を見てみましょう。

cpanマイナスモジュールのインストール

Perl変数

次に、変数について説明します。 変数は、XNUMX つ以上の値を保持するコンテナのようなものだと想像できます。 一度定義すると、変数の名前は変わりませんが、値は何度も変更されます。

変数には 3 種類あります。

Perl の変数の型

Perl の変数の種類

最も簡単なものはスカラーです。これが今日の主題です

スカラー変数

このタイプの変数は単一の値を保持します。

その名前はドル記号と Perl 識別子 (変数の名前) で始まります。

Perlのスカラー変数

Perlのスカラー変数

命名規則

他のプログラミング言語に精通している場合は、変数の名前付けに関して特定のルールがあることをご存知でしょう。 同様に、Perl にはスカラーの命名規則が XNUMX つあります。

  1. すべてのスカラー名は $ で始まります。 すべての名前の前に $ を付けることを覚えておくと簡単です。 これを $scalar として考えてください。
  2. PHPみたいに。 最初の文字 $ の後には、Perl では特殊な英数字、つまり a ~ z、A ~ Z、0 ~ 9 が許可されます。 アンダースコア文字も使用できます。 変数名を XNUMX つの単語に分割するには、アンダースコアを使用します。 「ただし、最初の文字を数字にすることはできません」
  3. 数字は名前の一部になることができますが、$の直後に来ることはできません。つまり、$の後の最初の文字はアルファベットかアンダースコアになります。C/から来る文字はC++ 背景はすぐに類似点を認識できるはずです。例

Perlの例:

$var;
$Var32;
$vaRRR43;
$name_underscore_23;

ただし、これらは正当なスカラー変数名ではありません。

mohohoh                                              # $ character is missing 
$                                                    # must be at least one letter 
$47x                                           # second character must be a letter
$variable!                                 # you can't have a ! in a variable name

一般的な規則によれば、Perl が何かを XNUMX つだけ持っている場合、それはスカラーです。 スカラーはデバイスから読み取ることができ、それをプログラムに使用できます。

XNUMX 種類のスカラー データ型

  1. Numbers

Numbers:

このタイプのスカラー データでは、次のように指定できます。

  • 整数は単純に2、0、534のような整数です
  • 浮動小数点数、つまり3.14、6.74、0.333のような実数です

Perl の数値変数

注意: 一般的に、Perlインタープリタは整数を浮動小数点数のように見ます。たとえば、プログラムに2と書いた場合、Perlはそれを2.0000のように見ます。

整数リテラル:

XNUMX つ以上の数字で構成され、オプションでその前にプラスまたはマイナスが付けられ、アンダースコアが含まれます。

Perl の例:

0;
-2542;
4865415484645          #this also can be written with underscores (for clarity) : 4_865_415_484_645

ご覧のとおり、特別なことは何もありません。 しかし信じてください、これは最も一般的なタイプのスカラーです。 彼らはどこにでもいます。

浮動小数点リテラル:

これは、数字、オプションでマイナス、小数点、指数で構成されます。

Perl の例:

3.14;
255.000;
3.6e20;                                  # it's 3.6 times 10 to the 20th
-3.6e20;                                 # same as above, but negative
-3.6e-20;                                #it's negative 3.6 times 10 to the -20th
-3.6E-20;                                #we also can use E – this means the same the lowercase version -3.6e-20

Perl の浮動小数点リテラル

XNUMX 進数、XNUMX 進数、および XNUMX 進数表現:

これは XNUMX 進法に代わるものです。 XNUMX 進数、XNUMX 進数、XNUMX 進数の表現を示しましょう。 この奇妙なスタイルに関するすべての重要な情報を短い表に示します。

表現 ベース(Base) 続行
オクタル 8 0(ゼロ)
16進数 16 0x
バイナリ 2 0b

Perl の例:

255;                               # 255 in decimal notation
0377;                                   # 255 in octal notation
0xff;                                   # 255 in hexadecimal notation
0b11111111;                             # 255 in binary notation

Perl のこれらの値はすべて同じ意味です。 Perl は値を同じ形式で保存しません。 これらの XNUMX 進数、XNUMX 進数、XNUMX 進数を内部で XNUMX 進数に変換します。

代入はスカラーに対する最も一般的な操作であり、非常に簡単です。Perl では等号を使用します。式の右側から値を取得し、この値を変数に格納します。

例を見てみましょう:

$size=15;             # give $size value of 15
$y = -7.78;           # give $y value of -7.78

さらに、変数には数値だけでなく式も入れることができます。

$z = 6 + 12               # give $z value of 18

文字列: これも非常に単純なタイプのスカラーです。

Perl の文字列の最大長は、コンピュータが搭載するメモリの量によって異なります。 文字列のサイズに制限はなく、任意の数の文字、記号、または単語で文字列を構成できます。 最も短い文字列には文字が含まれません。 最長のものはシステム メモリのすべてを埋める可能性があります。 Perl プログラムはすべて 7 ビット ASCII 文字セットで作成できます。 Perl では、8 ビットまたは 16 ビットの文字セット別名を追加することもできます。 文字列リテラル内の非 ASCII 文字。 Perl では、Unicode UTF-8 のサポートも追加されました。

Perl の文字列の種類

数値と同様に、文字列にも 2 つの異なる種類があります。

  • 一重引用符の文字列リテラル
  • Double 文字列リテラルを引用符で囲みます

一重引用符で囲まれた文字列リテラル

一重引用符は、文字通りに受け取りたいデータを囲むために使用されます。 短い例ですべてが明らかになるはずです。

Perl の例:

#!/usr/bin/perl 
$num = 7;
$txt = 'it is $num';
print $txt;

出力:

それは $num です

ここでは、$num の一重引用符の値が取得されず、リテラル文字 '$'、'n'、'u'、'm' が $txt の値に追加されるためです。

Double-引用符で囲まれた文字列リテラル

Double 引用符は、処理前に補間する必要があるデータを囲むために使用されます。つまり、エスケープされた文字と変数は、単に後の操作にそのまま挿入されるのではなく、その場で評価されます。エスケープ文字は、改行やタブなどを挿入するために使用できます。

Perl の例:

$num = 7; 
$txt = "it is $num"; 
print $txt;

出力:

7です

ここでは二重引用符により、$numの値が$txtの値に追加されます。

Double-quotes はスカラー変数と配列変数を挿入しますが、ハッシュは挿入しません。一方、二重引用符を使用すると、配列とハッシュの両方のスライスを挿入できます。

不思議な\n

次のプログラムを考えてみましょう

Perl の例:

print "hello \n";

出力:

こんにちは

Perl は「hello\n」だけを表示するのではなく、「hello」だけを表示します。 なぜ? 「\n」は特別な記号であり、プログラム内でテキストを表示しているときに新しい行に移動することを意味するためです。 「こんにちは\n 新しい行」を出力します。 次の質問は、他に特別な兆候はありますか? はい、そうです! でも、心配しないでください。ほんの少しだけです。 以下の表を確認してください

構築する 説明
\n 改行
\r return
\t タブ
\f フォームフィード
\b バックスペース
\a ベル
\e 脱出
\ 007 任意の 007 進 ASCII 値 (ここでは、XNUMX = ベル)
\x7f 任意の 7 進値 (ここでは XNUMXf = 削除)
\\ バックスラッシュ
\」 二重引用符
\l 次の文字を小文字にする
\L \E までのすべての文字を小文字にする
\u 次の文字を大文字にする
\U \E までのすべての文字を大文字にする
\E \L、\Uを終了

「ほんの少しだけ」というわけではないことはわかっています…でも信じてください、知っておくべきことはほんのわずかだけです

文字列変数

これは数値の代入で見られるのと同じ操作です。Perl は等号の右側から文字列を取得し、この文字列を変数に格納します。

Perl の例:

$string = 'tutorial';                                      # give $string the eight-character string 'tutorial'
print $string;
$string = $size + 3 ;                                           # give $string the current value of $size plus 3
print $string;
$string = $ string * 5;                                         # multiplied $string by 5
print $string;

出力:

チュートリアル315

ご覧のとおり、数値と文字列を同じ変数に入れることができます。変数のクラスはありません。

文字列の連結(ピリオド):

連結演算子「.」は、2 つ以上の文字列を結合します。覚えておいてください。文字列に引用符、復帰改行、バックスラッシュが含まれている場合、これらの特殊文字はすべてバックスラッシュでエスケープする必要があります。

Perl ' ' 変数 例:

#!/usr/bin/perl
$a = "Tom is";
$b = "favorite cat";
$c = $a ." mother's ". $b;
print $c;

出力:

トムは母のお気に入りの猫です

文字列

「$a」、「$b」は「.」演算子を使用して連結され、「$c」に格納されます。

最終的には…

間の変換 Numbers および文字列:

ご存知のとおり、Perl は必要に応じて数値と文字列を自動的に変換します。Perl は、現在何が必要かをどのように認識するのでしょうか。これは簡単です。すべては演算子によって決まります (演算子については後で説明しますが、今は、数値と文字列で異なる演算子がたくさんあることを受け入れてください)。演算子が数値を期待する場合、Perl は値を数値として使用します。演算子が文字列を期待する場合、Perl は値を文字列として使用します。言い換えると、この種の変換について心配する必要はありません。短い例ですべてが明らかになります。

Perl の例:

$string = "43";
$number = 28;
$result = $string + $number;
print $result;

出力:

71

$string の値は整数に変換され、$number の値に追加されます。

加算結果 71 は $result に代入されます。

変数のスコープ – アクセス修飾子

プログラム内のどこでもスカラーを宣言できます。 ただし、アクセス修飾子を指定する必要があります

修飾子には3種類あります

  1. my
  2. ローカル
  3. 私たちの

My: これを使用すると、ブロック内で固有の変数を宣言できます。 つまり中括弧内です。

#!/usr/bin/perl 
my $var=5;
if(1)
{ 
my $var_2 =$var;
}
print $var_2;

出力なし

プログラムの出力は何もありません。

初心者向け PERL チュートリアル - 完全ガイド

上の例では、2 つの変数が宣言されており、XNUMX つは if ブロックの内側 ($var_XNUMX)、もう XNUMX つは If ブロックの外側 ($var) にあることがわかります。 ブロックの外側で宣言された変数は if ブロックにアクセスできますが、if ブロックの内側で宣言された変数は外側のプログラムからはアクセスできません。

ローカル: これを使用すると、変数の元の値を実際に変更することなく、実際に同じ変数値を異なる値にマスクできます。値が 5 に割り当てられた変数 $a があるとします。実際にその変数の値を次のように変更できます。変数の元の値 5 を変更せずに、local キーワードを使用して同じ変数を再宣言します。これがどのように機能するかを例で見てみましょう。

#!/usr/bin/perl
$var = 5;
{
local $var = 3;
print "local,\$var = $var \n";
}
print "global,\$var = $var \n";

上記プログラムの出力はこのようになります。

ローカル、$var = 3

グローバル、$var = 5

こうすることで、元の値に影響を与えることなく変数の値を変更できます。

Our: 変数がアクセス修飾子「our」で宣言されると、パッケージ全体で使用できます。 スコープ our で宣言された変数を持つ Perl モジュールまたはパッケージ test.pm があるとします。 この変数は、そのパッケージを使用する任意のスクリプトでアクセスできます。

Perl でのプログラミングに真剣に取り組んでいる場合は、以下からプログラムを開始する必要があります。

#!/ usr / local / bin / perl

厳格な使用;

これは、より適切でクリーンなコードを書くのに役立ちます。 「use strict」は、my キーワードを使用して変数を宣言する strict プラグマをオンにします。

これは良いプログラミングの練習です

#!/usr/local/bin/perl
use strict;
$var = 10;
print "$var";

結果: エラー

#!/usr/local/bin/perl
use strict;
my $var = 10;
print "$var";

出力:

10

Perl 配列

Perl配列とは何ですか?

配列は、リスト形式でデータを格納する特別なタイプの変数です。各要素には、各要素ごとに一意となるインデックス番号を使用してアクセスできます。配列には、数値、文字列、浮動小数点値などを格納することができます。これはすばらしいですね。では、Perl で配列を作成するにはどうすればよいでしょうか。Perl では、'@' 文字の後に名前を付けて配列を定義できます。Perl で配列を定義する方法を考えてみましょう。

私の@配列;

これが Perl で配列を定義する方法です。 データをどのように保存する必要があるのか​​考えているかもしれません。 配列にデータを格納するにはさまざまな方法があります。 これは使用方法によって異なります。

my @array=(a,b,c,d);
print @array;

出力:

ABCD

これは 4 つの要素を含む配列です。

配列インデックスは 0 から始まり、宣言された最大サイズまで終わります。この場合、最大インデックス サイズは 3 です。

Perl 配列の例

Perl 配列の例

上記の方法で配列を宣言することもできます。 唯一の違いは、空白を区切り文字として考慮してデータを配列に格納することです。 ここで、qw() は引用語を意味します。 この関数の重要性は、単語のリストを生成することです。 qw を複数の方法で使用して配列を宣言できます。

@array1=qw/a b c d/;
@array2= qw' p q r s'; 
@array3=qw { v x y z};
print @array1;
print @array2;
print @array3;

出力:

abcdpqrsvxyz

5 に値を割り当てたいとします。th 配列の要素、どうやってやるのでしょう。

$array [4] ='e';

シーケンシャル配列

シーケンシャル配列は、データを順番に格納する配列です。1~10 の数字またはアルファベットの a~z を配列に格納するとします。すべての文字を入力する代わりに、次のようなものを試すことができます。

@numbers= (1..10);
print @numbers;                   #Prints numbers from 1 to 10;

出力:

12345678910

Perl 配列サイズ

すでに利用可能な配列がありますが、その配列のサイズがわからない場合、それを見つける可能な方法は何でしょうか。

@array= qw/a b c d e/;
print $size=scalar (@array);

関数を使わずに配列のサイズを取得することはできますか? はい、できます。

@array= qw/a b c d e/;
print $size=scalar (@array);
print "\n";
print $size=$#array + 1;                           # $#array will print the Max Index of the array, which is 5 in this case

出力:

5

5

ダイナミックアレイ

配列を宣言する上記のメソッドは次のように呼ばれます。 静的配列、配列のサイズがわかります。

ダイナミックアレイとは何ですか?

動的配列は、値を指定せずに宣言する配列です。 では、その配列に値を格納するのは一体いつなのでしょうか? 単純に、実行時にそれらを保存します。 そのための簡単なプログラムを次に示します。

このタスクを実行するには、いくつかの組み込み Perl 関数を使用します。

my $string="This is a kind of dynamic array";
my @array;
@array=split('a',$string);
foreach(@array)
{
print "$_ \n”;
# This is a special variable which stores the current value.
}

出力:

これは

一種のダイ

マイク

rr

y

Split 関数は、指定された区切り文字に基づいて、文字列の内容を配列に分割します。 この関数は文字列から区切り文字も削除します。この場合は「a」です。

Perl 配列の push、pop、shift、unshift:

これらの関数を Perl で使用して、配列要素に追加または削除できます。

  • Perl プッシュ: 既存の配列の末尾に配列要素を追加します。
  • Perl Pop: 配列から最後の要素を削除します。
  • パール Shift: 配列から最初の要素を削除します。
  • Perl Unshift: 配列の先頭に要素を追加します。

Perlの配列関数

以下の関数を使用できる例を見てみましょう。

@days = ("Mon","Tue","Wed");
print "1st : @days\n";
push(@days, "Thu");                                             # adds one element at the end of an array
print "2nd when push : @days\n";
unshift(@days, "Fri");                                          # adds one element at the beginning of an array
print "3rd when unshift : @days\n";
pop(@days);
print "4th when pop : @days\n";                                 # remove one element from the last of an array.
shift(@days);                                                   # remove one element from the beginning of an array.
print "5th when shift : @days\n";

出力:

1日:月火水

2日押しの場合:月火水木

シフトなしの場合3日目:金月火水木

4日ポップ時:金月火水

5日シフト:月火水

Perl ハッシュ

なぜハッシュが必要なのでしょうか?

スカラーと配列については前のセクションですでに学習しました。

スカラーは具体的に何をするのでしょうか? 整数と文字列のみを保存します。

配列は具体的に何をするのでしょうか? これはスカラーのコレクションであり、インデックスを使用して配列の各要素にアクセスします。 しかし、何百、何千ものレコードがある場合に配列を使用するのは良い考えでしょうか? どのインデックスにどのような値があるか忘れてしまいます。 この状況を克服するために、Perl ハッシュのようなものがあります。

ハッシュとは何ですか?

ハッシュは、配列が保持できるのと同じ数のスカラーを保持することもできます。 唯一の違いは、インデックスがなく、キーと値があることです。 ハッシュは、% で始まり、その後にハッシュの名前が続く形で宣言できます。 Perl ハッシュを定義する方法と、これを配列と区別する方法の例を見てみましょう。

XNUMX 人の人の例を考えてみましょう。彼らの年齢は配列で表されます。

@array=('Sainath',23,'Krishna',24,'Shruthi',25);        #This is how an array looks.
print @array;

出力:

サイナス33Krishna24シュルティ25

この方法では、すべての人々の名前と年齢の両方のインデックス位置を記憶する必要があるため、個人の年齢を知ることは困難です。 名前が3つあるときは簡単かもしれませんが、1000以上になるとどうでしょうか? あなたは答えを知っています。

Perl のハッシュ

これはハッシュを使用することで克服できます。

ハッシュの例:

print %hash=( 'Sainath' => 23, 'Krishna' => 24, 'Shruthi' => 25); # This is how we create a hash.
print %hash=('Sainath',23,'Krishna',24,'Shruthi',25);# This way of assigning is called list.

出力:

サイナス33Krishna24シュルティ25サイナス33Krishna24シュルティ25

これでハッシュを宣言できました。素晴らしいです!! しかし、どうやってアクセスしたり印刷したりできるのでしょうか? ハッシュ内の各要素には、値が割り当てられる関連キーを使用してアクセスする必要があります。 したがって、ハッシュ内の各キーと値の間には XNUMX 対 XNUMX のマッピングが存在します。

任意の人の年齢を印刷するには、その人の名前を覚えておくだけで済みます。

print $hash{'Krishna'};          # This how we should access a hash. Key enclosed within {}.

なぜ $hash{KeyName} を使用したのか疑問に思われたかもしれませんが、やはりハッシュはスカラーのコレクションであることを思い出してください。 したがって、スカラーを表す $ を使用して各ハッシュ要素にアクセスできます。

Perl でのハッシュの例

注: ハッシュ内の各キーは一意である必要があります。そうしないと、以前に割り当てられた値がオーバーライドされます。

ハッシュを別のハッシュに割り当てるにはどうすればよいでしょうか? シンプルで、私たちが行ったのと同じ方法で、

ハッシュ全体を出力することもできます。

%hash=( 'Tom' => 23);
%newHash=%hash; # Assigning hash to a new hashprint %newHash; 
print %newHash;

出力:

Tom23

Perl ハッシュの追加

ご覧のとおり、ハッシュ %newHash はすでにありますが、そこにさらにエントリを追加する必要があります。

$newHash{'Jim'}=25;
$newHash{'John'}=26;
$newHash{'Harry'}=27;
print %newHash;

出力:

ジム25ジョン26ハリー27

Perl の削除キー

ハッシュからエントリを削除したい場合があります。 これがそれを実現する方法です。

delete $newHash{'Jim'};#This will delete an entry from the hash.

削除は Perl の組み込み関数です。 ここでは、配列にハッシュを割り当てる例を見ていきます。

@array=%newHash;
print "@array";

注: ハッシュを出力するとき、またはハッシュを配列に保存するときは常に。 順序は常に異なる場合があります。 いつも同じではありません。

配列に割り当てることができるのは、ハッシュのキーまたは値のみです。

@arraykeys= keys(%newHash);
@arrayvalues=values(%newHash);
print "@arraykeys\n";
print "@arrayvalues\n";    # \n to print new line.		

ハッシュ内のすべてのエントリを削除するには、ハッシュを null に直接割り当てます。

%newHash=();# これにより、エントリなしでハッシュが再定義されます。

Perl の条件文

Perl では条件文を使用できます。 では、条件文とは何でしょうか? 条件ステートメントは、コード内で満たされるいくつかの状況を実際にチェックするステートメントです。

例を考えてみましょう。あなたは果物を買っているのですが、値段が 100 ドルを超えるのは嫌だとします。 したがって、ここでのルールは100ドルです。

Perl は XNUMX 種類の条件文をサポートしています。 それは「ある場合」と「そうでない場合」です。

Perl の場合

条件が true の場合にコード ブロックが実行されるかどうか。

Perl の条件文

my $a=5;
if($a==5)
{
   print "The value is $a";
}

出力:

5

Perl If Else

これは良さそうです。 $a が 5 ではない状況を考えてみましょう。

my $a=10;
if($a==5)
{
    print "The values is $a ---PASS";
}
else
{
    print "The value is $a ---FAIL";
}

出力:

値は 10 —FAIL です。

このようにして、一度に XNUMX つの条件のみを制御できます。 それは制限ですか? いいえ、if… elsif … else を使用してさまざまな条件を制御することもできます。

Perl Else If

my $a=5;
if($a==6)
{
    print "Executed If block -- The value is $a";
}
elsif($a==5)
{
    print "Executed elsif block --The value is $a";
}
else
{
    print "Executed else block – The value is $a";
}

出力:

実行された elsif ブロック - 値は 5 です

上記の場合、$a が 5 に等しいため、elsif ブロックが実行されます。

if と elsif の両方のコード ブロックが失敗する状況が発生する可能性があります。 このシナリオでは、else コード ブロックが実行されます。 含めたくない場合は、実際にはelseコードチェックを削除することができます。

Perl が入れ子になっている場合

この場合、if コード ブロックをもう XNUMX つの if コード ブロックで使用できます。

my $a=11; #Change values to 11,2,5 and observe output
if($a<10){
  print "Inside 1st if block";
        if($a<5){
                print "Inside 2nd if block --- The value is $a";
        }
        else{
                print " Inside 2nd else block --- The value is $a";
        }
	}
	else{
        	print "Inside 1st else block – The value is $a";
    }

出力:

1 番目の else ブロック内 – 値は 11

$a の値を変更して同じコードを実行します。 残りの部分を知ることができます。

Perl 以外の場合

if がどうなるかについてはすでに理解しています (条件が true の場合、コード ブロックが実行されます)。 until は if の反対で、条件が false の場合にコード ブロックが実行されます。

my $a=5;
unless($a==5)
{
   print "Inside the unless block --- The value is $a";
}
else
{
   print "Inside else block--- The value is $a";
}

出力:

1 番目の else ブロック内 – 値は 5

何が出力されるか推測してください。 あなたが正しいです!!!!!。 出力は、else ブロックの print ステートメントになります。 until コード ブロックの条件が true であるため、unless ブロックは条件が false の場合にのみ実行されることに注意してください。 $a の値を変更してコードを実行すると、違いがわかります。

if を使用する Perl

$a= " This is Perl";
if($a eq "SASSDSS"){
print "Inside If Block";
}
else
{
print "Inside else block"
}

出力:

else ブロック内

そうでない場合の使用

$a= " This is Perl";
unless($a eq "SASSDSS"){
print "Inside unless Block";
}
else
{
print "Inside else block"
}

出力:

ブロックしない限り内側

Perl ループ – 制御構造

Perl は、他のプログラミング言語と同様の制御構造をサポートします。 Perl は、for、foreach、while、until の XNUMX 種類の制御構造をサポートします。 これらのステートメントを使用して、いくつかのコードを繰り返し実行します。

For ループ Perl

コードブロックは条件が満たされるまで実行されます。 Perl で配列をループする方法の例を見てみましょう。

my @array=(1..10);
for(my $count=0;$count<10;$count++)
{
    print "The array index $count value is $array[$count]";
    print "\n";
}

出力:

配列のインデックス 0 の値は 1 です

配列のインデックス 1 の値は 2 です

配列のインデックス 2 の値は 3 です

配列のインデックス 3 の値は 4 です

配列のインデックス 4 の値は 5 です

配列のインデックス 5 の値は 6 です

配列のインデックス 6 の値は 7 です

配列のインデックス 7 の値は 8 です

配列のインデックス 8 の値は 9 です

配列のインデックス 9 の値は 10 です

ここで、for()式には多くの文が含まれています。 それぞれに意味があります。

for (初期化; 条件; インクリメント)

forの別の使い方を紹介します。

for(1..10)
{
    print "$_ n";
    print "\n";
}

出力:

1n

2n

3n

4n

5n

6n

7n

8n

9n

10n

Perl の Foreach

for each ステートメントは、for と同じ方法で使用できます。 主な違いは、これには条件チェックと増分がないことです。

foreach perl で同じ例を見てみましょう。

my @array=(1..10);
foreach my $value (@array)
{  
	print " The value is $value\n";
}

出力:

値は 1 です

値は 2 です

値は 3 です

値は 4 です

値は 5 です

値は 6 です

値は 7 です

値は 8 です

値は 9 です

値は 10 です

Foreach は配列の各要素を取得し、反復ごとにその値を $var に割り当てます。 同じために $_ を使用することもできます。

my @array=(1..10);
foreach(@array)
{
    print " The value is $_ \n"; # This is same as the above code.
}

出力:

値は 1 です

値は 2 です

値は 3 です

値は 4 です

値は 5 です

値は 6 です

値は 7 です

値は 8 です

値は 9 です

値は 10 です

これは配列にアクセスするのに適しているようです。 ハッシュについてはどうでしょうか。foreach を使用してハッシュ キーと値を取得するにはどうすればよいでしょうか?

foreach を使用すると、ループすることでハッシュのキーと値にアクセスできます。

Perlのforループ

my %hash=( 'Tom' => 23, 'Jerry' => 24, 'Mickey' => 25);
foreach my $key (keys %hash)
{
print "$key \n";
}

出力:

ミッキー

トム

ジェリー

なぜ foreach() でキーを使用したのか疑問に思われるかもしれません。 Keys は Perl の組み込み関数で、ハッシュのキーにすぐにアクセスできます。 価値観についてはどうでしょうか? ハッシュの値にアクセスするには、values 関数を使用できます。

my %hash=( 'Tom' => 23, 'Jerry' => 24, 'Mickey' => 25);
foreach my $value(values %hash) # This will push each value of the key to $value
{
	 print " the value is $value \n";
}

出力:

値は24です

値は23です

値は25です

Perl しながら

Perl While ループは制御構造であり、条件が true になるまでコード ブロックが実行されます。

コード ブロックは、条件が false の場合にのみ終了します。

Perl While ループの例を見てみましょう。

Perlのwhileループ

ここに問題があります。これはユーザーからの入力を必要とし、数字「7」が入力されるまで終了しません。

#!/usr/bin/perl
$guru99 = 0;
$luckynum = 7;
print "Guess a Number Between 1 and 10\n";
$guru99 = <STDIN>;
while ($guru99 != $luckynum)
{
	print "Guess a Number Between 1 and 10 \n ";
	$guru99 = <STDIN>;
}
print "You guessed the lucky number 7"

出力:

1 から 10 までの数字を推測してください

9

1 から 10 までの数字を推測してください

5

1 から 10 までの数字を推測してください

7

あなたはラッキーナンバー 7 を当てました

上の例では、「7」以外の入力を入力すると、while 条件は true になりません。

ここで while がどのように動作するかを見ると、コード ブロックは while の条件が true の場合にのみ実行されます。

Perl の実行中

Do while ループは、while セクションの条件が false の場合でも、少なくとも XNUMX 回実行されます。

do while を使用して同じ例を見てみましょう。

$guru99 = 10;
 do {
 print "$guru99 \n";
 $guru99--;
 } 
 while ($guru99 >= 1);
 print "Now value is less than 1";

出力:

10

9

8

7

6

5

4

3

2

1

現在の値は 1 未満です

までの Perl

until コード ブロックは、条件文の until と似ています。 ここで、コード ブロックは until ブロッ​​クの条件が false の場合にのみ実行されます。

先ほどと同じ例を見てみましょう。

ここに問題があり、ユーザーからの入力が必要で、「sai」以外の名前が指定されるまで終了しません。

print "Enter any name \n";
 my $name=<STDIN>;
 chomp($name);
 until($name ne 'sai')
 {
    print "Enter any name \n";
    $name=<STDIN>;
    chomp($name);
 }

出力:

任意の名前を入力してください

Perl が行うまで:

Do until は、条件が false である必要がある場合にのみ使用でき、少なくとも XNUMX 回は実行する必要があります。

print "Enter any name \n";
 my $name=<STDIN>;
 chomp($name);
 do
 {
     print "Enter any name \n";
     $name=<STDIN>;
    chomp($name);
 }until($name ne 'sai');

出力:

任意の名前を入力してください

任意の名前を入力してください シェルドン

任意の名前を入力してください

while、do-while、until、do-until のサンプル コードを実行して違いを確認します。

パール Operaタ

何ですか Operaトール?

Operaコンピューター言語のトルは、コンピューターが理解できる変数または値のセットに対して実行できるアクションを示します。 Perl には、ほとんどの機能が組み込まれています。 OperaPerl には、C 言語からの演算子が多数あります。他のプログラミング言語と比較して、Perl には多くの演算子があります。 Opera演算子は、算術演算子、論理演算子、関係演算子、代入演算子に分類されます。

算術 Operators:

算術演算子は、いくつかの基本的な数学演算を実行するために使用できる演算子です。これらの算術演算子は、基本的な演算を実行するために 2 つの引数を必要とする二項演算子です。他の基本的な演算には単項演算子を使用することもできます。以下の例で違いを確認できます。

Operaタ 説明

+

2つの値または変数を加算するために使用される加算演算

価値観を保持する

$x=5+6; # または

$y=6;

$z=$x+$y;

2つの値または値を保持する変数を減算するために使用される減算演算子

$x=6-5; # または

$y=6;

$z=$x-$y;

*

2つの値または値を保持する変数を乗算するために使用される乗算演算子

$x=6*5; # または

$y=6;

$z=$x*$y;

/

2つの値または値を保持する変数を割るために使用される除算演算子

$x=36/6; # または

$y=6;

$z=$x/$y;

**

指数を提供して値を取得するために使用される指数演算子。

例:22 = 4、33 = 27

$x=5**5; # または

$x=4;

$y=2;

$z=$x**$y;

%

2つの値または値を保持する変数の除算時に余りを取得するために使用される剰余演算子

$x=5%2; # または

$x=10;

$y=2;

$z=$x % $y;

++

変数の値を1増やす単項加算演算子

$x=5;

$x++;

Or

++$x;

-

変数の値を 1 減らす単項減算演算子

$x=5;

$x–; # ポストデクリメント

Or

–$x;# プレデクリメント

上記のすべての操作を完了する例。

my $x=10;
my $y=2;
my $z;
$z=$x+$y;
print ("Add of $x and $y is $z \n");
$z=$x-$y;
print ("Sub of $x and $y is $z \n");
$z=$x*$y;
print ("Mul of $x and $y is $z \n");
$z=$x/$y;
print ("Div of $x and $y is $z \n");
$z=$x**$y;
print ("Exp of $x and $y is $z \n");
$z=$x%$y;
print ("Mod of $x and $y is $z \n");

出力:

10と2を足すと12

10と2のサブは8です

10と2の積は20です

10と2の除算は5です

10と2の経験値は100

10 と 2 の剰余は 0 です

譲渡 Operators:

代入演算子は単に変数に値を割り当てるだけですが、ここで覚えておく必要があることがもう 1 つあります。代入演算子は算術演算も実行し、演算が実行された同じ変数に新しい値を割り当てます。

Operaタ 説明

+=

同じ変数に値を追加して割り当てるために使用される加算演算子

$x=4;

$x+=10;

-=

減算演算子は、同じ変数に値を減算して代入するために使用されます。

$x=4;

$x-=10;

*=

同じ変数に値を加算して代入するために使用される乗算演算子

$x=4;

$x*=10;

/=

同じ変数に値を割り算して代入するために使用される除算演算子

$x=4;

$x/=10;

** =

指数演算子は指数を取得し、その値を同じ変数に割り当てるために使用されます。

$x=4;

$x**=10;

%=

除算中にリマインダーを取得し、値を同じ変数に割り当てるために使用される剰余演算子

$x=10;

$x%=4;

上記のすべての操作を完了する例。

my $x=10;
$x+=5;
print("Add = $x\n");
$x-=5;
print("Sub= $x\n");
$x*=5;
print("Mul = $x\n");
$x/=5;
print("Div = $x\n");

出力:

加算 = 15

サブ= 10

マル = 50

ディビジョン = 10

論理的およびリレーショナル Operators:

Perl は論理演算子を使用して数値と文字列を比較します。ほとんどの場合、論理演算子は条件文で使用されます。

論理的およびリレーショナル OperaPerl のトル

論理的およびリレーショナル OperaPerl のトル

Operaタ 説明

== または等式

Opera両方の変数が等しいかどうかを確認するために使用される Tor

!=またはね

Opera両方の変数が等しくないかどうかを確認するために使用されるtor

> またはGT

Operaかどうかを確認するために使用されました。

AがBより大きい

<またはそれ

Operaかどうかを確認するために使用されました。

AはBよりも小さい

>= または、

Operaかどうかを確認するために使用されました。

A は B 以上

<=またはル

Operaかどうかを確認するために使用されました。

A は B 以下

|| またはまたは

OperaA または B が値を保持していることを確認するために使用される Tor

&&または

OperaA と B の両方が値を保持していることを確認するために使用される Tor

すべてのシナリオを説明できる例を見てみましょう。

my $x=5;
my $y=5;
if($x == $y){
print ("True -- equal $x and $y \n");
}
else{
print ("False -- not equal $x and $y\n");
}
$x=6;
$y=7;
if($x != $y){
print ("True -- not equal $x and $y\n");
}
else{
print ("False -- equal $x and $y\n");
}
if($y > $x){
print ("True -- $y greater than $x\n");
}
else{
print ("False -- $y greater than $x\n");
}
if($x < $y){
print ("True -- $x less than $y\n");
}
else{
print ("False -- $x less than $y\n");
}
if($x <= $y){
print ("True -- $x less than $y\n");
}
else{
print ("False -- $x less than $y\n");
}
if($y >= $x){
print ("True -- $y greater than $x\n");
}
else{
print ("False -- $y greater than $x\n");
}

出力:

True — 5 と 5 に等しい

True — 6 と 7 が等しくありません

True — 7 が 6 より大きい

True — 6 より小さい 7

True — 6 より小さい 7

True — 7 が 6 より大きい

論理演算子の例については、後のセクションで説明します。

Perl の特殊変数

Perl の特殊変数とは何ですか?

Perl の特殊変数は、事前に定義された意味を持つ変数です。 これらの変数は、実際の名前または句読点記号で表されます。 スカラー特殊変数、配列特殊変数、ハッシュ特殊変数など、Perl でサポートされているすべての変数に対応する特殊変数があります。 私たちが使用する特殊変数のほとんどはスカラーです。

名前付きの特殊変数を使用したい場合は、Perl モジュール「英語を使用」をロードして、その名前を使用して特殊変数を使用することを Perl インタプリタに明示的に伝える必要があります。

スカラー特殊変数

変数 説明

$_$ARG

これは、現在の値を保存するデフォルトの変数です。

$0 または $PROGRAM_NAME

Perlスクリプトのファイル名を格納します。

$/

入力レコード区切り文字。デフォルト値は改行文字である「\n」です。

$.

読み取られているファイルの現在の行番号を保持します。

$,

出力フィールド区切り文字。これは主に print() ステートメントによって使用されます。 このデフォルト値は 0 に設定されていますが、この変数の値を変更できます。

$\

出力レコード区切り文字。この変数の値は空になります。 これには任意の値を割り当てることができ、出力の印刷中に print() ステートメントによって使用されます。

$#

この変数は、数字を印刷する際の出力形式に使用されます。

$%$FORMAT_PAGE_NUMBER

読み取られたファイルの現在のページ番号を保持します。

$=$FORMAT_LINES_PER_PAGE

読み取られたファイルの現在のページ長を保持します。

$-$FORMAT_LINES_LEFT

ページから印刷するために残っている行数の値を保持します。

$~$FORMAT_NAME

形式名: 現在選択されている出力の形式を、デフォルトではファイル ハンドル名で保持します。

$^$FORMAT_TOP_NAME

ファイル ハンドラーの見出し形式の値を保持します。デフォルト値は、_TOP の後にファイル ハンドル名が続きます。

$|$OUTPUT_AUTOFLUSH

デフォルトはゼロです。これは、write() または print() のたびに出力バッファをフラッシュするために使用されます。

$$

Perl インタプリタの実行中のプロセス番号を保持します。

$?

ステータスコード : パイプとシステムコール。 実行されたコマンドの戻りステータス。

$&$マッチ

正規表現で使用され、最後に成功したパターン一致の文字列が保持されます。

$`$プレマッチ

正規表現で使用され、最後に成功したパターン一致の前にある文字列を保持します。

$'$ポストマッチ

正規表現で使用され、最後に成功したパターン一致が後に続く文字列を保持します。

$+$LAST_PAREN_MATCH

最後のパターン検索で一致した最後の括弧の文字列を保持します。

$

1 ドル、2 ドル、3 ドル…。 一致したパターンの値を順番に保持します。

$[

最初のインデックス: 配列、部分文字列。

$]

Perl のバージョン。

$」

リスト要素に使用される区切り文字。デフォルト値は空白です。

$;

多次元配列で使用される添字区切り文字

$!

数値コンテキストでは、エラー番号を出力します。 文字列コンテキストでエラーを出力します。

$@

eval() が使用されるときに使用される構文エラー情報を保持します。

$<

スクリプトを実行しているプロセスの実際の UID (ユーザー ID) を保持します。

$>

スクリプトを実行しているプロセスの実効 UID を保持します。

$(

スクリプトを実行しているプロセスの実際の G​​ID (グループ ID) を保持します。

$)

スクリプトを実行しているプロセスの実効 GID を保持します。

$^D$デバッグ

デバッグ フラグの現在の値を保持します。

$^C

-c コマンド ライン スイッチが使用されている場合、フラグの現在の値を保持します。

$^F

最大システム ファイル記述子のデフォルト値は 2 に設定されています

$^I$INPLACE_EDIT

-i コマンド ライン スイッチの値を保持します。

$^M

Perl スクリプトがメモリ不足エラーで終了した場合、特別なメモリ プールを使用できます。

$^O$OSNAME

Operaシステム情報が保存されます。 Linux システムの場合は「Linux」、Linux システムの場合は「mswin32」 Windows システム。

$^T$ベースタイム

スクリプトの実行時間 (秒単位)。

$^W$警告

-w コマンド ライン スイッチの現在の値。 警告スイッチ。

$ARGV

<> が使用されている場合は、現在のファイルの名前。

配列の特殊変数:

変数 説明

@株式会社

現在のスクリプトの実行中に Perl ライブラリ モジュールまたはスクリプトを調べることができるパスのリストを保持します。 この @INC は、ライブラリ モジュールのパスを調べるために use ステートメントと require ステートメントによって使用されます。

@ARGV

渡されたコマンドライン引数を保存します。

@_

サブルーチンにパラメータを渡すときに、サブルーチンで使用されます。

@F

これは、auto split –a (コマンド ライン スイッチが使用される) の場合に入力行が格納される配列です。

ハッシュ特殊変数:

変数 説明

%INC

ファイル名がキーになります。 値はそれらのファイルへのパスになります。 do、use、require によって使用されます。

%ENV

システム環境変数。

%SIG

Signalのハンドラー。

Perl 正規表現

正規表現とは何ですか?

Perl 正規表現は、ステートメントまたはステートメント グループ内の文字列パターンのマッチングに十分強力です。正規表現は、主にテキスト解析、パターン マッチングなどで、要件に基づいて使用されます。正規表現パターン バインディング =~ および !~ によって特別に使用される特定の演算子があります。これらはテスト演算子と代入演算子です。

正規表現 Operaトー

正規表現 OperaPerl のトル

正規表現 OperaPerl のトル

  • Perl の一致 — m//
  • Perl の代替 – s///
  • Perl 音訳 – tr///

次に進む前に、正規表現についていくつか知っておく必要があります。 Perl 正規表現構文にはメタ文字やワイルドカードなどの特定のものがあります。

チャー 意味

\

特別または引用

*

0 個以上の文字に一致

+

1 個以上の文字に一致

?

0 文字または 1 文字と一致

|

代替パターンのマッチングに使用可能

()

一致したパターンを保存するために使用されます

[]

文字のセットを渡すことができます。 特に数字とアルファベットに使用されます。

{}

試合の実行可能時間を提供するために使用されます。

^

文字列の先頭

$

文字列の終わり

\w

「_」を含む英数字の単一の文字または単語と一致するために使用されます。

\W

英数字以外のものと一致する

\s

空白と一致させるために使用されます

\S

空白以外のものと一致する

\d

数字と一致します。小数値や負の値は一致しません

\D

数字以外のものに一致します。

\t

タブスペースを一致させる

\n

改行と一致する

上記はパターンマッチング時に使用できる文字セットです。

いくつかの例を見てみましょう。

スクリプトの実行中にユーザーが何らかの入力を提供し、ユーザーが入力として何らかの名前を入力したかどうかを確認したい状況を考えてみましょう。 あなたの名前を抽出して出力するには、正規表現構文を作成する必要があります。

my $userinput="Guru99 Rocks";
if($userinput=~m/.*(Guru99).*/)
{
	print "Found Pattern";
}
else
{
	print "unable to find the pattern";
}

出力:

見つかったパターン

ここでは、正規表現を /.*(Guru99).*/.* として記述し、文字列内のすべての文字に一致します。 「。」 Perl の正規表現一致は、スペースを含む任意の文字を指します。

正規表現をどのように正確に構築できるかを見てみましょう。

「皆さんこんにちは、これは私の番号です: +91-99298373639」のような複数の単語、数字、特殊記号の文字列の例を考えてみましょう。

正規表現 : /^\w+\s\w+\s\w+\s\w+\s\w+\s\w+\:\+\d+\-\d+/i

ワードスペース ワードスペース ワードスペース ワードスペース ワードスペース ワードスペース 特殊文字 : スペース特殊文字+数字 特殊文字 –数字。

Perl の一致 Operaトー

一致演算子は、あるステートメント内または変数内の文字列を一致させるために使用されます。

my $var="Hello this is perl";
if($var=~m/perl/)
{
	print "true"; 
} 
else
{
	print "False"; 
}

出力:

true

この小さなコードは、Perl パターン マッチングが変数内の文字列を識別するため、「true」を出力します。基本的に、Perl は文字列全体で // で指定されたテキストを検索し、1 か所で見つかった場合でも「true」を返します。パターンは変数内のどこにでも配置できます。=~ を !~ に置き換えて、これら 2 つの演算子の違いを確認できます。

Perl 置換 Operaタ

この演算子は、任意の文字を検索し、null または他の文字に置き換えるために使用できます。

my $a="Hello how are you";
$a=~s/hello/cello/gi;
print $a;

出力:

チェロお元気ですか

注: この置換演算子では、以前と同じように、任意のパターン マッチング文字列を使用できます。ここでは、「gi」を使用しました。g はグローバル、i は大文字と小文字を区別しません。

Perl翻訳 Operaタ

これは置換に似ていますが、Perl 正規表現を使用せず、置換する値または単語を直接渡すことができます。

my $a="Hello how are you";
$a=~tr/hello/cello/;
print $a;

出力:

こんにちは、牛ですか?

Perl ファイル I/O

Perl は、ファイルと I/O 操作を効率的に操作できるように設計されています。Perl の主な利点は、ファイルの解析と処理にあります。Perl のファイル処理には、組み込み関数と演算子が多数使用されます。

基本的に、Perl で実行されるファイル操作は、FILEHANDLE を使用して行われます。読み取りまたは書き込み用にファイルを開くときに、この FILEHANDLE を定義する必要があります。

この Perl スクリプト チュートリアルでは、次のことを学びます。

Perl ファイルを開く

Perl で利用できる open() 関数を使用してファイルを開くことができます。

open(FILEHANDLE, "filename or complete path of the file");

ファイルを開いたところで、疑問が生じます。 読むためですか、それとも書くためですか?

Perl 読み取りファイルと Perl 書き込みファイル

Perl には、ファイルの読み取り、書き込み、または追加に使用する必要がある特定のモードがあります。

Read – open(my $fh,"<filename or complete path of the file"); 
Write – open(my $fh,">filename or complete path of the file");
Append – open(my $fh,">>filename or complete path of the file");

ファイルを読み取るためのいくつかの例:

Perlでファイルを読み取る

file.txt という名前の Perl ファイルがあり、その中に数行のテキストが含まれているとします。 このファイルを開いて印刷する必要があります。

open(FH,"<file.txt"); 
while(<FH>)    # Looping the file contents using the FH as a filehandle. 
{
	print "$_";
}
close FH;

or

open(FH,"<file.txt"); 
my @content=<FH>; # specifying the input of the array is FH.
foreach(@content)
{
	print "$_";
}
close FH;

これにより、ファイルの内容が出力画面に表示されます。

次に、データを作成して Perl ファイルに書き込むプログラムを作成します。

Perlでファイルを書き込む

open(FH,">test.txt");
my $var=<>;
print FH $var;
close FH;

これにより、実行時に提供された入力が書き込まれ、入力を含むファイル test.txt が作成されます。

上記の方法では、常に test.txt という名前のファイルの作成が試行され、そのファイルに入力が書き込まれます。 ファイルに追加するために同じことを書き込みます。

Perl でのファイル追加操作

open(FH,">>test.txt");
my $var=<>;
print FH $var;
close FH;
モード 説明

<

読む

+<

読み取りと書き込み

>

作成、書き込み、切り捨て

+>

読み取り、書き込み、作成、切り捨て

>>

書き込み、追加、作成

+>>

読み取り、書き込み、追加、作成

ここで、基本的な例を使用して、ファイルの読み取り、書き込み、追加の方法を確認する必要があります。

ファイルについての理解を深めるのに役立つ例やその他の関数をさらにいくつか見ていきます。

パールテル

このメソッドは、指定されている場合は FILEHANDLER の現在位置をバイト単位で返します。指定されていない場合は、最後の行が位置と見なされます。

open(FH, "test.pl");
while(<FH>)
{
	$a=tell FH;
	print "$a";
}

Perl シーク

Seek 関数は fseek システム コールに似ています。 このメソッドは、ファイル ポインターの開始または終了のいずれかが後に続くバイトを指定することにより、ファイル ポインターを特定の場所に配置するために使用されます。

seek FH, bytes, WHENCE;

WHENCE は、開始するファイル ポインターの位置です。 ゼロを指定すると、ファイルの先頭から設定されます。

例:input.txt に「Hello this is my world.」のようなデータがあるとします。

open FH, '+<','input.txt';
seek FH, 5, 0;    # This will start reading data after 5 bytes.
$/ = undef;
$out = <FH>;
print $out;
close FH;

出力:

これが私の世界です

Perl リンク解除

Unlink はファイルを削除するために使用されます。

unlink("filename or complete file path");

ディレクトリの処理:

複数のファイルを処理できるディレクトリを処理することもできます。

ディレクトリを開く方法を見てみましょう。 opendir メソッドと readdir メソッドを使用できます。

opendir(DIR,"C:\\Program Files\\"); #DIR is the directory handler.

while(readdir(DIR)) # loop through the output of readdir to print the directory contents.
{
   print "$_\n";
}
closedir(DIR); #used to close the directory handler.

or

opendir(DIR,"C:\\Program Files\\");
@content=readdir(DIR);
foreach(@content)
{
	print "$_\n";
}
closedir(DIR);

これにより、そのディレクトリ内の使用可能なすべてのファイルが出力されます。

Perl ファイルのテストとその意味

-r

ファイル/ディレクトリが現在のユーザー/グループによって読み取り可能かどうかを確認するには

-w

ファイル/ディレクトリが現在のユーザー/グループによって書き込み可能かどうかを確認するには

-x

ファイル/ディレクトリが現在のユーザー/グループによって実行可能かどうかを確認するには

-o

ファイル/ディレクトリが現在のユーザーによって所有されているかどうかを確認するには

-R

ファイル/ディレクトリがこの実ユーザー/グループによって読み取り可能かどうかを確認するには

-W

ファイル/ディレクトリがこの実際のユーザー/グループによって書き込み可能かどうかを確認するには

-X

ファイル/ディレクトリがこの実際のユーザー/グループによって実行可能かどうかを確認するには

-O

ファイル/ディレクトリがこの実際のユーザーによって所有されているかどうかを確認するには

-e

ファイル/ディレクトリ名が存在するかどうかを確認するには

-z

ファイルが存在し、サイズがゼロであるかどうかを確認するには (ディレクトリの場合は常に false)

-f

エントリがプレーン ファイルかどうかを確認するには

-d

エントリがディレクトリであるかどうかを確認するには

-l

Entryがシンボリックリンクかどうかを確認するには

-S

エントリがソケットかどうかを確認するには

-p

Entry が名前付きパイプ (「FIFO」) であるかどうかを確認するには

-b

エントリがブロック特殊ファイル (マウント可能なディスクなど) であるかどうかを確認するには

-c

Entry が文字型特殊ファイル (I/O デバイスなど) であるかどうかを確認するには

-u

ファイルまたはディレクトリが setuid であるかどうかを確認するには

-g

ファイルまたはディレクトリが setgid であるかどうかを確認するには

-k

ファイルまたはディレクトリにスティッキー ビットが設定されているかどうかを確認するには

-t

指定されたファイルハンドルは TTY です (isatty() システム関数と同様、このテストではファイル名をテストできません)

-T

ファイルが「テキスト」ファイルのように見えるかどうかを確認するには

-B

ファイルが「バイナリ」ファイルであるかどうかを確認するには

-M

ファイルの変更期間 (日数で測定) を確認するには

-A

ファイルのアクセス経過期間(日数で測定)を確認するには

-C

ファイルの Inode 変更経過期間 (日数単位) を確認するには

Perl サブルーチン

サブルーチンとは何ですか?

サブルーチン 他のプログラミング言語の関数と似ています。 print、chomp、chop などのいくつかの組み込み関数をすでに使用しました。Perl で独自のサブルーチンを作成できます。 これらのサブルーチンはプログラム内のどこにでも書くことができます。 サブルーチンはコードの先頭または末尾に配置することをお勧めします。

PERL のサブルーチン

サブルーチンの例

sub subroutine_name 
{
	Statements…;    # this is how typical subroutines look like.
}

サブルーチンの書き方はわかったので、それにどうやってアクセスするのでしょうか?

「&」記号を先頭に付けたサブルーチン名を使用して、サブルーチンにアクセスまたは呼び出す必要があります。

sub display
{
	print "this is a subroutine";
}
display();    # This is how we call a subroutine

Perl パラメータと Perl 引数の受け渡し

サブルーチンまたは perl 関数は、再利用可能なコードを配置するために作成されます。 再利用可能なコードのほとんどは、サブルーチンにパラメータを渡す必要があります。 ここでは、サブルーチンに引数を渡す方法を学びます。

sub display
{		
	my $var=@_; # @_ is a special variable which stores the list of arguments passed.		
	print "$var is the value passed";		
}		
display(2,3,4);    #this is how we need to pass the arguments.

出力:

3 は渡される値です

@_ は、サブルーチンに渡される引数を格納する特別な配列変数です。

パール Shift

また、一度に0つのパラメータを変数または$_[1]、$_[XNUMX]…(@_配列の個々の要素)にシフトする「shift」キーワードを使用することもできます。

sub display
{		
my $var=shift;		
print "$var is passed";		
}		
display("hello");

出力:

こんにちはが渡されました

サブルーチンは通常、オブジェクト指向プログラミングで使用され、さらに再利用可能なコードを配置する場所でも使用されます。

サブルーチンの主な機能は、何らかのタスクを実行し、再利用可能なコードの結果を返すことです。

初心者向け PERL チュートリアル - 完全ガイド

return キーワードを使用してサブルーチンから値を返すことができます。

sub add
{
my $a=shift;
my $b=shift;
return($a+$b);
}
my $result=add(5,6);
print $result;

出力:

11

$result には、$a と $b を加算した値が保持されます。

ハッシュと配列をサブルーチンに直接渡すこともできます。

sub hash
{
my %hash=@_;
print %hash;
}
%value= ( 1=>'a', 2=>'b');
&hash(%value);

出力:

1a2b

ハッシュまたは配列を返すこともできます。

sub hashArray
{
my %hash=@_;
print "Inside Sub-routine";
print %hash;
return(%hash);
}
%hash=(1=>'a', 2=>'b');
my(@ret)=hashArray(%hash);
print "After Sub-routine call";
print @ret;

出力:

サブルーチン2b1a内 サブルーチン呼び出し後2b1a

Perl形式

Perl にはレポートを生成するためのメカニズムがあります。この機能を使用すると、出力画面またはファイルに印刷しながら、希望どおりのレポートを作成できます。Perl で使用できる printf または sprintf 関数を使用して、簡単な形式を記述できます。

printf "%05d\n", 30;

これには、数字 30 の前に先行ゼロが含まれ、合計桁数は 5 になります。同じことが sprintf でも使用できます。

sprintf "%05d\n", 30; # This will print the same as printf.

printf と sprintf を使用すると、ほとんどの Perl 形式を取得できます。レポートの場合は実装が難しくなります。

Perl形式

レポートの例:

========================================= ================
名前 住所 年齢 電話番号
========================================= ================
Krishna チェンナイ 24 929309242
シュルティ チェンナイ 24 929309232

上記は、Perl で同じ方法で印刷する必要があるレポートの例です。これは、perl printf と perl sprintf を使用して実現できます。format を使用して効果的に実装できます。

フォーマットは以下の方法で宣言できます。

format FORMATNAME=FORMATLIST.

ここでは、特定のメソッド write を使用して、データを出力画面またはファイルに出力します。

シンボル 説明

@

フィールドホルダーの開始を表すために使用されます

>

テキストの右揃え

<

テキストの左揃え

|

中央揃え

#

# が複数指定されている場合は数値。 # が XNUMX つ指定されている場合はコメントとみなされます

.

小数点

^

フィールドの開始ホルダーは複数行やワードラップにも使用できます

~

変数が空の場合は行も空にする必要があります

@*

複数行。

($name,$addr,$age,$phone)=("krishna","chennai","24","929309242"); 
write;
($name,$addr,$age,$phone)=("shruthi","chennai","24","929309232"); 
write; 
format STDOUT_TOP= 
=============================================================== 
NAME ADDRESS AGE PHONE 
===============================================================
 . 
format STDOUT= 
@<<<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<< @<<< @<<<<<<<<<< 
$name, $addr, $age, $phone 
.

コードを実行して出力を確認します。

@ 記号を使用してフィールド ホルダーまたは文字列の開始を指定し、各文字「<」を使用します。

STDOUT を使用して標準出力に出力します。 これを、ファイルにデータを書き込むために使用するファイル ハンドラーに変更できます。

open(REPORT,">test.txt"); 
($name,$addr,$age,$phone)=("krishna","chennai","24","929309232"); 
write REPORT; 
($name,$addr,$age,$phone)=("shruthi","chennai","24","929309232"); 
write REPORT; 
format REPORT_TOP= 
=============================================================== 
NAME ADDRESS AGE PHONE 
===============================================================
 . 
format REPORT= 
@<<<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<< @<<< @<<<<<<<<<< 
$name, $addr, $age, $phone

「<」を「>」または「|」に置き換えることができます。 テキストの配置を変更します。STDOUT_TOP は、フォーマットのヘッダーを設計するために使用されます。FH_TOP (FH はファイル ハンドラー) を使用して、ファイル ハンドラーでも同じことを使用できます。これにより、作業中のファイルにフォーマットが出力されます。の上。

Perl コーディング標準

各プログラマは、特定の標準を使用してコードを記述する独自の感覚を持っています。 これらの標準は、他のプログラマがコードを理解して適切にサポートできるほどよく知られている必要があります。

Perl のコーディング標準

Perl のコーディング標準

コードの記述は単純で簡単です。問題は、後の段階で保守が必要になったときに発生します。コード記述中は、適切なガイドラインとコーディング標準に従う必要があります。Perl は、プログラマーがコードを書くのに役立つ特定の標準も定義しています。コード記述中は、「strict」と「warnings module」をロードすることをお勧めします。これらのモジュールはそれぞれ独自の重要性を持っています。strict は、使用前に変数を宣言するように要求し、コード内に裸の単語があるかどうかを通知します。warnings module は、代わりに、Shebang で Perl インタープリターに「-w」オプションを渡すことによって使用できます。警告は出力画面に表示されます。

#!/usr/bin/perl –w

以下に標準のリストをいくつか示します。

  • 「strict」および「warnings」モジュールを使用します。
  • 使用されていない変数を削除します。
  • 変数名は他のユーザーが理解できるものでなければなりません。 例: $name、@fileData など。
  • スクリプトをコーディングする際にはドキュメントが必要です。
  • 値をハードコードせず、動的に取得するか、実行時にユーザーに入力を求めるようにしてください (ファイル パス、ファイル名)。
  • コードの再利用を最大限に高めます。 再利用可能なコードをサブルーチンに配置してみてください。
  • つまり、サブルーチンには完全な名前を付ける必要があります。
  • サブルーチンは、適切なコメントとドキュメントを使用して作成する必要があります。
  • 変数は必ず初期化してください。
  • システムコールのリターンコードを常に確認してください。 ファイルが開かれる場合と開かれない場合があります。ファイルが存在しない場合、ここにリターン コードがあるとエラー ステータスが表示されます。

    例: open(FH,

  • サブルーチンは常に値を返す必要があります。
  • 同じラインでカーリーを開きます。
  • 単行 BLOCK はカーリーで XNUMX 行に配置できます。
  • LOOPS 中にラベルを使用すると、必要なときにいつでも簡単にループから抜け出すことができます。
  • 単語の長いフレーズを変数名またはサブルーチンとして記述する場合は、アンダースコアを使用します。
  • コーディング中に単純な正規表現を使用するようにしてください。

コーディング標準の完璧な例:

#######################################################################
Program to read the file content
# Date: 22-2-2013
# Author : Guru99
########################################################################
#!/usr/bin/perl 
use strict;
use warnings; 
my $line;
open FR, "file.txt" || die("Cannot open the file $!");
while ($line=<FR>) 
{   
	print $line;
} # Looping file handler to print data

Perl エラー処理

例外とは何ですか?

例外は、プログラムの実行中に発生し、プログラムを一時停止または終了させるイベントです。

エラー処理

エラー処理は、すべてのプログラマーがプログラミング中に注意しなければならないものです。 Perl は、エラーをトラップし、それに応じて処理できるエラー処理テクニックも提供します。

Perl でのエラー処理

Perl でのエラー処理

プログラムのエラーをチェックする方法はたくさんあります。 コードを使用している関数の戻りコードを調べる必要があります。 これらの戻りコードを適切に処理できれば、ほとんどのエラー処理を実現できます。

システムコールの場合には何が返されますか?

システムコールの場合、戻りステータスは XNUMX つの特殊変数 $? に格納されます。 そして$!

$! – これにより、エラー番号またはエラー メッセージに関連付けられたエラー番号が捕捉されます。

$? – これは戻りステータス system() 関数を保持します。

Perl演算子または論理演算子の使用

システム コールの使用中にエラーを処理するには、論理和演算子を使用できます。

例:

open(FH,"<test.txt");

ファイルが存在する場合、これによりファイルが読み取りモードで開きます。

ファイルが見つからない場合はどうなりますか?

open(FH,"<test.txt") or die("File not exists $!"); # This will perl exit the program if the file not exists. 
open(FH,"<test.txt") or warn ("File not exists $!"); # This will print a warning message on STDERR

Perl の評価

Eval 関数は、致命的なエラー、コンパイル時エラー、実行時エラー、およびある時点でコードを終了させるエラーを処理できます。

Perl Eval 関数には、コードのブロックまたは式を含めることができます。 Evals は、そこに配置されたすべてのものを文字列としてみなします。

スクリプトに定義されていないサブルーチンを呼び出す状況を考えてみましょう。 この状況では、スクリプトは「未定義のサブルーチン &XYZ、このエラーは eval 関数で処理できます。」というメッセージを表示して終了します。

evals ブロックにはさまざまな用途があります。その 1 つは、実行時にオペレーティング システムに固有のモジュールをロードする場合です。

例: ゼロで除算すると致命的なエラーが発生します。 これを処理するには、コードを evals ブロックに配置します。

$a=5; 
$b=0; 
eval 
{ 
 '$result=$a/$b'; 
} 
if($@)
{
 print "$@";    # All the error codes returned by evals will get stored in $@. 
}

出力:

C:\Users\XYZ\Text.pl の 8 行目、「」付近に構文エラーがあります)

{「

コンパイル エラーのため、C:\Users\XYZ\Text.pl の実行が中止されました。

例: Perl die ステートメントを使用した eval。

sub test 
{ 
die "Dieing in sub test \n"; 
} 
eval 
{ 
test(); 
}; 
print "Caught : $@\n";

出力:

捕獲:サブテストで死亡

Perl を使ってみよう

Perl は、他のプログラミング言語のように try、catch、finally コード ブロックをサポートしません。 外部 Perl モジュールをロードすることで引き続き使用できます。

Try::Tiny を使用します。

これを使用すると、コードを try ブロックに配置し、warn ブロックでエラーをキャッチできます。

eval で使用される $@ の代わりに Try::Tiny は $_ を使用します。

# catch ハンドラーでエラーを処理する

try 
{ 
die "Die now"; 
} 
catch 
{ 
warn "caught error: $_"; # not $@ 
};

ついに使用。

my $y;
try 
{ 
 die 'foo' 
}
finally 
{ 
    $y = 'bar' 
};

try 
{ 
    die 'Die now' 
} 
catch 
{ 
    warn "Returned from die: $_" 
} 
finally 
{ 
    $y = 'gone' 
};

出力:

foo (C:\Users\XYZ\Text.pl 4 行目)

このようにして try、catch、finally を使用できます。

{ # ステートメント } を試してください

catch {# ステートメント }

最後に { # ステートメント };

Or

try 
{ 
# statement 
} 
finally 
{ 
# statement 
};

出力:

Or

try 
{ 
# statement 
} 
finally 
{ 
# statement 
} 
catch 
{ 
# statement 
};

出力:

Perlソケットプログラミング

ソケットとは何ですか?

初心者向け PERL チュートリアル - 完全ガイド

ソケットは、XNUMX 台のコンピュータがネットワーク アドレスとポートを使用してネットワーク上で対話できる媒体です。

A (サーバー) と B (クライアント) が XNUMX つのシステムで、プログラムを実行するためにソケットを使用して相互に通信する必要があるとします。

これを実装するには、A (サーバー) と B (クライアント) の両方にソケットを作成する必要があります。A は受信状態、B は送信状態になります。

A (サーバー):

ここで、サーバーは B (クライアント) からの接続を受信し、いくつかのタスクを実行して、結果を B (クライアント) に返送したいと考えています。コードを実行すると、A のオペレーティング システムはソケットを作成し、そのソケットに 1 つのポートをバインドしようとします。次に、送信者である B からの応答をリッスンします。

B(クライアント)。

ここで、クライアントは何らかの処理のために自分のシステムから A (サーバー) に何らかのプログラムを送信したいと考えています。コードを実行すると、B のオペレーティング システムは A (サーバー) と通信するためのソケットを作成しようとします。B は接続先の A の IP アドレスとポート番号を指定する必要があります。

これがうまくいけば、両方のシステムが対話して XNUMX つのポートを介して情報を交換します。 Perl はソケット プログラミングもサポートしています。

Perl には、ソケットを実装できるネイティブ API があります。 簡単にするために、ソケット プログラムを作成するために使用する CPAN モジュールが多数あります。

サーバー操作:

  • ソケットの作成
  • ソケットをアドレスとポートでバインドする
  • そのポートアドレス上のソケットをリッスンします
  • サーバーのポートとIPを使用して接続しようとするクライアント接続を受け入れます。
  • 操作を実行する

クライアント Operaション:

  • ソケットの作成
  • ポートアドレスを使用してサーバーに接続します
  • 操作を実行する

クライアントサーバー OperaPerl での処理

socket.io

これは、オブジェクト指向プログラミングに基づいたソケットプログラミング用のモジュールの XNUMX つです。 このモジュールは、ネットワークで使用される INET ネットワーク タイプをサポートしません。

IO::ソケット::INET:

このモジュールは INET ドメインをサポートし、IO::Sockets に基づいて構築されています。 IO::Sockets で使用できるすべてのメソッドは、INET モジュールに継承されます。

TCP プロトコルを使用するクライアントとサーバー:

TCP は接続指向のプロトコルです。 このプロトコルはソケットプログラミングに使用します。

先に進む前に、IO::Socket::INET モジュールのオブジェクトを作成し、ソケットを作成する方法を見てみましょう。

$socket = IO::Socket::INET->new(PeerPort => 45787, 
PeerAddr => inet_ntoa(INADDR_BROADCAST), 
Proto => udp,LocalAddr => 
'localhost',Broadcast => 1 )
or 
die "Can't create socket and bind it : $@n";

IO::Socket::INET モジュールの新しいメソッドは、サブルーチンへの入力パラメータとしてハッシュを受け入れます。 このハッシュは事前に定義されており、使用するキーに値を指定するだけです。 このハッシュで使用されるキーのリストがあります。

PeerAddr

リモートホストアドレス

ピアホスト

PeerAddr の同義語

ピアポート

リモートポートまたはサービス

ローカルアドレス

ローカルホストのバインドアドレス

ローカルホスト

LocalAddr の同義語

ローカルポート

ローカルホストのバインドポート

プロト

プロトコル名(または番号)

種類

ソケットタイプ

詳細を見る

リッスン用のキューのサイズ

アドレスの再利用

バインド前に SO_REUSEADDR を設定する

再利用

バインド前に SO_REUSEADDR を設定する

再利用ポート

バインド前に SO_REUSEPORT を設定する

放送

バインド前に SO_BROADCAST を設定する

タイムアウト

各種操作のタイムアウト値

マルチホーム

マルチホームホストのすべてのアドレスを試す

ブロッキング

接続がブロッキング モードになるかどうかを決定する

サーバー.pl

use IO::Socket; 
use strict; 
use warnings; 
my $socket = new IO::Socket::INET ( 
LocalHost => 'localhost', 
LocalPort => '45655', 
Proto => 'tcp', 
Listen => 1, 
Reuse => 1, 
); 
die "Could not create socket: $!n" unless $socket; 
print "Waiting for the client to send datan"; 
my $new_socket = $socket->accept(); 
while(<$new_socket>) { 
print $_; 
} 
close($socket);

クライアント.pl

use strict; 
use warnings; 
use IO::Socket; 
my $socket = new IO::Socket::INET ( 
PeerAddr => 'localhost', 
PeerPort => '45655', 
Proto => 'tcp', 
); 
die "Could not create socket: $!n" unless $socket; 
print $socket "Hello this is socket connection!n"; 
close($socket);

注記:

ソケット プログラミングでは、ローカル ホストで実行している場合は、最初に Server.pl を実行し、次に client.pl を別のコマンド プロンプトで個別に実行する必要があります。

Perl モジュールおよびパッケージとは何ですか

モジュールとパッケージは互いに密接に関連しており、独立しています。 パッケージ: Perl パッケージはネームスペースとしても知られており、ハッシュ、配列、スカラー、サブルーチンなど、使用されるすべての一意の変数が含まれています。 モジュール: モジュールは再利用可能なコードのコレクションであり、その中にサブルーチンを記述します。 これらのモジュールを Perl プログラムにロードして、それらのモジュールに記述されたサブルーチンを利用できます。

Perlモジュールとは何ですか?

標準モジュールは、任意のシステムへの Perl のインストール中にインストールされます。 CPAN: 包括的な Perl Archive Network – Perl モジュールのグローバル リポジトリ。弊社が作成できる独自のカスタマイズされた Perl モジュール。基本的に、モジュールはスクリプトにロードされると、そのすべてのグローバル変数とサブルーチンをエクスポートします。これらのサブルーチンは、スクリプト自体で宣言されているかのように直接呼び出すことができます。 Perl モジュールは、ファイル名に .pm 拡張子を付けて、例: Foo.pm として書き込むことができます。モジュールは、プログラムの先頭で「package Foo」を使用して作成できます。

基本的な Perl モジュール:

#!/usr/bin/perl 
package Arithmetic; 
sub add 
{ 
my $a=$_[0]; 
my $b=$_[1]; 
return ($a+$b);
} 
sub subtract 
{ 
my $a=$_[0]; 
my $b=$_[1]; 
return ($a-$b); 
} 
1;

出力なし

この Perl モジュールを使用するには、それを現在の作業ディレクトリに配置する必要があります。

コード内のどこでも、require または use を使用して Perl モジュールをロードできます。 require と use の主な違いは、実行時にロードされたモジュールを要求し、コンパイル時にロードを使用することです。

#!/usr/bin/perl
require
Arithmetic;
print Arithmetic::add(5,6);
print Arithmetic:: subtract (5,6);

上記の例では、完全修飾モジュール名を使用してサブルーチンにアクセスしています。

「use Arithmetic」を使用してパッケージにアクセスすることもできます。

エクスポーター:

このモジュールには、メソッドをインポートするデフォルトの機能があります。

#!/usr/bin/perl 
package Arithmetic; 
require Exporter; 
@ISA= qw(Exporter); # This is basically for implementing inheritance. 
@EXPORT = qw(add); 
@EXPORT_OK = qw(subtract); 
sub add 
{ 
my $a=$_[0]; 
my $b=$_[1]; 
return ($a+$b); 
} 
sub subtract 
{ 
my $a=$_[0]; 
my $b=$_[1]; 
return ($a-$b);
 } 
1;

@EXPORT 配列を使用して、デフォルトでモジュールの呼び出し元にエクスポートされる変数とサブルーチンのリストを渡すことができます。

@EXPORT_OK 配列を使用して、オンデマンドベースでエクスポートされる変数とサブルーチンのリストを渡すことができます。ユーザーはモジュールのロード時に指定する必要があります。

#!/usr/bin/perl 
use 
Arithmetic qw(subtract); 
print add(5,6); 
print subtract (5,6);

デフォルトでは、サブルーチンの追加がエクスポートされます。 モジュールのロード時に指定しない場合、Subtract メソッドはエクスポートされません。

Perl によるオブジェクト指向プログラミング

このセクションでは、Perl オブジェクト指向モジュールを作成する方法を学びます。 まず、オブジェクトが何であるかを見てみましょう。 オブジェクトは、Perl モジュール内の一部のデータにアクセス、変更、検索できるインスタンスです。 これは、既存の Perl パッケージ、変数、サブルーチンを、他のプログラミング言語を参照してクラス、オブジェクト、メソッドのように動作させることに他なりません。

クラスの作成

前のトピックでモジュールを作成する方法はすでに知っています。 クラスの目的は、メソッドと変数を保存することです。 Perl モジュールにはメソッドであるサブルーチンがあります。 これらの変数とサブルーチン オブジェクトにアクセスする必要があります。

Perl コンストラクター

Perl のコンストラクターは、参照にタグ付けされたモジュール名を持つ参照を実行して返します。 これをクラスを祝福するといいます。 Perl クラスを祝福するために特定の変数 (bless) を使用します。

#!/usr/bin/perl 
package Arithmetic; 
sub new 
{ 
my $class=shift;
my $self={}; 
bless $self, $class; 
return $self; 
} 
sub add 
{ 
my $self= shift; 
my $a=$_[0]; 
my $b=$_[1]; 
return ($a+$b); 
}
sub subtract 
{ 
my $self= shift; 
my $a=$_[0]; 
my $b=$_[1]; 
return ($a-$b); 
} 
1;

クラスのコンストラクターとして使用される新しいメソッド。このコンストラクターはオブジェクトを作成し、このコンストラクターを呼び出しているスクリプトに戻ります。

#!/usr/bin/perl
use Arithmetic;
my $obj= Arithmetic->new(); 
my $result= $obj->add(5,6); 
print "$result";
$result = $obj->subtract(6,5);
print "$result";

ここでは、オブジェクトがどのように作成されたかを理解する必要があります。 クラスのオブジェクトを作成しようとするときは、必ずクラスの完全名を使用する必要があります。 Perl クラスが lib\Math\Arithmetic.pm にあると仮定します。 また、lib ディレクトリからこの Perl クラスにアクセスしたい場合は、スクリプトを呼び出すときにクラスへの完全なパスを指定する必要があります。

lib::Math::Arithmetic を使用します。

my $obj = lib::Math::Arithmetic->new();

これが Perl でのオブジェクトの作成方法です。

@INC:

Perl スクリプトはどのようにしてライブラリ モジュールが存在する場所を認識するのでしょうか? Perl は、スクリプトの現在のディレクトリと Perl の組み込みライブラリのパスについてのみ知っています。 現在のディレクトリまたは Perl ライブラリ パスにない Perl モジュールを使用すると、スクリプトは常に失敗します。 @INC については、これは Perl モジュールを探す必要があるすべてのディレクトリ パスを保持する配列です。 このコマンドを実行して、出力がどのようになるかを確認してください。

perl –e "print @INC"

これにより、何らかの出力が得られます。これは、lib モジュールが使用できるパスです。 新しいライブラリ モジュールを使用するときは常に、Perl モジュールが利用可能な特定の場所を調べるように Perl (インタプリタ) に指示する必要があります。

push(@INC, "PATH TO YOUR MODULE");

これをコードの最初の行として作成します。 これにより、インタープリタにそのパスを調べるように指示されます。 または つかいます

lib Arithmetic; # List here is your Perl Module location

Perl デストラクター

オブジェクトのデストラクターは、デフォルトでは、スクリプトが終了する前に最後に呼び出されます。 これは、オブジェクトをメモリから破棄するために使用されます。


PERL 対シェルスクリプト

PERL プログラミングの概要

  • Perl でのプログラミングでは、シェル スクリプトで異なるシェルを使用する場合によくある移植性の問題が発生しません。
  • Perl ではエラー処理が非常に簡単です
  • Perl は幅広いため、長くて複雑なプログラムを簡単に記述できます。これは、名前空間、モジュール、オブジェクト、継承などをサポートしない Shell とは対照的です。
  • Shell では利用可能な再利用可能なライブラリが少なくなります。 Perl の CPAN に匹敵するものはありません
  • シェルは安全性が低くなります。 外部関数を呼び出します(mv、cpなどのコマンドは使用されているシェルによって異なります)。 逆に、Perl は内部関数を使用しながら便利な作業を行います。

自動テストでの PERL の使用方法

Perl は自動化に広く使用されています。 これは世界で最高のプログラミング言語ではないかもしれませんが、特定の種類のタスクには最適です。 Perl がどこで、なぜ使用されるのかについて話し合いましょう 自動化テスト。

ストレージテスト

Perlを使用したスト​​レージテスト

ストレージとは何ですか? ファイルに保存されたデータ。

ストレージ関連があるとします。 テストケース ここでは、XNUMX つのパーティションにデータを書き込み、それを読み取り、データが正しく書き込まれていることを確認する必要があります。

これは手動で行うこともできますが、手動のテスターで同じことを 10000 回実行できるでしょうか? それは悪夢でしょう! 自動化が必要です

ストレージに関連するものを自動化するための最良のツールは Perl です。その理由は、そのファイル処理技術にあります。 正規表現 他のプログラミング言語と比較して実行時間が最小限で済む強力なファイル解析。

なぜストレージをテストする必要があるのでしょうか? 1000 秒あたり数千件のレコードが保存され、データが XNUMX つのシステムから別のシステムに継続的に流れる大規模なデータ センターについて考えてみましょう。このようなストレージ メカニズムの堅牢性をテストすることは不可欠です。

HP、Dell、 IBM また、多くのサーバー メーカーは、ストレージおよびネットワーク ドメインの機能をテストするためのインターフェイスとして Perl を使用しています。 NetApp は、ストレージに完全に取り組み、プログラミング言語として Perl を使用してテスト ケースを自動化する企業の XNUMX つです。

Perl オートメーションに興味がある場合は、ストレージとネットワーキングについて学ぶことをお勧めします。 Concepts.

サーバーとネットワークのテスト:

Perl を使用したサーバーとネットワークのテスト

Perl を使用したサーバーとネットワークのテスト

PERL は、サーバーの稼働時間とパフォーマンスの監視に広く使用されています。

100 台のホスト (サーバー) があるデータセンターを考えてみましょう。 各ホストに接続し、いくつかのコマンドをリモートで実行する必要があります。 また、システムを再起動して、オンラインに戻るかどうかを確認することもできます。

100 台すべてのホストに対してこのタスクを手動で実行するのは悪夢です。 しかし、PERL を使用するとこれを簡単に自動化できます。

PERL を使用して上記の自動化を実現するための設計手順

  1. (IP、ユーザー名、パスワード) などのホスト情報に関するファイルから入力を取得します。
  2. Net::SSH2 を使用して各システムに接続し、コマンドを実行するためのチャネルを確立します。
  3. 必要なコマンドのセットを実行します (例: ls、dir、ifconfig、ps など)。
  4. システムを再起動します。
  5. システムが起動するまで 10 分間待ちます。
  6. Net::Ping モジュールを使用してシステムに ping を実行し、ステータスを出力します。

上記のシナリオをコーディングしていきます。

接続してコマンドを実行する必要があるすべてのホストに関する完全な情報を保存する、Input.txt というファイルを考えてみましょう。

入力.txt

192.168.1.2 root パスワード

192.168.1.3 root パスワード

192.168.1.4 ルート root123

ホストチェック.pl

use Net::SSH2;
use Net::Ping;
use strict;
use warnings;
my $ping = Net::Ping->new();    # Creating object for Net::Ping
my $SSHObj = Net::SSH2->new();  #Creating object for Net::SSH2
open( FH, "Input.txt" );        # Opening file and placing content to FH
my @hosts = <FH>;
my $ip;
my @ips;
foreach (@hosts)
{
    if ( $_ =~ /(.*)\s+(\w+)\s+(.*)/ )    #Regex to get each info from file
    {
        $ip = $1;
        my $user = $2;
        my $password = $3;
        $SSHObj->connect($ip);
        print "Connecting to host -- $ip --Uname:$user --Password:$password\n";
        my $status = $SSHObj->auth_password( $user, $password );
        print "$status\n";
        die("unable to establish connection to -- $ip") unless ($status);
        my $shell = $SSHObj->channel();
        print "$_\n" while <$shell>;
        $shell->blocking(1);
        $shell->pty('tty');
        $shell->shell();
        sleep(5);
        #Executing the list of command on particular host. Can be any command
        print $shell "ls \n";
        print "$_\n" while <$shell>;
        print $shell "ps \n";
        print "$_\n" while <$shell>;
        print $shell "dir \n";
        print "$_\n" while <$shell>;
        print $shell "init 6\n";    #rebooting the system
        push( @ips, $ip );
    }
}
sleep 600;
foreach (@ips)
{
    if ( $ping->ping($_) )
    {
        print "$_ is alive.\n" if $ping->ping($_);
    }
    else
    {
        print "$_ is not still up --waiting for it to come up\n";
    }
}

ウェブテスト

Perl はストレージとネットワークのテストだけに限定されません。 PERL を使用して Web ベースのテストを実行することもできます。 WWW-機械化 に使用されるモジュールの XNUMX つです Webテスト。 基本的に、Web アプリケーションの機能をテストするためにブラウザを起動することはなく、HTML ページのソース コードを使用します。

を使用してブラウザベースのテストを実行することもできます。 Selenium IDE、RC、Web ドライバー。 Perl がサポートされているのは、 Selenium.

\n”; #this はパターン マッチが完了した後に残りの文字列を保持します。
印刷する」