hash

hash

@m = (7, 8, 9);
%m = (
    a => "123",
    b => "456",
    c => "789"
);
print($m{"a"} + $m["b"]);

得出来的结果是 130. 但不知道怎么得来的??

这里不是打印 $m{"a"}的值么?就是124才对啊.


QUOTE:
原帖由 hr_it 于 2008-11-5 17:46 发表
@m = (7, 8, 9);
%m = (
    a => "123",
    b => "456",
    c => "789"
);
print($m{"a"} + $m["b"]);

得出来的结果是 130. 但不知道怎么得来的??

这里不是打印 $m{"a"}的值么?就是124才对啊.

123+7

$m{"a"}== $m{a} == "123"
$m["b"] == $m[0] = 7

"123"+7 == 123+7 == 130 有一个操作数是数字时转换成数字相加

$m, @m, %m这三者没什么关系。

$m[0] 取数组@m的成员0的值
$m{a} 取散列%m中键值a对应的值
$m["b"] == $m[0]

这个是怎么来的?
数组索引需要的数字,而这里给的是字符串"b"
然后字符串转数字时由于字符串里没有'1', '2'...这样的就直接转换成undef了??


QUOTE:
原帖由 hr_it 于 2008-11-5 18:28 发表
数组索引需要的数字,而这里给的是字符串"b"
然后字符串转数字时由于字符串里没有'1', '2'...这样的就直接转换成undef了??

把非数字字串转换成数字这样的不当转换会把数字当成 0;如果打开警告,会有警告,否则没有任何信息
楼上的能帮我看下这个程序吗?

my %person = {
                                "abc" => "lmn",
                    "def" => "opq",
                    "ghi" => "xyz",
             };
print "Please input name:abc def ghi\n";
chomp(my $name = <STDIN>);
print "output the address of person as follow:\n";
print $person{$name};
print "\n";
print $person{"abc"};

怎么就打印不出来结果呢?


QUOTE:
原帖由 hr_it 于 2008-11-5 20:05 发表
楼上的能帮我看下这个程序吗?

my %person = {
                                "abc" => "lmn",
                    "def" => "opq",
                    "ghi" => "xyz",
             };
print "Please input name:abc def ghi\n";
chomp(my ...

定义散列用()

[Copy to clipboard] [ - ]
CODE:
my %person =(
    "abc" => "lmn",
    "def" => "opq",
    "ghi" => "xyz",
    );
print "Please input name:abc def ghi\n";
chomp(my $name = <STDIN>);
print "output the address of person as follow:\n";
print $person{$name};
print "\n";
print $person{"abc"};



QUOTE:
原帖由 ynchnluiti 于 2008-11-5 20:15 发表

定义散列用()

这个是初始化


QUOTE:
原帖由 MMMIX 于 2008-11-6 12:12 发表

这个是初始化

对。