新・元地方の中規模印刷会社で苦悩するWebデザイナー改めWebディレクターの日記

自由な20代、窮屈な30代を経て、遂に40代になっちまったWebディレクター&パソコン講師の覚書と思う言(こと)。略称【ちほちゅう】

*

ローカル変数、プライベート変数、レキシカルスコープ変数【perl】

   

  • このエントリーをはてなブックマークに追加

1年以上前の記事です。内容が古い可能性があります。

perlのmy宣言についてさらに調べてみました。
DQNEOさん、情報ありがとうございます。

まずはこちらの記事を
my について – my と local どう違う? – futomi’s CGI Cafe

my を使って定義された変数は、レキシカルスコープ変数 と呼びます。そして、my を使って変数を宣言することをレキシカルスコープ宣言と呼びます。 

local について – my と local どう違う? – futomi’s CGI Cafe

local を使って定義された変数は、ダイナミックスコープ変数 と呼びます。そして、local を使って変数を宣言することをダイナミックスコープ宣言と呼びます。

スポンサーリンク
 

perlで変数を局所化するには「my」か「local」を使います。
my宣言された変数は「レキシカルスコープ変数」、local宣言された変数は「ダイナミックスコープ変数」になるそうです。
「レキシカルスコープ」のことを「静的スコープ」、「ダイナミックスコープ」のことを「動的スコープ」とも言います。
それぞれどこが違うかというと、「レキシカルスコープ変数」は同名の別変数として局所化された変数を用意する一方、「ダイナミックスコープ変数」はグローバル変数を上書きして局所化するといった部分が違うそうです。
したがって、「レキシカルスコープ変数」を使うとこういったおかしなことも起こるみたいです。
レキシカルスコープやらシンボルテーブルやら型グロブやら。 – Perlとかmemoとか日記とか。

use strict;
our $hoge = 'HOGE';
my $hoge = 'hoge';
print $hoge; # hoge
print ${hoge}; # hoge
print $::hoge; # HOGE
print $main::hoge; # HOGE
print $::main::hoge; # HOGE 

「#」の後に書かれているのが出力結果です。
「our」宣言(グローバル変数宣言)した後に、my宣言で「レキシカルスコープ変数」を作っています。
これが、local宣言だと全て同じ出力結果になるか、エラーが出るかだと思います。

さて、では「プライベート変数」ってのはなんでしょう?
Fieds_labo1 – perl-変数

* プライベート変数:my $var; いわゆるローカル変数。レキシカル変数。
* 一時的ローカル変数:local $var; 新しい変数は生成せず、指定された変数を退避して、終了時に元に戻す。

つまり、「レキシカル変数(レキシカルスコープ変数)」=「プライベート変数」であり、
「レキシカルスコープ変数」も「ダイナミックスコープ変数」も「ローカル変数」の一種だったようです。
うーむ。わかりにくい。。

ではなぜ、「my」でも「our」でも「「use strict」に対応させる簡単な改造方法」は動いたのかというと、
たぶん、どこのサブルーチンにも属さない一番の外側(最上位)でmy宣言したために、その配下にあるサブルーチンでも使えたのではないかと思うわけです。
my宣言とour宣言
ということは「our」でなくても「my」でも「use strict;」のすぐ下に書く分には問題ないということになりますねぇ。

今度、別のスクリプトで検証してみます。

CGI&Perlポケットリファレンス (Pocket reference)CGI&Perlポケットリファレンス (Pocket reference)
著者:藤田 郁
販売元:技術評論社
発売日:1999-03
おすすめ度:4.0
レビューを見る

 - プログラミング, 覚え書き

アドセンス広告メイン

Message

メールアドレスが公開されることはありません。

  関連記事

Windows XPで「メイリオ(Meiryo)」フォントを使おう

1年以上前の記事です。内容が古い可能性があります。つい最近まで知らなかったのだが …

カーナビの地図更新サービスの無料期間が終わりそうなので地図データをアップデートしてみた(データ更新編)

1年以上前の記事です。内容が古い可能性があります。1. ID取得編 | …

GREE(グリー)を退会する方法【スマートフォン編】#3

1年以上前の記事です。内容が古い可能性があります。#1 | #2 | #3 3回 …

「Auto Post Thumbnail 3.4.1」のアップデートに注意。自動サムネール取得ができなくなります【WordPress・プラグイン】

1年以上前の記事です。内容が古い可能性があります。なんか、最近、サムネール画像が …

no image
Windows98はパスワードを忘れても安心

1年以上前の記事です。内容が古い可能性があります。プラスに考えましょう。これ知っ …

いじめをなくすには犬を飼え。猫じゃダメです

1年以上前の記事です。内容が古い可能性があります。いじめが問題視されていますが、 …

アメブロ(アメーバブログ)にzenbackを導入する方法

1年以上前の記事です。内容が古い可能性があります。zenbackに関してはソース …

SNEP(スネップ)とは大人のNEET(ニート)のこと。SMAP(スマップ)とは関係ありません

1年以上前の記事です。内容が古い可能性があります。この1年。いや、もっと長い間テ …

no image
電子書籍の「自炊」はもともと「自吸」だった

1年以上前の記事です。内容が古い可能性があります。先日、通勤途中の車の中で聞いて …

「Ktai Style」導入でWordPressをケータイに対応、テーマは別名にした方がいい #wp

1年以上前の記事です。内容が古い可能性があります。「WordPress(ワードプ …

血液型オヤジ