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

[plamo:17955] Re: perl



角です。ちょっと寝ようとしたんですが気になって・・・

From: Yasutaka SUMI <sum@mwb.biglobe.ne.jp>
> じゃなくて、早間さんの望む挙動としてはこっちなのかも・・・
> 
>     my $keyword = {
>         phone   => {pointer=> \$number, proc=>1,} ,
>         addr   => {pointer=> \$address, proc=>1,} ,
>     };

早間さんのコーディングでは(なぜか?)シンボルテーブルから $number が
削除されてしまいますね。local 変数 "pointer" の型グロブに代入した瞬間
消えるようです。

>    my $keyword = {
>        phone   => *number,
>        addr   =>  *address,
>    };
>    *pointer=$keyword->{phone};
>なら問題なしです。

そうですか? 手元の perl-5.8.0 と perl-5.6.1 で試してみましたが、
やっぱり $number が消えます。こんな挙動初めて知った・・・。

これだと問題なしでしょう。
----------------------------------------------------------------------
#!/usr/bin/perl -w

use strict;
use vars qw($pointer);

my $number="210";
my $address="city";

print "Before : <$number:$address>\n";
& SetValue ();
print "After  : <$number:$address>\n";

sub SetValue {
    local ($pointer);
    my $keyword = {
        phone   => {pointer=> \$number, proc=>1,} ,
        addr   => {pointer=> \$address, proc=>1,} ,
    };
    *pointer=$keyword->{phone}->{pointer};
    print "phone:$pointer\n";
    *pointer=$keyword->{addr}->{pointer};
    print "addr:$pointer\n";
}
----------------------------------------------------------------------
#型グロブは、あんまり使わない方がいいと思いますよ。

-----
Yasutaka SUMI <sum@mwb.biglobe.ne.jp>
http://pgp.nic.ad.jp:11371/pks/lookup?op=get&search=0x8842F549
Key fingerprint = 5F6D 79E1 E52D 2B38 B9B5  13F5 F8E9 F3E1 8842 F549

Follow-Ups
[plamo:17956] Re: perl, Yasutaka SUMI
References
[plamo:17949] Re: perl, Yasutaka SUMI
[plamo:17950] Re: perl, Yasutaka SUMI
[plamo:17952] Re: perl, Yasutaka SUMI

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