気の向くままに辿るIT/ICT/IoT
Perl

Perl 代入 substitution

ホーム前へ次へ
Perlの代入とは?

Perl 代入/substitution

代入とは

 代入(substitution)は


「定数」を「変数」に代入
「変数」を「変数」に代入

等、演算子や言語で予め用意された関数を使用して変数などに格納する事です。


例)

変数A=3;
変数B=変数A;

Perl substitution

 UNIX/Linuxコマンドにおけるsed(stream editorの略)やsedコマンドも取り入れているPerlにおいては substitutionは「代入」というより「置換」と訳されます。(Perlの置換については、Perl 正規表現/Perl パターンマッチ参照)

Perlの変数への代入

 Perlの変数にはスカラー変数($)、数値キー型配列変数(@)、文字列キー型配列変数(%)があります。

 代入演算子を利用する場合、スカラー変数($)、数値キー型配列変数(@)、文字列キー型配列変数(%)は、例えば下記のように代入することができます(変数と変数値の参照方法)。

スカラー変数($)への代入

$val=1;

$val=ABC;

$val="あいう";

 スカラー変数($)ではそのまま代入演算子を利用して代入することができます。

文字列キー型配列変数(%)への代入

$hash{123}=1;

$hash{alpha}=ABC;

$hash{'文字'}="あいう";

 文字列キー型配列変数(%)では { } という波括弧とキーとなる文字列を添え字、先頭を $ として$array{alpha}のように要素を参照し、代入演算子 = で代入することができます。

%hash=(

        "123"=>"1",

        "alpha"=>"ABC",

        "文字"=>"あいう"

);

 更に文字列キー型配列変数(%)では => を使って単一またはまとめて代入することもできます。

数値キー型配列変数(@)への代入

$array[0]=1;

$array[1]=ABC;

$array[2]="あいう";

 数値キー型配列変数(@)では [ ] というブラケットとキーとなる数字を添え字、先頭を $ として$array[0]のように要素を参照し、代入することができます。

@array=(1,ABC,"あいう");

 また、カッコでくくり、カンマで区切られた右辺の値をまとめて代入することもできます。

文字列キー型配列変数(%)と数値キー型配列変数(@)

 数値キー型配列変数にまとめて代入する場合には、右辺のカンマで区切られた順に$array[0]、$array[1]、$array[2]...に代入され、この順は保証されます。

 他方、文字列キー型配列変数(%)は文字をキーとして参照することはできますが、その配列内の順は保証されていません。

 つまり、文字列キー型配列変数(%)で要素を参照する場合にたとえ複数回試して一定順に並んでいるように見える場合でも、それは偶然であるとされています。

 このようにその要素の順番が保証されている数値キー型配列変数では上記の代入演算子による代入とは別に配列の先頭または末尾に要素を追加・削除することができる配列操作関数unshift/shift、push/popがあります。

シングルクォーテーションとダブルクォーテーション

 シングルまたはダブルクォーテーションは、シングルまたはダブルクォートと呼ばれることもあります。

 文字列キー型配列変数(%)の実際の値となる右辺は、シングルまたはダブルクォーテーションで括る必要があり、スクリプト内で変数で格納する場合には、(変数に代入する前の値か、または変数そのものを)ダブルクォーテーションで括ります(シングルクォーテーションでは変数が展開されません)

 他方、キー値($hash{123}等)は、半角数字や半角アルファベットの場合、必ずしもシングルまたはダブルクォーテーションがなくてもよいのですが、日本語のような多バイト文字の場合は、シングルクォーテーションまたはダブルクォーテーションで括る必要があります。

 尚、スカラー変数($)、数値キー型配列変数(@)でも代入する値については、同様です。

 このことから、特に理由がない限り、スカラー変数($)に代入する値、文字列キー型配列変数(%)の左辺、右辺、また数値キー型配列変数(@)の代入する値は、ダブルクォーテーションで括っておくとよいでしょう。

 逆に変数を展開したくない($abc等変数をそのまま利用したい)というケースなどにはシングルクォーテーションを利用します。

ホーム前へ次へ