zhaoyangjian724
9.1.1 创建和访问一个两维数组

[root@wx03 4]# cat a1.pl 
@Aoa = (
["fred", "barney" ],
["george", "jane", "elroy" ],
["homer", "marge", "bart" ],
);
print $Aoa[0]->[1];
print "\n";
[root@wx03 4]# perl a1.pl 
barney


$Aoa[0]->[1]; [0]表示第一个元素,->[1]表示数组引用的第2个元素

请注意 $array[3] 和 $array->[3] 是不一样的。第一个东西讲的是 @array 里的第四个元素, 而第二个东西讲  
的是一个保存在 $array 里的数组(可能是匿名的数组)引用的第四个元素。

[root@wx03 4]# cat a2.pl 
$ref_to_AoA = [
[ "fred", "barney674128462", "pebbles", "bamm bamm", "dino", ],
[ "homer", "bart", "marge", "maggie", ],
[ "george", "jane", "elroy", "judy", ],
];

print $ref_to_AoA->[0]->[1];
print "\n";
[root@wx03 4]# perl a2.pl 
barney674128462

请记住在每一对相邻的花括弧或方括弧之间有一个隐含的 ->。因此下面两行:

[root@wx03 4]# cat tmp.out 
a b56757 c 
e f g
o p q
r s t

[root@wx03 4]# cat a3.pl 
open (LOG ,"<","tmp.out");  
       while (<LOG>) { 
       @tmp = split;
push @AoA,[@tmp];
};
use Data::Dumper;
$str=Dumper(@AoA);

print @AoA;
print "\n"; 
print  $str;
print "\n";
print $AoA[0][1];
print "\n";



[root@wx03 4]# perl a3.pl 
ARRAY(0xf12338)ARRAY(0xf12410)ARRAY(0xf12cf8)ARRAY(0xf20088)ARRAY(0xefe160)
$VAR1 = [
          \'a\',
          \'b56757\',
          \'c\'
        ];
$VAR2 = [
          \'e\',
          \'f\',
          \'g\'
        ];
$VAR3 = [
          \'o\',
          \'p\',
          \'q\'
        ];
$VAR4 = [
          \'r\',
          \'s\',
          \'t\'
        ];
$VAR5 = [];

b56757


[root@wx03 4]# cat a4.pl 
sub func{
  $a=shift;
  $b=shift;
return $a + $b;
};

  



for $x (0..3){ # 对每一行...
for $y (0..3) { # 对每一列...
$AoA[$x][$y] = func($x, $y); # ...设置调用
}
};
print @AoA;
use Data::Dumper;
$str=Dumper(@AoA);
print "\$str is $str\n";
[root@wx03 4]# perl a4.pl 
ARRAY(0xec3368)ARRAY(0xec3488)ARRAY(0xed0158)ARRAY(0xee4d10)$str is $VAR1 = [
          0,
          1,
          2,
          3
        ];
$VAR2 = [
          1,
          2,
          3,
          4
        ];
$VAR3 = [
          2,
          3,
          4,
          5
        ];
$VAR4 = [
          3,
          4,
          5,
          6
        ];




for $i (1..10) {
@array = ($i,$i+1,$i+2);
$AoA[$i] = [ @array ]; 
};
print @AoA;
~            

$AoA[$i] = [ @array ];  ##数组的每个元素是一个数组引用



[root@wx03 4]# cat a5.pl 
for $i (1..3) {
@array = ($i,$i+1,$i+2);
$AoA[$i] = [ @array ]; # 错误!
};
print @AoA;
use Data::Dumper;
$str=Dumper(@AoA);
print "\$str is $str\n";
[root@wx03 4]# perl a5.pl 
ARRAY(0xe7f368)ARRAY(0xe7f4a0)ARRAY(0xe8d0b8)$str is $VAR1 = undef;
$VAR2 = [
          1,
          2,
          3
        ];
$VAR3 = [
          2,
          3,
          4
        ];
$VAR4 = [
          3,
          4,
          5
        ];


9.2 数组的散列


[root@wx03 4]# cat a6.pl 
%HoA = (
flintstones => [ "fred", "barney" ],
jetsons => [ "george", "jane", "elroy" ],
simpsons => [ "homer", "marge", "bart" ],
);
print $HoA{flintstones}->[1];
print "\n";
##添加元素
#
$HoA{test}=[\'a\',\'b\'];
print %HoA;
print "\n";

[root@wx03 4]# perl a6.pl 
barney
flintstonesARRAY(0xfb0160)jetsonsARRAY(0xfc4368)simpsonsARRAY(0xfc44b8)testARRAY(0xfc4338)



[root@wx03 4]# cat a7.pl 
open (LOG ,"<","t1.out");
while ( $line = <LOG> ) {
($who, $rest) = split /:\S*/, $line, 2;
print "\$who is $who\n";
print "\$rest is $rest\n";
@fields = split /\s+/, $rest;
$HoA{$who} = [ @fields ];
};
print %HoA;
print "\n";



[root@wx03 4]# cat a7.pl 
open (LOG ,"<","t1.out");
@fields=();
while ( $line = <LOG> ) {
($who, $rest) = split /:\S*/, $line, 2;
print "\$who is $who\n";
print "\$rest is $rest\n";
@fields = split /#/, $rest;
print "\@fields is @fields\n";
$HoA{$who} = [ @fields ];
};
print %HoA;
print "\n";

use Data::Dumper;
$str=Dumper(%HoA);
print "\$str is $str\n";

print $HoA{flintsotnes}->[1];
print "\n";
[root@wx03 4]# perl a7.pl 
$who is flintsotnes
$rest is  fred#barney#wilma#dino

@fields is  fred barney wilma dino

$who is jetsons
$rest is  george#jane#elroy

@fields is  george jane elroy

$who is simpsons
$rest is  homer#marge#bart

@fields is  homer marge bart

simpsonsARRAY(0x2297668)flintsotnesARRAY(0x228a368)jetsonsARRAY(0x228a338)
$str is $VAR1 = \'simpsons\';
$VAR2 = [
          \' homer\',
          \'marge\',
          \'bart
\'
        ];
$VAR3 = \'flintsotnes\';
$VAR4 = [
          \' fred\',
          \'barney\',
          \'wilma\',
          \'dino
\'
        ];
$VAR5 = \'jetsons\';
$VAR6 = [
          \' george\',
          \'jane\',
          \'elroy
\'
        ];

barney


[root@wx03 4]# perl a7.pl 
$who is flintsotnes
$rest is  fred barney wilma dino

$who is jetsons
$rest is  george jane elroy

$who is simpsons
$rest is  homer marge bart

flintsotnesARRAY(0x1c0a350)simpsonsARRAY(0x1c17d50)jetsonsARRAY(0x1c0a368)

散列的数组:

[root@wx03 4]# cat a8.pl 
@AoH = (
{
husband => "barney",
wife => "betty",
son => "bamm bamm",
},
{
husband => "george",
wife => "jane",
son => "elroy",
},
{
husband => "homer",
wife => "marge",
son => "bart",
},
);
print $AoH[0]->{wife};
print "\n";
[root@wx03 4]# perl a8.pl 
betty


生产散列的数组:
[root@wx03 4]# cat t1.pl 
open (LOG ,"<","t2.out");
while (<LOG>) {
$rec = {};
for $field ( split ) {
($key, $value) = split /=/, $field;
$rec->{$key} = $value;
}
push @AoH, $rec;
}
print @AoH;
print "\n";
use Data::Dumper;
$str=Dumper(@AoH);
print "\$str is $str\n";
[root@wx03 4]# cat t2.out 
husband=fred 
friend=barney
[root@wx03 4]# perl t1.pl 
HASH(0x1e82160)HASH(0x1e96338)
$str is $VAR1 = {
          \'husband\' => \'fred\'
        };
$VAR2 = {
          \'friend\' => \'barney\'
        };

9.4 散列的散列:

9.4.1 构成一个散列的散列
[root@wx03 4]# cat t2.pl 
%HoH = (
flintstones => {
husband => "fred",
pal => "barney",
},
jetsons => {
husband => "george",
wife => "jane",
"his boy" => "elroy", # 键字需要引号
},
simpsons => {
husband => "homer",
wife => "marge",
kid => "bart",
},
);

print $HoH{flintstones}->{pal};
print "\n";
[root@wx03 4]# perl t2.pl 
barney

9.4.2 生成散列的散列
下面
[root@wx03 4]# cat t3.pl 
open (LOG ,"<","t3.out");
while( <LOG> ){
$who = flintstones;
for $field ( split ) {
($key, $value) = split /=/, $field;
$HoH{$who}{$key} = $value;
}
};
print %HoH;
use Data::Dumper;
$str=Dumper(%HoH);
print "\$str is $str\n";
print $HoH{flintstones}{wife};
print "\n";

[root@wx03 4]# cat t3.out 
husband=fred 
pal=barney 
wife=wilma 
pet=dino
[root@wx03 4]# perl t3.pl 
flintstonesHASH(0xb6e320)$str is $VAR1 = \'flintstones\';
$VAR2 = {
          \'pal\' => \'barney\',
          \'husband\' => \'fred\',
          \'pet\' => \'dino\',
          \'wife\' => \'wilma\'
        };

wilma

9.5 函数的散列
%HoF = ( # Compose a hash of functions
exit => sub { exit },
help => \&show_help,
watch => sub { $watch = 1 },
mail => sub { mail_msg($msg) },
edit => sub { $edited++; editmsg($msg); },
delete => \&confirm_kill,
);

分类:

技术点:

相关文章:

  • 2021-10-04
  • 2021-07-09
  • 2021-04-17
  • 2021-08-22
  • 2021-05-30
猜你喜欢
  • 2021-11-11
  • 2022-12-23
  • 2021-04-21
  • 2021-05-27
  • 2021-07-06
  • 2022-01-17
  • 2021-05-01
相关资源
相似解决方案