[ トップ | 一覧 | 更新履歴 ]

PerlVariable

PerlCGI | PerlHash

Perl の変数

Perl5の変数について書きます。

変数の種類

$nameには、文字列、値、参照、なんでも代入できます。

    my  $val;
    $val = 'sample string';
    $val = 12;
    $val = 3.14;
    $val = \%hash;  #ハッシュへの参照
    $val = [];      #無名配列への参照

@nameの要素にもなんでも代入できます。

    my  @arr;
    $arr[0] = 'sample string';
    $arr[1] = 12;
    $arr[2] = 3.14;
    $arr[3] = \%hash;
    $arr[4] = [];

同じ配列の要素に代入するのにすべて同じ型である必要はないということです。

ハッシュはperl独特の変数です。c++(VC++), javaに同じような型があります。 ですが、それらではclassとして言語の外にあるのに対し、perlは変数の型として 言語の中にあります。 java風に言うとプリミティブ型としてあるというか。

(key,value)の対でデータを持つことができ、使い方を習得するとかなり便利です。

    my   %hash;
    $hash{tanaka} = 83;
    $hash{suzuki} = 78;

配列もハッシュも、その中の要素1つにアクセスする場合は$で実体化します。 また、同じ名前が変数、配列、ハッシュで区別されます。

    my    ($var, @var, %var);
    $var      = 1;  # $var
    $var[4]   = 2;  # @var
    $var{key} = 3;  # %var

文脈から、そのうちのどれであるか解釈してくれます。まぎらわしいので、同じスコープ の中ではやめた方がいいでしょう。

my

ex.1

    my  $a,$b;

myの修飾って','よりも優先順位高いのね。$aはローカル変数、$bはグローバル変数か 上位関数のlocal宣言されたローカル変数。この文の値は$bの評価になる。 なので、まとめてmy宣言するには、よく見かける()付きで宣言しましょ。

ex.2

   my  ($a,$b);

そしてさらに、subroutineへの引数をまとめて変数に設定するなんてときなどに配列を 右辺に持ってくると、

ex.3

   @c =(10,20);
   my  ($a,$b) = @c;

myは'='よりも優先順位が高いということか。

ex.4

   (my ($a,$b)) = @c;

が正しい気がするが気のせい?それともex.3はリストの要素をすべてmy宣言したので 戻り値はやはりリストとなり、そのリストに配列要素が先頭から設定されているという ことなのか。つまりリストを構成するためのex.4の外側の()は省略できるつーことなの?

my ()は、myの宣言範囲を指定してるわけではなく、リストの各要素をmy宣言してるという ことなのか?調べます。

ローカル変数とレキシカル変数 (呼び名と実際の挙動)

ex.5

   my      $a;
   local   $b;

myはperl5から出てきたsubroutineあるいはソースファイル内のローカル変数。 perl5ではレキシカル変数とか呼ばれているが、多くの手続き型言語で言われるローカル 変数のことです。

perlでは先にlocalで宣言する特殊なローカル変数が実装されてしまったためローカル変数 と呼ぶと混乱するためレキシカル変数と呼ばれる。が、perl以外から移ってきた人には どんな変数なんだ?と思われるところ。

localはその関数以下の関数内で使用できるローカル変数。 perl5以降はlocal宣言の方は流行らなくなったし、スコープの範囲が分かりづらいので myを使うようにしてます。


GzuGzu (WikiWikiWeb clone) ver 1.00 pre2
このページはGzuGzuで作成されました.
yaino.com