Ⅰ. 列表嵌套列表(列表嵌套列表即为二维列表)
a. 列表的声明
方法一:
@list = (
["banana","apple","orange","pear"],
["cauliflower","lettuce","tomato","cucumber"],
["orange juice","apple juice","red tea","red wine"]
);
方法二:
@fruit = ("banana","apple","orange","pear");
@vegetable = ("cauliflower","lettuce","tomato","cucumber");
@drink = ("orange juice","apple juice","red tea","red wine");
正确方法:
@list = ([@fruit],[@vegetable],[@drink]);
错误方法:
@list = (@fruit, @vegetable, @drink);
错误剖析:如果不用[]把每个子列表括起来,那么这个列表@list就相当于@fruit, @vegetable, @drink这三个列表拼接而成的一个一维列表相当于@list = ("banana","apple","orange","pear","cauliflower","lettuce","tomato","cucumber","orange juice","apple juice","red tea","red wine")
方法三:
正确方法:
$list[0] = ["banana","apple","orange","pear"];
错误方法:
$list[0] = ("banana","apple","orange","pear");
错误剖析:这样的结果是$list[0] = "pear" 并且会报警告
b. 列表的访问
$list[0][0] = "banana";
#$list[0] and @list[0] 两种表示都可以,但是 @list[0] 会报警告
Ⅱ. 列表嵌套哈希
a. 列表的声明
方法一:
@list = (
{
'fruit' => 'banana',
'vegetable' => 'cauliflower',
'drink' => 'orange juice'
},
{
'fruit' => 'apple',
'vegetable' => 'lettuce',
'drink' => 'apple juice'
},
{
'fruit' => 'orange',
'vegetable' => 'tomato',
'drink' => 'red tea'
},
{
'fruit' => 'pear',
'vegetable' => 'cucumber',
'drink' => 'red wine'
}
);
方法二:
%group1 = (
'fruit' => 'banana',
'vegetable' => 'cauliflower',
'drink' => 'orange juice'
);
%group2 = (
'fruit' => 'apple',
'vegetable' => 'lettuce',
'drink' => 'apple juice'
);
%group3 = (
'fruit' => 'orange',
'vegetable' => 'tomato',
'drink' => 'red tea'
);
%group4 = (
'fruit' => 'pear',
'vegetable' => 'cucumber',
'drink' => 'red wine'
);
正确方法:
@list = ({%group1}, {%group2}, {%group3}, {%group4});
错误方法:
@list = (%group1, %group2, %group3, %group4);
错误剖析:如果不用{}把每个子列表括起来,那么这个列表@list就相当于%group1, %group2, %group3, %group4 这四个哈希拼接而成的一个一维列表,相当于@list = ( 'fruit', 'banana', 'drink', 'orange juice', 'vegetable', 'cauliflower', 'fruit', 'apple', 'drink', 'apple juice', 'vegetable', 'lettuce', 'fruit', 'orange', 'drink', 'red tea', 'vegetable', 'tomato', 'fruit', 'pear', 'drink', 'red wine', 'vegetable', 'cucumber')
方法三:
正确方法:
$list[0] = {'fruit' => 'banana', 'vegetable' => 'cauliflower','drink' => 'orange juice'};
$list[0] = {%group1};
错误方法:
$list[0] = ('fruit' => 'banana', 'vegetable' => 'cauliflower','drink' => 'orange juice');
错误剖析:这样的结果是$list[0] = 'orange juice' 并且有警告
$list[0] = ['fruit' => 'banana', 'vegetable' => 'cauliflower','drink' => 'orange juice']
错误剖析:这样的结果是$list[0] = ['fruit','banana','vegetable','cauliflower','drink','orange juice']
b. 列表的访问
$list[0]{'fruit'} = 'banana' ;
$list[0]{fruit}= 'banana'; #两者都可以
$list[0] = {'fruit' => 'banana','drink' => 'orange juice','vegetable' => 'cauliflower'};
Ⅲ. 哈希嵌套哈希
a. 哈希的声明
方法一:
my %hash = (
group1 => {
'fruit' => 'banana',
'vegetable' => 'cauliflower',
'drink' => 'orange juice'
},
group2 => {
fruit => 'apple',
vegetable => 'lettuce',
drink => 'apple juice'
},
group3 => {
'fruit' => 'orange',
'vegetable' => 'tomato',
'drink' => 'red tea'
},
group4 => {
fruit => 'pear',
vegetable => 'cucumber',
drink => 'red wine'
}
);
%hash = (
'group1', {'fruit', 'banana', 'drink', 'orange juice', 'vegetable', 'cauliflower'},
'group2', {'fruit', 'apple', 'drink', 'apple juice', 'vegetable', 'lettuce'},
'group3', {'fruit', 'orange', 'drink', 'red tea', 'vegetable', 'tomato'},
'group4', {'fruit', 'pear', 'drink', 'red wine', 'vegetable', 'cucumber'}
);
方法二:
%group1 = (
'fruit' => 'banana',
'vegetable' => 'cauliflower',
'drink' => 'orange juice'
);
%group2 = (
'fruit' => 'apple',
'vegetable' => 'lettuce',
'drink' => 'apple juice'
);
%group3 = (
'fruit' => 'orange',
'vegetable' => 'tomato',
'drink' => 'red tea'
);
%group4 = (
'fruit' => 'pear',
'vegetable' => 'cucumber',
'drink' => 'red wine'
);
正确方法:
%hash = (
'group1' => {%group1},
'group2' => {%group2},
'group3' => {%group3},
'group4' => {%group4}
);
错误方法:
%hash = (%group1, %group2, %group3, %group4);
错误剖析:这个哈希相当于%hash = %group4
%hash = (
'group1' => %group1,
'group2' => %group2,
'group3' => %group3,
'group4' => %group4
);
错误剖析:这个哈希的结果相当于 %hash = ('tomato','group4','orange juice','vegetable','cauliflower','group2','orange','drink','fruit','pear','group1','fruit','banana','drink','drink','red wine','vegetable','cucumber','group3','fruit','red tea','vegetable')
方法三:
$hash{group1} = {%group1};
$hash{'group1'} = {
'fruit' => 'banana',
'vegetable' => 'cauliflower',
'drink' => 'orange juice'
};
$hash{'group1'} = {'fruit', 'banana', 'vegetable', 'cauliflower', 'drink', 'orange juice'};
b. 哈希的访问
$hash{'group1'}{'fruit'} = 'banana' and $hash{group1}{fruit} are the same.
$list{group1) = {'fruit' => 'banana','drink' => 'orange juice','vegetable' => 'cauliflower'};
Ⅳ. 哈希嵌套列表
a. 哈希的声明
方法一:
%hash = (
'fruit' => ["banana","apple","orange","pear"],
'vegetable' => ["cauliflower","lettuce","tomato","cucumber"],
'drink' => ["orange juice","apple juice","red tea","red wine"]
);
%hash = (
'fruit', ["banana","apple","orange","pear"],
'vegetable', ["cauliflower","lettuce","tomato","cucumber"],
'drink', ["orange juice","apple juice","red tea","red wine"]
);
方法二:
@fruit = ("banana","apple","orange","pear");
@vegetable = ("cauliflower","lettuce","tomato","cucumber");
@drink = ("orange juice","apple juice","red tea","red wine");
%hash = (
'fruit', [@fruit],
'vegetable', [@vegetable],
'drink', [@vegetable]
);
方法三:
$hash{fruit} = [@fruit];
$hash{'fruit'} = ["banana","apple","orange","pear"];
b. 哈希的访问
$hash{'fruit'}[0] = 'banana';
$hash{'fruit'} = ['banana','apple','orange','pear'];