Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4043185
  • 博文数量: 536
  • 博客积分: 10470
  • 博客等级: 上将
  • 技术积分: 4825
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-26 14:08
文章分类

全部博文(536)

文章存档

2024年(3)

2021年(1)

2019年(1)

2017年(1)

2016年(2)

2013年(2)

2012年(10)

2011年(43)

2010年(10)

2009年(17)

2008年(121)

2007年(252)

2006年(73)

分类:

2008-02-16 20:56:57

1>. 数组

数组是标量数据的有序列表。
数组可以含任意多个元素。最小的数组可以不含元素,而最大的数组可以占满全部可用内存。
数组实量(array literal)是位于括号内用逗号分开的一系列值。如:

(1,2,3,4,5)#具有1,2,3,4,5五个数值的数组
("zmd",1974,173.5)#具有"zmd",1974,173.5三个数值的数组
()#空数组
($a,5)#两个数值:$a的值和5
($a+$b,6)#两个数值

  数组变量具有单独的数组值,要以@打头而不是$。如:
  @zmd
  注意: @zmd与$zmd没任何联系。Perl为对象的不同类型保留独立的命名空间。

简单的实例:
 ($a,$b,$c)=(1,2,3) #将1赋给$a,2赋给$2,3赋给$3
 
 @zmd=(1,2,3) # 将(1,2,3)赋给@zmd
 $a=@zmd # $a为3,即@zmd的数组个数
 
 @user1=("zmd","cxm");    #将zmd和cxm两个字符串赋给@user1
 @user2=@user1;            #这时@user2=@user1=("zmd","cxm")
 @user3=("zk",@user1);  #这时@user3=("zk","zmd","cxm")
 ($one,@user4)=@user3;  #这时$one="zk"
 @user1=();             #把@user1清空
 @int1=(1,2,3,4,5); $x=@int1;      #将数组@int1的个数赋给$x纯变量,$x=5
 $x=$#int1;                #$#这个变量返回数组最后个数的值(index)$x=4
 ($x)=@int1;            #$x等于数组的第一个个数值$x=1
 $b=$int1[0];           #$b等于数组的第一个元素值$b=1
 $c=@int1[0];           #$c同上$c=1,因此呼叫数组中值有两种方法
 $int1[0]=3;            #将3这个数值赋给数组@int的第一个元素@int1=(3,2,3,4,5)
 $int1[0,1]=[7,8];      #将7赋给数组的第一个元素将8赋给数组第二个元素@int1=(7,8,3,4,5)
 @int1[0,1]=@int1[1,0]; #将数组前两个元素交换@int1(8,7,3,4,5)
 ($int1[0],$int1[1])=($int1[1],$int1[0]);   #同上@int1=(8,7,3,4,5)
 @int2=@int1[0,1];      #int2=(8,7)
 $int1[5]=6;            #将6赋给数组中第六个元素@int1=(1,2,3,4,5,6)
 
2>.关联数组

    关联数组和前面说的数组类似,它包含标量数据,可用索引值来单独选择这些数据,和数组不同的是, 关联数组的索引值不是非负的整数而是任意的标量。这些标量称为Keys,可以在以后用于检索数组中的数值。
    关联数组的元素没有特定的顺序,你可以把它们想象为一组卡片。每张卡片上半部分是索引而下半部分是数值。
    关联数组是Perl语言中特有的,关联数组是一个功能强大的数组。使用关联数组时要在前面加上%号,关联数组的格式如:
    %ARRAY=(key1,value1,key2,value2,key3,value3);

    每一个key都有一个相对应的值(value)。
    和数组类似,$zmd,@zmd,%zmd之间没有任何联系。Perl为对象的不同类型保留独立的命名空间。
 
简单实例及说明:

    在关联数组中增加、更改一对数据:ARRAY={key}=value; 在关联数组ARRAY中加上一对key-value,要在关联数组名称前加上$号,而且key的名称要在{}符号之间,最后再指定key所对应的value值。如果在这个关联数组中已经有这个key了.就会更改这个key所对应的value。
    %fred=(one,"zmd",two,"cxm");
    $a=$fred{one};          #$a等于"zmd"
    $b=$fred{two};          #$b等于"cxm"
    $fred{two}="yes";       #%fred=(one,"zmd",two,"yes")
    @a=%fred;               #将关联数组fred指定给数组a,这时@a=(one,"zmd",two,"cxm")
    %b=@a;                  #将数组a指定给关联数组b,这时%b=(one,"zmd",two,"cxm")
    %name=();               #把%name关联数组置空

    keys(%array)操作符可生成由关联数组%array中的所有当前关键字组成的列表。即返回奇数个元素(第1,3,5,7...个)的列表。
    @number=keys(%fred);    #@list=(one,two)

    values(%array)操作符返回由关联数组%array中所有当前值组成的列表,即返回偶数个列表。
    @user=values(%fred);    #@user=("zmd","cxm")

    echo(%array)操作符返回由一个关键字和一个值对构成的两个元素的表。对同一数组再操作时返回下一对值直至结束。若没有更多的对时,echo()返回空表。 (这在打印全部列表中很有用)
    ($number, $name)=echo(%fred);   #此时$number的值为one,$name的值为"zmd",再执行一次$number为值为two,$name的值为"cxm")
   
    删除一对在关联数组中的数据:delete $ARRAY{key};delete 是 Perl 所提供的函数,作用是删除关联数组中的一个key以及这个 key 所对应的 value。使用方法是 在 delete 函数之后,指定关联数组中要删除的key名称。
    delete $fred{one};      #将关联数组中key值为one的一对key-value删除,这时%fred=(two,"cxm")
 
3>. Perl的运算符号字符

3.1>. 几个特殊的赋值(Assignment)运算符:

符号: **=
范例: $x **= $y;
       $x = $x ** $y;   
说明: 将$x乘上$y次方之后再指派给$x

符号: .=
范例: $str1 .= $str2;
       $str1 = $str1 . $str2;
说明: 将$str1这个字符串再加上$str2这个字符串之后,再指派给$str1这个字符串

符号: x=
范例: $str x= $y;
       $str = $str x $y;
说明: 重复$str字符串$y次,并把结果指派给str这个字符串

3.2>. 几个特殊的数值(Numeric Values)关系运算符:

符号: <=>
范例: $x <=> $y
说明: 如果$x大于$y,返回1的值,如果$x等于$y,否则返回0;如果 $x小于$y,则返回-1的值

3.3>. 字符串(String Values)关系运算符:

符号: gt
范例: $str1 gt $str2
说明: 如果$str1大于$str2,返回1的值,否则返回0

符号: ge
范例: $str1 ge $str2
说明: 如果$str1大于等于$str2,返回1的值,否则返回0

符号: lt
范例: $str1 lt $str2
说明: 如果$str1小于$str2,返回1的值,否则返回0

符号: le
范例: $str1 le $str2
说明: 如果$str1小于等于$str2,返回1的值,否则返回0

符号: eq
范例: $str1 eq $str2
说明: 如果$str1等于$str2,返回1的值,否则返回0

符号: ne
范例: $str1 ne $str2
说明: 如果$str1不等于$str2,返回1的值,否则返回0

符号: cmp
范例: $str1 cmp $str2
说明: 如果$str1大于$str2,返回1的值,如果$str1等于$str2,返回0,如果$str1小于$str2,则返回-1的值

3.4>. 其它常用的运算符:

符号: ..
范例:
    @digits=(1..9);         #此时@digits=(1,2,3,4,5,6,7,8,9);
    @digits=('01'..'05');   #此时@digits=(01,02,03,04,05);
    @char=('A'..'E');       #此时@char('A','B','C','D','E',);
    @total=(1..3,'A'..'B'); #此时@total=(1,2,3'A','B');
说明: 区块运算符(Range Operator), 这个运算符是Perl语言中特有的运算符,是一个很实用的运算符.

3.5>. 常用的文件数据(File test)运算符:

范例          说明
-r $file    如果$file是可读取的话,返回1的值
-w $file    如果$file是可写入的话,返回1的值
-x $file    如果$file是可执行的话,返回1的值
-e $file    如果$file存在的话,返回1的值
-o $file    如果$file是被执行才所拥有的话,返回1的值
-s $file    返回$file的文件大小(bytes)
-f $file    如果$file是正常文件的话,返回1的值
-T $file    如果$file是文本文件的话,返回1的值
-B $file    如果$file是Binary文件的话,返回1的值
-M $file    返回$file文件最后一次更改时间到现在的日期数

3.6>. 常规表达式(Regular Expresion)相关的运算符:

符号: =~
范例:
    print"请输入一个字符串!\n";
    $string=;    #代表标准输入,会让使用者输入一字符串
    chop($string);      #将$string最后一个换行的字符\n删除掉
    if ($string =~ /cgi/) {
        print("输入的字符串中有cgi这个字符串!\n";
    }
    # 如果输入的字符串含有cgi这个字符串的话,就会显示出这个信息。
说明: 相配运算符, 这是Perl语言中特有的语法,通常会和文字处理来作运算。

符号: !~
范例:
    if ($string !~ /cgi/) {
        print("输入的字符串中有cgi这个字符串!\n";
    }
    # 如果输入的字符串中没有cgi这个字符串的话,就会显示出这个信息。
说明: 不相配运算符, 这也是Perl语言中特有的语法,通常会和常规表达式来运算。

4>. Perl的基本输入输出:

4.1>. 从STDIN输入

    从标准输入设备读取数据是很容易的,我们已经从第一课上就使用操作符了。例如:
   $name=;

    在数组环境中,可把所有剩余的行作为一列表返回。如:
   @name=;

    此时,需要读入多行,然后再对各行分别处理。通常做法是:
   while($_=){
    chop($_);
    #处理$_(每一行)
   }

    上述程序可简化为:
   while(){
    chop; #等同于chop($_)
    处理$_(每一行)
   }

    因为$_是许多操作符的缺少变量。

4.2>. 从<>输入

    读取输入的另一种方法是使用<>。<>是从Perl程序命令行所指定的文件中读取数据。例如有个文件名为pro1的程序:
   #!/usr/bin/perl;
   while(<>){
    print $_;
   }

    在UNIX环境中运行:
   pro1 file1,file2,file3

    此时,将依次读入文件file1,file2,file3中的每一行,然后显示输出。

4.3>. 向STDOUT输出
    Perl用print和printf向标准输出设备输出。
    print操作符使用字串列表作为参数,依次把每个字符串发送给标准输出,在发送时不插入或改变任何字符。如:
   print "网上学园"."欢迎您!" #打印"网上学园欢迎您!"
   print 1+2,"你好" #打印"3你好"

    printf操作符用于格式化输出,在C语言中有相同的功能。它使用一个参数表,第一个参数是格式控制字符串,它定义了如何打印其余参数。例如:
    printf "%10s% 8d%8.2f\n",$a,$b,$c

    它的打印结果为:10个字符宽度的$a,空格,8个字符宽度的整数$b,8个字符宽度且包含两位小数的浮点数$c,最后换行。
    注意:与前面操作符相类似,printf()的括号可以省略。
阅读(1620) | 评论(0) | 转发(0) |
0

上一篇:HP-UX下线程数问题

下一篇:shell学习

给主人留下些什么吧!~~