LINE2021.09.08Perlの変数は他のプログラミング言語より特徴的な形をしています。変数が変数の識別子のように扱えるリファレンスもとても特徴的な機能です。他にもダイヤモンド演算子(<>)はPerlのコードであればよく見るもので使いこなすことができればとても強力な機能になります。この記事で利用しているPerlのバージョンはv5.32.1になります。コマンドラインと組み込み変数・関数編PerlのコードはPythonやRuby等の他のプログラミング言語より前提とする知識が必要に思います。変数が特徴的だったり、構文が特徴的だったり($_がよく利用されたり省略されたり)します。モジュール編Perlでは外部モジュールを利用するのにCPANを利用します。モジュールのインストールで管理者権限が必要ならばlocal::libを利用すれば、管理者権限が必要ない場所にモジュールをインストールすることもできます。参考スポンサーリンク変数Perlの変数は、数値等のデータやリファレンス(スカラー)、配列(スカラーの配列)、ハッシュ(スカラーのハッシュ)で形が変化します。#リストの最後にカンマをつけても良い※裸の単語(引用符なしの文字列)は、特定の文字列(予約語や組み込み関数)以外は、引用符があるように通常の文字列として扱われます。スカラー、配列、ハッシュの変数は変数名が同じ場合でも別々のものとして扱われます。このperlの変数のルールは変数を左辺値として利用する場合は、上記のような利用方法で問題ありませんが、右辺値として変数を利用する場合は、少しめんどうだと感じるかもしれません。変数を右辺値として扱う場合でもこのルールを適用して、単数や複数かを意識して変数を呼び出す必要があります。7また、配列やハッシュのようなリストは評価が行われるときに、基本的にスカラーに展開されます。32次元配列のようなものはリファレンスを用いて実現できます。配列のリファレンスは角括弧('[]')を用いることで利用できます。"$ref->[2][1]"'4ハッシュのリファレンスは波括弧('{}')を用いることで利用できます。"$ref->{ccc}"'3変数の解釈はどのような関数かで変化する場合があります。{}関数のプロトタイプ宣言によって、変数の解釈が変化します。{}裸の単語(barewords,ベアワード)裸の単語が利用される場合は以下の例があります。'subs'がある場合に裸の単語が許されなくなる場合があります。ハッシュのキー('$var{aaa}')やハッシュの=>での使用('%var=(aaa=>1)')は許されます。"${$hashref}{aaa}\n"'1古いPerlコードでのファイルハンドル古いPerlのコードでは(予約語のSTDINやSTDOUT等ではない)裸の単語をファイルハンドルとして用いている場合があります。これはPerlの(新しい関数が追加される等の)将来の予約語に小文字が使われる可能性があるため、大文字を使って記述されます。予約語ではない裸の単語にファイルハンドルを割り当てて利用する方法はあまり推奨された方法ではありません。"input.txt");は後者の書き方のほうが良いとされています。リファレンスとデリファレンスハッシュの値はスカラー値でなければなりません。ハッシュの値にリスト等の値を必要とする場合はリファレンスを利用することができます。この概念はPerlのオブジェクト指向プログラミングにも利用されます。デリファレンスはリファレンスで参照しているデータを実際のデータに返す操作になります。リファレンスの作成それぞれのスカラーやリスト等からのリファレンス作成は、バックスラッシュ演算子を利用することで作成できます。\*foo;匿名配列のリファレンスは角括弧を用いると作成できます。33]];匿名ハッシュのリファレンスは波括弧を用いると作成できます。'hash_value2'}匿名のサブルーチンのリファレンスも作成できます。};他にもリファレンスの作成にはオブジェクトのコンストラクタ等もあります。1'だったらvalの部分は識別子といえます。リファレンスのスカラー変数は、識別子のように利用できます。リファレンスのスカラー変数を$refとすると、例えば、$$refのようにすることで参照している値を利用できます。参照しているものを配列として扱うなら@$ref、ハッシュとして扱うなら%$refのように変数を利用するルールは適用されます。$$hashref{key1};のように利用できます。)として見ることができます。)のように見ることができ、リファレンスが識別子のようになり、また、そのリファレンスが識別子のようになり、もう一回、そのリファレンスが識別子のようになって、目的の値になるというイメージができます。リファレンスの利用(BlOCK)変数や関数の識別子は解釈を分かりやすくするために、波括弧を用いてブロック(BLOCK)にすることができます。リファレンスのスカラー変数$refを用いて、リファレンスが単純な数値等のスカラー値を指し示す場合は、${$ref}のように利用できます。Notation)配列やハッシュのリファレンスや、関数のリファレンスの呼び出しで$$refや&$refのように、先頭に2つの記号が出るような記述が頻繁に出る可能性があります。Notation)があります。1;$coderef->(1,2,3);のように記述することができます。1;のように記述できます。$array[1][1][1],"\n";のように記述できます。配列の要素は$array[0]のように指定でき、その後のリファレンスでは、括弧間の->は省略可能なため、C言語のような3次元配列のような記述ができます。$arrayref->[1][1][1],"\n";のようになります(これは1行目の一番外側の丸括弧が角括弧に代わって、配列リファレンスを作成してます)。括弧間の矢印は省略できますが、リファレンスの変数と括弧の間の矢印は省略できないため、このような記述になります。'postderef'の宣言が必要でしたが、v5.24以降では宣言が不要です。これを利用すると、リファレンスを左から右に読む形式を取ることができます。}{SCALAR}リファレンスの利用(ハードリファレンスとシンボリックリファレンス)ハードリファレンスは以下のような例になります。'refs'はシンボリックリファレンスを禁止します。$value;通常、リファレンスを利用する場合、識別子のようになるのはリファレンスになります。これに対して、シンボリックリファレンスは、リファレンスとして利用する値に文字列の定義があった場合に、その値を識別子として利用した変数を利用できます。'refs'はシンボリックリファレンスを許します。これは強力な機能ですが、ハードリファレンスを利用しようとして意図せず利用されてしまう可能性があることに注意が必要です。繰り返し演算子:perlの繰り返し演算子は、'x'を用います。文字列結合:perlの2つの文字列の結合は'.'を用います。名前付き単項演算子とリスト演算子:関数の引数に括弧を用いない場合の言い方で、引数が一つのもの(名前付き単項演算子)だったり、複数の引数を取ることができる演算子(リスト演算子)のことになります。自作関数は基本的にリスト演算子で利用することができます。関数のプロトタイプ宣言を利用すると単項演算子として利用することもできます。ダイヤモンド演算子:・<FILEHANDLE>の用法でreadline関数のようにファイルから行を読み取ることができます。スカラーコンテキストではファイルから一行ずつ読み取ります。以下のコードは等価になります。}の2行のコードは、@ARGVが空の場合はSTDINから読み込まれます。@ARGVがある場合は、そのARGVのファイルを開いて読み取っていきます。その疑似コードは以下のようになります。line}}リストコンテキストではファイルの終端まで行を読み取ります。便利ですが、簡単にメモリを消費できてしまうことに注意が必要かもしれません。bash等)のTABを押したときのファイル名が補間されたときのようなリストを返します。コマンドラインと組み込み変数・関数編PerlのコードはPythonやRuby等の他のプログラミング言語より前提とする知識が必要に思います。変数が特徴的だったり、構文が特徴的だったり($_がよく利用されたり省略されたり)します。モジュール編Perlでは外部モジュールを利用するのにCPANを利用します。モジュールのインストールで管理者権限が必要ならばlocal::libを利用すれば、管理者権限が必要ない場所にモジュールをインストールすることもできます。コメントをキャンセルメールアドレスが公開されることはありません。※サイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。上に表示された文字を入力してください。Linuxコマンド.NET.。