Perl  - 讨论区

标题:Perl基础 解析Perl标量和数组概念

2010年12月18日 星期六 13:25

    Perl标量和数组的概念,Perl有三种变量:Perl标量、数组、哈希;而Perl数组是由一组连续的Perl标量。

    Perl读书手记

    一、Perl标量

    1、Perl有三种变量:Perl标量、数组、哈希
    2、字符相加不是用“+”号,而是用“.”
    3、
     

        
    1. #!/usr/bin/Perl-w  
    2. $ num1 = "a" ;####“”是字符  
    3. $ num2 = "5" ;  
    4. $ num3 =$num1x$num2;####$num1重复$num2次  
    5. print"\$num3is$num3\n";  

     

    执行结果:
    [root@test-linuxtmp]#./pe.pl
    $num3isaaaaa
    [root@test-linuxtmp]#
    4、Perl中字符串的比较操作和Shell中的数值测试运算相同,Perl中的数值比较操作就和Shell的字符串比较操作相同。
    awk中“=”表示赋值“==”表示等于关系的判断

    二、Perl数组 -- 数组是由一组连续的 Per l标量

    1、Perl中使用@加上数组名来表示一个数组;Perl中的数组下标是从“0”开始;Perl中的数组元素不必是同一数据类型

    2、使用[]申请数组中第几个元素

    3、$name@name%name分别表示Perl标量数组散列

    4、push能够把一些元素添加到数组尾部,而pop函数每次只能取走一个元素(是取走而不是复制)末理解的“堆栈数据结构”

     

        
    1. [root@test-linuxtmp]#catpg.pl  
    2. #!/usr/bin/Perl-w  
    3. @ list1 =(1..4);  
    4. @ list2 =("zero","one","two","three","four");  
    5. push(@list1,@list2);  
    6. $ last = pop (@list1);  
    7. print"\@list1is@list1\n";  
    8. print"\@list2is@list2\n";  
    9. print"\$lastis$last\n";  
    10. [root@test-linuxtmp]#vipg.pl  
    11. [root@test-linuxtmp]#./pg.pl  
    12. @list1is1234zeroonetwothree  
    13. @list2iszeroonetwothreefour  
    14. $lastisfour  
    15. [root@test-linuxtmp]#  
    16.  

    5、unshift函数是在数组的头部插入一个或者是一些新的元素;shift是从数组的头部移走一个元素,整个数组看起来像是向左移动了一个位置。  

        
    1. #!/usr/bin/Perl-w  
    2. @ list1 =(0..4);  
    3. @ list2 =("zero","one","two","three","four");  
    4. unshift(@list1,@list2);###是将数组list2插入到数组list1  
    5. $ last = shift (@list1);  
    6. print"\@list1is@list1\n\@list2is@list2\n\$lastis$last\n";  
    7.  
    8. [root@test-linuxtmp]#./ph.pl  
    9. @list1isonetwothreefour01234  
    10. @list2iszeroonetwothreefour  
    11. $lastiszero  
    12. [root@test-linuxtmp]#  
    13.  

    6、reverse函数的功能是颠倒数组,它可以把数组元素的顺序头尾颠倒。

        
    1. [root@test-linuxtmp]#catpi.pl  
    2. #!/usr/bin/Perl-w  
    3. @ list1 =(0..4);  
    4. print"\@list1is@list1\n";  
    5. @ list1 = reverse (@list1);  
    6. print"\@list1reverseis@list1\n";  
    7.  
    8. [root@test-linuxtmp]#./pi.pl  
    9. @list1is01234  
    10. @list1reverseis43210  
    11. [root@test-linuxtmp]#  
    12.  

    7、哈希

    哈希变量和数组非常类似,都可以存放多个 Perl标量 ,每个 Perl标量 可以通过索引单独存取。不同的是哈希变量的索引不是数组的下标,而是另一个 Perl标量 。通常这个 Perl标量 被称作key,通过key,我们就可以访问
    到其对应的数据。另一点的不同是哈希变量中的元素没有先后之分,是无序的,key是能够访问它们的惟一通道。Perl中使用百分号“%”来表示一个哈希变量。

    为以下内容
     

        
    1. [root@test-linuxtmp]#catpl.pl  
    2. #!/usr/bin/Perl-w  
    3. $area{'beijing'}=9;  
    4. $area{'shanghai'}=8;  
    5. print"$area{'beijing'}\n"  
    6. % areab =('hebei'= > 5,'handan'= > 4);  
    7. print"\$areabhebeiis$areab{'hebei'}\n";  
    8. print"\$areabhandanis$areab{'handan'}\n"  
    9. [root@test-linuxtmp]#  

     

    执行错误 

        
    1. [root@test-linuxtmp]#./pl.pl  
    2. Unquotedstring"areab"mayclashwithfuturereservedwordat./pl.plline5.  
    3. Operatororsemicolonmissingbefore%areabat./pl.plline5.  
    4. Ambiguoususeof%resolvedasoperator%at./pl.plline5.  
    5. Can'tmodifymodulus(%)inscalarassignmentat./pl.plline5,near");"  
    6. Executionof./pl.plabortedduetocompilationerrors.  
    7.  

    但将2到4行注释掉可以成功执行。原因不清楚

    [root@test-linuxtmp]#catpt.pl
    #!/usr/bin/Perl-w
    %area=(1,"a",2,"b");
    print"\%areais1$area{1}\n";

    来源

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2024

    京ICP备05028076号