+ -
当前位置:首页 → 问答吧 → 数组套散列和散列套散列报错,请指教

数组套散列和散列套散列报错,请指教

时间:2010-09-27

来源:互联网

@b = (["1" => "a", "2" => "b"], ["a" => "A", "b" => "B"]);
print $b[0]{"2"},"\n";              <-- 报错

%d = ("m" => ["1" => 10, "2" => 20], "n" => ["1" => 100, "2" => 200]);
print $d{"m"}{"2"},"\n";                <-- 报错

为什么是错误的?要如何改?谢谢!

作者: 有行动才会有收获   发布时间: 2010-09-27

本帖最后由 珞水的大叔 于 2010-09-27 15:50 编辑

[]是数组的引用
例如:["1" => "a", "2" => "b"]等价于[("1","a","2","b")]
{}才是哈希的引用
改为:
  1. @b = ({"1" => "a", "2" => "b"}, {"a" => "A", "b" => "B"});
  2. %d = ("m" => {"1" => 10, "2" => 20}, "n" => {"1" => 100, "2" => 200});
复制代码

作者: 珞水的大叔   发布时间: 2010-09-27



QUOTE:
[]是数组的引用
例如:["1" => "a", "2" => "b"]等价于[("1","a","2","b")]
{}才是哈希的引用
改为:
珞水的大叔 发表于 2010-09-27 15:49



好像不对啊,还是报错

作者: 有行动才会有收获   发布时间: 2010-09-27

=>···起神奇逗号作用···

作者: wfnh   发布时间: 2010-09-27



QUOTE:
=>···起神奇逗号作用···
wfnh 发表于 2010-09-27 15:56



就是说这种写法不正确喽

那应该怎么写呢?

作者: 有行动才会有收获   发布时间: 2010-09-27

回复 有行动才会有收获


    我在2楼里面写了啊
  仔细看看

  改为:
  1. @b = ({"1" => "a", "2" => "b"}, {"a" => "A", "b" => "B"});
  2. %d = ("m" => {"1" => 10, "2" => 20}, "n" => {"1" => 100, "2" => 200});
复制代码

作者: 珞水的大叔   发布时间: 2010-09-27

本帖最后由 珞水的大叔 于 2010-09-27 16:10 编辑


QUOTE:
好像不对啊,还是报错
有行动才会有收获 发表于 2010-09-27 15:52




    我写的这个
    例如:["1" => "a", "2" => "b"]等价于[("1","a","2","b")]
    就是你原来错误写法的等价状况,它当然是错的啊……

作者: 珞水的大叔   发布时间: 2010-09-27

本帖最后由 wfnh 于 2010-09-27 16:12 编辑

回复 有行动才会有收获


    如果··你要你的print语句不变的话···可以这样定义数组:
@b = ({'1' => "a"}, {"2" => "b"}, {"a" => "A"},{"b" => "B"});

or

@b = ({'1' => "a", "2" => "b"}, {"a" => "A","b" => "B"});

作者: wfnh   发布时间: 2010-09-27



QUOTE:
回复  有行动才会有收获


    我在2楼里面写了啊
  仔细看看

  改为:
珞水的大叔 发表于 2010-09-27 16:07



我直接复制你的代码,执行正确

看来是我之前改错了

谢谢!

作者: 有行动才会有收获   发布时间: 2010-09-27

  1. my @b = ({"1" => "a", "2" => "b"}, {"a" => "A", "b" => "B"});
  2. my %d = ("m" => {"1" => 10, "2" => 20}, "n" => {"1" => 100, "2" => 200});

  3. print $b[0]{"1"},"\n";
  4. print $d{"m"}{"1"},"\n";
复制代码

作者: shaneqi   发布时间: 2010-09-27

本帖最后由 有行动才会有收获 于 2010-09-27 16:19 编辑


QUOTE:
我写的这个
    例如:["1" => "a", "2" => "b"]等价于[("1","a","2","b"]
    就是你原来错误 ...
珞水的大叔 发表于 2010-09-27 16:09



是因为中括号的原因吗?

中括号会把=>变成逗号?

作者: 有行动才会有收获   发布时间: 2010-09-27

perl的变量和它所处的环境有关联。
这个是属于在列表环境使用HASH变量的问题。
在这种情况下,它会把哈希的建值对转换成列表。

举个简单点的关系,如在标量环境使用数组,$a=@aa,那么数组返回的是元素个数。同样的道理。

作者: toniz   发布时间: 2010-09-27

回复 有行动才会有收获


    差不多就是这个意思
   准确来说 => 相当于 "",
    例如:
    a => 'b'  相当于 "a",'b'

作者: 珞水的大叔   发布时间: 2010-09-27

噢~~,谢谢各位!

作者: 有行动才会有收获   发布时间: 2010-09-27

回复 toniz

受教了,最近也受困与hash的使用
hash能否通过简单的赋值进行传递,还是只能传递hash的引用

作者: cocowool   发布时间: 2010-09-27