当前位置:早雪网网络学院编程文档Perl → perl5中文教程--第十二章 Perl5中的引用/指针

perl5中文教程--第十二章 Perl5中的引用/指针

减小字体 增大字体 作者:不详  来源:supcode.com收集整理  发布时间:2005-7-23 10:55:50
n
02 is Feb
03 is Mar
04 is Apr
05 is May
06 is Jun
07 is Jul
08 is Aug
09 is Sep
10 is Oct
11 is Nov
12 is Dec

    与数组类似,通过引用访问哈希表的元素形式为$$pointer{$index},当然,$index是哈希表的键值,而不仅是数字。还有几种访问形式,此外,构建哈希表还可以用=>操作符,可读性更好些。下面再看一个例子:

1  #!/usr/bin/perl
2  #
3  # Using Array references
4  #
5  %weekday = (
6    '01' => 'Mon',
7    '02' => 'Tue',
8    '03' => 'Wed',
9    '04' => 'Thu',
10   '05' => 'Fri',
11   '06' => 'Sat',
12   '07' => 'Sun',
13   );
14 $pointer = \%weekday;
15 $i = '05';
16 printf "\n ================== start test ================= \n";
17 #
18 # These next two lines should show an output
19 #
20   printf '$$pointer{$i} is ';
21   printf "$$pointer{$i} \n";
22   printf '${$pointer}{$i} is ';
23   printf "${$pointer}{$i} \n";
24   printf '$pointer->{$i} is ';
25
26   printf "$pointer->{$i}\n";
27 #
28 # These next two lines should not show anything 29 #
30   printf '${$pointer{$i}} is ';
31   printf "${$pointer{$i}} \n";
32   printf '${$pointer->{$i}} is ';
33   printf "${$pointer->{$i}}";
34 printf "\n ================== end of test ================= \n";
35

    结果输出如下:

================== start test =================
$$pointer{$i} is Fri
${$pointer}{$i} is Fri
$pointer->{$i} is Fri
${$pointer{$i}} is
${$pointer->{$i}} is
================== end of test =================

    可以看到,前三种形式的输出显示了预期的结果,而后两种则没有。当你不清楚是否正确时,就输出结果看看。在Perl中,有不明确的代码就用print语句输出来实验一下,这能使你清楚Perl是怎样解释你的代码的。
五、多维数组
    语句@array = list;可以创建数组的引用,中括号可以创建匿名数组的引用。下面语句为用于画图的三维数组的例子:
    $line = ['solid' , 'black' , ['1','2','3'] , ['4','5','6']];
    此语句建立了一个含四个元素的三维数组,变量$line指向该数组。前两个元素是标量,存贮线条的类型和颜色,后两个元素是匿名数组的引用,存贮线条的起点和终点。访问其元素语法如下:

$arrayReference->[$index]     single-dimensional array
$arrayReference->[$index1][$index2]   two-dimensional array
$arrayReference->[$index1][$index2][$index3] three-dimensional array

    可以创建在你的智力、设计经验和计算机的内存允许的情况下极尽复杂的结构,但最好对可能读到或管理你的代码的人友好一些--尽量使代码简单些。另一方面,如果你想向别人炫耀你的编程能力,Perl给你足够的机会和能力编写连自己都难免糊涂的代码。:)
    建议:当你想使用多于三维的数组时,最好考虑使用其它数据结构来简化代码。
    下面为创建和使用二维数组的例子:

1  #!/usr/bin/perl
2  #
3  # Using Multi-dimensional Array references
4  #
5  $line = ['solid', 'black', ['1','2','3'] , ['4', '5', '6']];
6  print "\$line->[0] = $line->[0] \n";
7  print "\$line->[1] = $line->[1] \n";
8  print "\$line->[2][0] = $line->[2][0] \n";
9  print "\$line->[2][1] = $line->[2][1] \n";
10 print "\$line->[2][2] = $line->[2][2] \n";
11 print "\$line->[3][0] = $line->[3][0] \n";
12 print "\$line->[3][1] = $line->[3][1] \n";
13 print "\$line->[3][2] = $line->[3][2] \n";
14 print "\n"; # The obligatory output beautifier.

    结果输出如下:

$line->[0] = solid
$line->[1] = black
$line->[2][0] = 1
$line->[2][1] = 2
$line->[2][2] = 3
$line->[3][0] = 4
$line->[3][1] = 5
$line->[3][2] = 6

    那么三维数组又如何呢?下面是上例略为改动的版本。

1  #!/usr/bin/perl
2  #
3  # Using Multi-dimensional Array references again
4  #
5  $line = ['solid', 'black', ['1','2','3', ['4', '5', '6']]];
6  print "\$line->[0] = $line->[0] \n";
7  print "\$line->[1] = $line->[1] \n";
8  print "\$line->[2][0] = $line->[2][0] \n";
9  print "\$line->[2][1] = $line->[2][1] \n";
10 print "\$line->[2][2] = $line->[2][2] \n";
11 print "\$line->[2][3][0] = $line->[2][3][0] \n";
12 print "\$line->[2][3][1] = $line->[2][3][1] \n";
13 print "\$line->[2][3][2] = $line->[2][3][2] \n";
14 print "\n";

    结果输出如下:

$line->[0] = solid
$line->[1] = black
$line->[2][0] = 1
$line->[2][1] = 2
$line->[2][2] = 3
$line->[2][3][0] = 4
$line->[2][3][1] = 5
$line->[2][3][2] = 6

    访问第三层元素的方式形如$line->[2][3][0],类似于C语言中的Array_pointer[2][3][0]。本例中,下标均为数字,当然亦可用变量代替。用这种方法可以把数组和哈希表结合起来构成复杂的结构,如下:

1 #!/usr/bin/perl
2 #
3 # Using Multi-dimensional Array and Hash references
4 #
5 %cube = (
6 '0', ['0', '0', '0'],
7 '1', ['0', '0', '1'],
8 '2', ['0', '1', '0'],
9 '3', ['0', '1', '1'],
10 '4', ['1', '0', '0'],
11 '5', ['1', '0', '1'],
12 '6', ['1', '1', '0'],
13 '7', ['1', '1', '1']
14 );
15 $pointer = \%cube;
16 print "\n Da Cube \n";
17 foreach $i (sort keys %$pointer) {
18 $list = $$pointer{$i};
19 $x = $list->[0];
20 $y = $list->[1];
21 $z = $list->[2];
22 printf " Point $i = $x,$y,$z \n";
23 }

    结果输出如下:

Da Cube
Point 0 = 0,0,0
Point 1 = 0,0,1
Point 2 = 0,1,0
Point 3 = 0,1,1
Point 4 = 1,0,0
Point 5 = 1,0,1
Point 6 = 1,1,0
Point 7 = 1,1,1

    这是一个定义立方体的例子。%cube中保存的是点号和坐标,坐标是个含三个数字的数组。变量$list获取坐标数组的引用:$list = $$ pointer{$i}; 然后访问各坐标值:$x = $list->[0]; ... 也可用如下方法给$x、$y和$z赋值:($x,$y,$z) = @$list;
    使用哈希表和数组时,用$和用->是类似的,对数组而言下面两个语句等效:
    $$names[0] = "kamran";
    $names->[0] = "kamran";
    对哈希表而言下面两个语句等效:
    $$lastnames{"kamran"} = "Husain";
    $lastnames->{"kamran"} = "Husain";
    Perl中的数组可以在运行

上一页  [1] [2] [3]  下一页


Tags:perl,中文,教程,第十二,Perl,引用,指针
[数据载入中...] [返回上一页] [打 印]

文章评论评论内容只代表网友观点,与本站立场无关!

  评论人:Carlton   打分:85 分  发表时间:2007-4-14 9:42:00
· http://39dbb7ca768b0cb693ad98b25d5e9da6-t.koi09u.info<ahref=...