[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[plamo:17971] Re: perl



From: Yasutaka SUMI <sum@mwb.biglobe.ne.jp>
Subject: [plamo:17965] Re: perl
Date: Mon, 03 Mar 2003 13:37:21 +0900 (JST)
Message-ID: <20030303.133721.730817152.sum@mwb.biglobe.ne.jp>

> 
 
> > > my $number="210";
> > > my $address="city";
> > > 
> > > にしましょう。
> > > 
> > 
> > これは、書いてみましたが、効果はありませんでした。別の意味なのでしょ
> > うか。
> 
> 正確にはどう説明すればいいのかは分からないんですが、全くの別物です。
> 私は「local はグローバル」って覚えていますが、local をほとんど使わなく
> なってしまいました。最近使った記憶では、関数の中で関数を定義して再帰呼
> び出しした時かなぁ。
>

「local はグローバル」と言うのは衝撃的な表現です。最近まで
「関数の中で local と書いて置けば、関数外への影響を避けられる。」
と言う利用方法で用いていました。また、my を使いだしてからも使用方
法によって、local で書かないとエラーになります。
(できる限り my にはしています)

感想として「スコープ」を理解していないようです。

> > 
> > > 
> > >     my $keyword = {
> > >         phone   => {pointer=> \$number, proc=>1,} ,
> > >         addr   => {pointer=> \$address, proc=>1,} ,
> > >     };
> > > 
> > 
> > この書き方は
> >          phone   => {pointer=> *number, proc=>1,} ,
> > とどのように違うのでしょう。
> 
> このとき、前者は $number へのリファレンスなのに対して、
> 後者は $keyword->{phone}->{pointer} に *main::number が入ります。
> これは $main::number なのか &main::number なのかの区別がないんですね。

この区別がないと言うのは、値が入っているのかリファレンス(これはc
のポインタと理解しています)か利用時に判別出来ないと言うことですね。

> 
> 今回の問題は、スコープの異なる local 変数間で型グロブによってシンボル
> を受け渡ししたのが原因なんでしょう。(これが正確な表現なのかは不明です ^^;)
>

らくだ本4頁から「形容詞 local と my」云々と、またじっくり読んでみ
ます。
 
> 
> Cのポインタ like な使い方であれば、リファレンス渡し
> $var1 = \$var2;
> です。
>
判りました。
 
> > perl で迷うのは、殆ど同じのように見えるのに
> >  $abc{"aaa"}{"xyz"}="aaa";
> > と
> >  $abc={
> >      aaa => { xyz=> "aaa",},
> >  };
> > が違うのです。
> > この違いを「らくだ」からは読めませんでした。
> 
> この違いを味わうとすれば・・・
   略
> こんな感じでしょうか。
>
実行してみました。

-- 早間  yossi@yedo.src.co.jp

Follow-Ups
[plamo:17972] Re: perl, Tetsuya Ohnishi
[plamo:17974] Re: perl, Yasutaka SUMI
References
[plamo:17956] Re: perl, Yasutaka SUMI
[plamo:17958] Re: perl, 早間義博
[plamo:17965] Re: perl, Yasutaka SUMI

[検索ページ] [メール一覧]
Plamo ML 公開システム