zoukankan      html  css  js  c++  java
  • Perl学习笔记

    1.单引号和双引号

    #!/usr/bin/perl
    print "Hello, world
    "; # 双引号
    print 'Hello, world
    '; # 单引号

     结果:

    Hello, world
    Hello, world
    

    也就是可以看出,双引号会解析 转义字符和变量,而单引号不会。 

    2.字符串(Here文档)

    #!/usr/bin/perl
    $a = 10;
    $var = <<"EOF";
    这是一个 Here 文档实例,使用双引号。
    可以在这输如字符串和变量。
    例如:a = $a
    EOF
    print "$var
    ";
    $var = <<'EOF';
    这是一个 Here 文档实例,使用单引号。
    例如:a = $a
    EOF
    print "$var
    ";

    输出:

    这是一个 Here 文档实例,使用双引号。
    可以在这输如字符串和变量。
    例如:a = 10
    
    这是一个 Here 文档实例,使用单引号。
    例如:a = $a

    1.$a用来定义标量,

    2.在定义字符串时,要使用一个EOF或者其他任何样式的字母,并且加上<<,最后一行结束时还要有同样的字串作为结束,并且如果是双引号,就会解析其中的变量,单引号不解析变量。

    3.数据类型

    Perl是弱类型的语言,变量不需要指定类型。

    1.标量:可以是数字、字符串、浮点数:$myfirst=123;  #数字123

    2.数组:以0开头,@arr=(1,2,3)

    3.哈希:%h=('a'=>1,'b'=>2);  无序的key/value集,以%开头。

    4.变量上下文

    #!/usr/bin/perl
    @names = ('google', 'runoob', 'taobao');
    @copy = @names; # 复制数组
    $size = @names; # 数组赋值给标量,返回数组元素个数
    print "名字为 : @copy
    ";
    print "名字数为 : $size
    ";

    输出:

    名字为 : google runoob taobao
    名字数为 : 3

    上下文是由表达式左边的变量类型决定的,=左边是标量/列表,则是标量/列表上下文,

    5.特殊字符

    #!/usr/bin/perl
    print "文件名 ". __FILE__ . "
    ";
    print "行号 " . __LINE__ ."
    ";
    print "包名 " . __PACKAGE__ ."
    ";
    # 无法解析
    print "__FILE__ __LINE__ __PACKAGE__
    ";

    结果:

    文件名 E:/MymyEclipse_workSpace/Test002/perl.pl
    行号 3
    包名 main
    __FILE__ __LINE__ __PACKAGE__

    其中分别是指文件名、行号、包名。这些特殊字符不能出现在字符串中。

    6.建立和访问数组

    @array=(1,2,3);
    $array[0]=9;
    print "$array[0]";

    建立就是很正常地建立,访问使用$+元素位置就可以了,和python一样,-1表示最后一个,并且-2以此类推。

    #!/usr/bin/perl
    @var_10 = (1..10);
    @var_20 = (10..20);
    @var_abc = (a..z);
    print "@var_10
    "; # 输出 1 到 10
    print "@var_20
    "; # 输出 10 到 20
    print "@var_abc
    "; # 输出 a 到 z

    提供了:起始值..结束值 来创建数组,和SNL挺像啊。

    数组大小可以由 标量上下文决定。

    7.对数组的操作

    #!/usr/bin/perl
    # 创建一个简单是数组
    @sites = ("google","runoob","taobao");
    print "1. @sites = @sites
    ";
    # 在数组结尾添加一个元素
    push(@sites, "baidu");
    print "2. @sites = @sites
    ";
    # 在数组开头添加一个元素
    unshift(@sites, "weibo");
    print "3. @sites = @sites
    ";
    # 删除数组末尾的元素
    pop(@sites);
    print "4. @sites = @sites
    ";
    # 移除数组开头的元素
    shift(@sites);
    print "5. @sites = @sites
    ";

    这个例子很不错了,清晰明了。首先是对数组的输出是最基本的,直接输出定义就可以。

    push(@数组名,“添加元素”)/unshift(@数组名,“添加元素”)/pop(@数组名)/shift(@数组名)


    #!/usr/bin/perl
    @sites = qw/google taobao runoob weibo qq facebook 网易/;
    @sites2 = @sites[3,4,5];
    print "@sites2
    ";

    这个例子给出了创建数组的另一种方法,就是使用qw然后是/元素1 元素2 /;  元素之间使用空格隔开。

    对元素进行分割,切割后赋值给一个新的数组,当然也可以使用像创建数组时的 ..,来表示一个范围。


    #!/usr/bin/perl
    @nums = (1..20);
    print "替换前 - @nums
    ";
    splice(@nums, 5, 5, 21..25);
    print "替换后 - @nums
    ";

    结果:

    替换前 - 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
    替换后 - 1 2 3 4 5 21 22 23 24 25 11 12 13 14 15 16 17 18 19 20

    对数组元素进行替换使用splice函数,其中参数分别是就是@数组名、替换起始下标,替换元素个数,替换为的序列。

    例子中就是从下标为5,的5个数分别替换为21-25.


    #!/usr/bin/perl
    # 定义字符串
    $var_test = "runoob";
    $var_string = "www-runoob-com";
    $var_names = "google,taobao,runoob,weibo";
    # 字符串转为数组
    @test = split('', $var_test);
    @string = split('-', $var_string);
    @names = split(',', $var_names);
    print "$test[3]
    "; # 输出 o
    print "$string[2]
    "; # 输出 com
    print "$names[3]
    "; # 输出 weibo

    这个演示的就是如何将字符串转换为数组,使用split函数,第一个参数是分隔符,第二个就是$字符串。

    那么如何将数组转换为字符串呢?使用join函数即可,参数是类似的,第二个参数是@字符串。

    #!/usr/bin/perl
    # 定义字符串
    $var_string = "www-runoob-com";
    $var_names = "google,taobao,runoob,weibo";
    # 字符串转为数组
    @string = split('-', $var_string);
    @names = split(',', $var_names);
    # 数组转为字符串
    $string1 = join( '-', @string );
    $string2 = join( ',', @names );
    print "$string1
    ";
    print "$string2
    ";

    #!/usr/bin/perl
    # 定义数组
    @sites = qw(google taobao runoob facebook);
    print "排序前: @sites
    ";
    # 对数组进行排序
    @sites = sort(@sites);
    print "排序后: @sites
    ";

    使用sort函数进行对数组的排序,是根据ascii值来排序的,所以大小写对其是有影响的。


    #!/usr/bin/perl
    @odd = (1,3,5);
    @even = (2, 4, 6);
    @numbers = (@odd, @even);
    print "numbers = @numbers
    ";

    可以合并数组,在参数里放2个数组即可。

    #!/usr/bin/perl
    @list = (5,4,3,2,1)[1..3];
    print "list 的值 = @list
    ";

    在建立数组的时候,可以在后面加上一个范围,表示读取指定范围的元素:

    list 的值 = 4 3 2

    //感觉这个功能可以的,有点奇怪。

    8.创建哈希的3种方法

    #!/usr/bin/perl
    %data = ('google', 'google.com', 'runoob', 'runoob.com', 'taobao', 'taobao.com');
    %data1 = ('google'=>'google.com', 'runoob'=>'runoob.com', 'taobao'=>'taobao.com');
    %data2 = (-google=>'google.com', -runoob=>'runoob.com', -taobao=>'taobao.com');
    print "$data{'google'}
    ";
    print "$data1{'runoob'}
    ";
    print "$data2{-google}
    ";

    1.直接是第一个元素是key,第二个元素是value。这是默认的。

    2.使用=>来确定key和value。

    3.使用-和=>来确定key和value,这种key是不能有空格的。

    4.注意print没有括号,还有访问hash元素不是[]而是{}!!!而且只能使用key来访问,//这个好像在语言里都是通过这个访问的。

    #!/uer/bin/perl
    %data = (-taobao => 45, -google => 30, -runoob => 40);
    @array = @data{-taobao, -runoob};
    print "Array : @array
    ";

    读取哈希值到数组,使用@哈希数组名{key1,key2}这样子。

    #!/usr/bin/perl 
    %data = ('google'=>'google.com', 'runoob'=>'runoob.com', 'taobao'=>'taobao.com');
    @names = keys %data;
    print "$names[0]
    ";
    print "$names[1]
    ";
    print "$names[2]
    ";

    使用keys %哈希名,可以获取哈希数组中所有的关键字!并且存到一个数组里!厉害了!

    那么同样的道理,获取所有的value,就是values %哈希数组名了。

    #!/usr/bin/perl
    %data = ('google'=>'google.com', 'runoob'=>'runoob.com', 'taobao'=>'taobao.com');
    if( exists($data{'facebook'} ) ){
    print "facebook 的网址为 $data{'facebook'} 
    ";
    }
    else
    {
    print "facebook 键不存在
    ";
    }

    判断某一元素是否存在,使用exists函数($data{'测试值'}),

    #!/usr/bin/perl
    %data = ('google'=>'google.com', 'runoob'=>'runoob.com', 'taobao'=>'taobao.com');
    @keys = keys %data;
    $size = @keys;
    print "1 - 哈希大小: $size
    ";
    @values = values %data;
    $size = @values;
    print "2 - 哈希大小: $size
    ";

    如何获取哈希数组的大小呢?通过获取keys或者values即可。

    根据上下文来获取keys数组的大小,还是比较简单的。

    #!/usr/bin/perl
    $data{'facebook'} = 'facebook.com';
    # 删除哈希中的元素
    delete $data{'taobao'};

    向哈希中添加元素直接添加就可以了,好像所有的编程语言都是这样的;删除哈希中的元素,使用delete $哈希数组名{'关键字'}。

     9.

  • 相关阅读:
    Java随笔
    Java随笔
    Java随笔
    CF920E Connected Components?(并查集)
    CF1227F1 Wrong Answer on test 233 (Easy Version)(dp)
    Nginx上传文件限制
    Nginx代理---请求头
    Django中Model操作(数据库表名修改/列名修改/数据筛选过滤)
    Django中创建数据库报错:ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '=utf8' at line 1解决方案
    如何实现加入收藏、设为首页、保存到桌面的方法功能
  • 原文地址:https://www.cnblogs.com/BlueBlueSea/p/9700593.html
Copyright © 2011-2022 走看看