zoukankan      html  css  js  c++  java
  • Perl-常用知识点归纳

    ======================================================================

    正则表达式-匹配

    1、匹配:m/ /(与qw//操作一样可以使用任何成对的分隔符,如(),<>,{},[],!!,还可以简写为//,略去m)
    2、=~ 表示匹配,!~ 表示不匹配。如:if ($string =~ m/RegExp/)。如果不加=~,则默认对$_进行匹配,如:if (/RegExp/)
    3、模式匹配修饰符

    修饰符 描述 用例
    i 忽略大小写 =~ m/RegExp/i
    s 多行模式, . 可匹配换行符 =~ m/Reg.*Exp/s 可匹配 Reg Exp

    4、正则表达式变量

    符号 含义
    $` 匹配部分的前一部分字符串
    $& 匹配的字符串
    $' 还没有匹配的剩余字符串

    实例:

    $string = "welcome to runoob site.";
    $string =~ m/runoob/;
    print "匹配之前的字符串: $`
    ";
    print "匹配的字符串: $&
    ";
    print "匹配之后的字符串: $'
    ";
    

    输出:

    匹配之前的字符串: welcome to
    匹配的字符串: runoob
    匹配之后的字符串:  site.
    

    5、通配符和量词

    表达式 描述 示例
    . 通配符,匹配除换行符外的所有字符
    x? 匹配 0 次或一次 x 字符串
    x* 匹配 0 次或多次 x 字符串
    x+ 匹配 1 次或多次 x 字符串
    .* 匹配 0 次或多次的任何字符
    .+ 匹配 1 次或多次的任何字符
    {m} 匹配刚好是 m 个 的指定字符串 (RegExp){3}
    {m,n} 匹配在 m个 以上 n个 以下 的指定字符串 (RegExp){1,2}
    {m,} 匹配 m个 以上 的指定字符串 (RegExp){2,}

    6、模式中的分组

    () 表示分组
    fred+ 匹配fredddd
    (fred)+ 匹配fredfred

    7、选择符

    (|) 匹配左边的或者右边的
    left( | )+right left和right间存在一个或多个空格或制表符

    8、字符集合

    表达式 描述 示例
    [] 匹配符合 [] 内的字符 [abc]
    [^] 匹配不符合 [] 内的字符 [^abc]
    [0-9] 匹配所有数字字符
    d 匹配所有数字字符
    [^0-9] 匹配所有非数字字符
    [a-z] 匹配所有小写字母字符
    [A-Z] 匹配所有大写字母字符
    w 字母,数字和下划线
    w+ 匹配单词
    s+ 匹配空白符,等价于[f ],表示格式符、制表符、换行符、回车符以及空格符

    9、锚位符

    表达式 描述 示例
    ^ 匹配字符串开头的字符 ^RegExp
    $ 匹配字符串结尾的字符 RegExp$
     匹配以英文字母,数字为边界的字符串 /fred/可以匹配fred,但是不能匹配frederick,“全字匹配”
    B 匹配不以英文字母,数值为边界的字符串
    ^s*$ 匹配空行

    10、匹配变量

    $string = "left middle, right";
    if($string =~ /(left).*(right)/){
    	print("第一个匹配变量是:$1
    ");
    	print("第二个匹配变量是:$2
    ");
    }
    

    ======================================================================

    正则表达式-替换

    1、s/ / /
    2、实例:下面的程序将句子中的标点都替换为空格,并将单词存储在数组中

    $string = "Hi, I'm Wang Tao. Nice to meet you!";
    $string =~ s/[,'.!]/ /g;  # 将标点符号替换成空格
    $string =~ s/s+/ /g; # 将多个空白符替换成1个空格
    print("$string
    ");
    my @array = split(' ',$string);
    foreach $value (@array){
    		print("$value
    ");
    }
    

    ======================================================================

    数组

    https://www.runoob.com/perl/perl-arrays.html
    1、Perl 数组一个是存储标量值的列表变量,变量可以是不同类型。
    2、数组变量以 @ 开头
    3、访问数组元素使用 $ + 变量名称 + [索引值] 格式来读取。
    4、创建数组:数组变量以 @ 符号开始,元素放在( )内,也可以以 qw 开始定义数组, 元素放在[]、//、% %等内。
    5、数组遍历:一种方式是使用foreach,另一种是使用for加索引
    6、数组的基本操作实例:

    # ----------------------------------------------------------------
    #          example 5: 数组基本操作
    # ----------------------------------------------------------------
    my @array = (1, 2, 3);  # 使用@ 和 ()创建,元素间需要加逗号
    foreach $value(@array){  # 使用foreach遍历
    	print("$value
    ");
    }
    
    my @array = qw/1 2 3/; # 使用@ 和 qw/ / 创建,元素间不要加逗号,如果加上逗号会把元素当作:'1,'、'2,'、'3'
    foreach $value(@array){
    	print("$value
    ");
    }
    另外,在创建字符串数组时,可采用:
    my @array = ("hello", "dog");
    my @array = qw(hello dog);
    
    my $size = @array;
    print("The size of array is $size
    ");
    for($i=0;$i<$size;$i++){ # 使用for加索引遍历
    	print("$array[$i]
    ");
    }
    

    7、按序列输出的数组形式,格式为 起始值 + .. + 结束值

    # ----------------------------------------------------------------
    #  example 6: 按序列输出的数组形式,格式为 起始值 + .. + 结束值
    # ----------------------------------------------------------------
    @array = (1..10);
    print("@array
    ");
    

    8、数组排序:sort @array
    9、使用split将字符串转化为数组,使用join将数组转化为字符串。实例:

    # ----------------------------------------------------------------
    #example 7: 使用split将字符串转化为数组,使用join将数组转化为字符串
    # ----------------------------------------------------------------
    
    # 定义字符串
    $var_string = "www-runoob-com";
    $var_names = "google,taobao,runoob,weibo";
     
    # 字符串转为数组
    @string = split('-', $var_string);
    @names  = split(',', $var_names);
    
    print("转成的数组为:
    ");
    print "@string
    ";
    print "@names
    ";
     
    # 数组转为字符串
    print("转成的字符串为:
    ");
    $string1 = join( '-', @string );
    $string2 = join( ',', @names );
     
    print "$string1
    ";
    print "$string2
    ";
    

    10、将文本用push命令放到数组

    while(<IN>){
      chomp;
      push(@in_array,$_);
      $line_num++;
      print("$_
    ");
    }
    print("line_num:$line_num
    ");
    

    ======================================================================

    哈希

    1、哈希是 key/value 对的集合。
    2、Perl中哈希变量以百分号 (%) 标记开始。
    3、访问哈希元素格式:${key}
    4、判断哈希中某个 key 是否存在可以使用:exists $hash{$key}
    5、实例:输入姓,输出名

    # ----------------------------------------------------------------
    #          example 1: 输入姓,输出名
    # ----------------------------------------------------------------
    %name = ('Li'=>'Fei','Liu'=>'Qiang','Zhang'=>'Ming','Tian'=>'Hua');
    while(<STDIN>){
    	chomp;
    	if(exists $name{$_}){  # 判断输入的键值是否存在
    		print("$name{$_}
    ");
    	}
    	else {
    		print("The input key does not exist!
    ");
    	}	
    }
    

    6、keys 函数会返回此 hash 的所有 keys, values 函数将返回所有的 values。实例:

    # ----------------------------------------------------------------
    #        example 2: 获得哈希所有的键值和value,同时得到其大小
    # ----------------------------------------------------------------
    
    my %hash = ("a"=>1,"b"=>2,"c"=>3);
    my @k = keys %hash;
    my @v = values %hash;
    print("keys:@k
    ");
    print("values:@v
    ");
    
    $size = @k;
    print("The size of hash is $size
    ");
    

    7、使用each或foreach可对hash进行遍历,each %hash 将从 hash 中返回一个 key/value 对。实例:

    # ----------------------------------------------------------------
    #          example 3: 遍历哈希
    # ----------------------------------------------------------------
    my %hash = ("a"=>1,"b"=>2,"c"=>3);
    # each 函数
    while(($key,$value) = each %hash){
    	print("$key=>$value
    ");
    }
    
    # foreach 函数,且使用sort排序
    foreach $key (sort keys %hash){
    	print("$key=>$hash{$key}
    ");
    }
    
    

    8、增删元素:通过赋值即可增加元素,通过delete即可删除元素。实例:

    # ----------------------------------------------------------------
    #          example 4: 增删元素
    # ----------------------------------------------------------------
    my %hash = ("a"=>1,"b"=>2,"c"=>3);
    $hash{'d'}=4; #增加一个元素d=>4
    delete $hash{'a'}; #删除元素a=>1
    foreach $key (sort keys %hash){
    	print("$key=>$hash{$key}
    ");
    }
    
    

    9、实例
    Perl-晶晨2021届笔试题:https://www.cnblogs.com/wt-seu/p/13504324.html
    Perl-统计文本中各个单词出现的次数(NVDIA2019笔试):https://www.cnblogs.com/wt-seu/p/12368915.html

    其他

    各进制数表示
    八进制以 0 开头, 十六进制以 0x 开头, 二进制 0b 开头,Perl 允许你使用下划线来区分
    Perl-二进制数(补码)转十进制数和十六进制数:https://www.cnblogs.com/wt-seu/p/13534918.html
    perl进制转换:https://www.cnblogs.com/blueicely/archive/2013/02/01/2888631.html

    数字操作符
    加(+), 减(-), 乘(*), 除(/) ,模数运算符(%),次方(**)

    转义字符
    换行 回车 制表符

    字符串操作符
    . 用于字符串连接,如“hello”. “world” # 同于 “helloworld”

    一些有用的脚本

    例化Verilog模块

    open(IN,"<","module_head_input.txt") or die "input doesn't exist!";
    open(OUT,">","instance_output.txt") or die "output doesn't exist!";
    open(OUT2,">","wire_output.txt") or die "output doesn't exist!";
    
    while(<IN>){
      chomp;
      $line = $_;
      if($line=~m/modules+(w*)/){       # module name
        print("// --------------- $1 ----------------
    ");
        print(OUT2 "// --------------- $1 ----------------
    ");
      }
      
      elsif($line=~m/(input|output|inout)s+(.*),/){  # input tb_in,  input [7:0] tb_in,
        print("wire $2;
    ");
        print(OUT2 "wire $2;
    ");    
      }
      
      elsif($line=~m/(input|output|inout)s+(.*)/){  # input tb_in_lat ---last input
        print("wire $2;
    ");
        print(OUT2 "wire $2;
    ");    
      }
      
      elsif($line=~m/^$/){
        print("$line
    ");
        print(OUT2 "$line
    ");
      }
    }
    
    
    close IN;
    close OUT2;
    
    
    open(IN,"<","module_head_input.txt") or die "input doesn't exist!";
    open(OUT,">","instance_output.txt") or die "output doesn't exist!";
    
    while(<IN>){
      chomp;
      $line = $_;
      if($line=~m/modules+(w*)/){       # module name
        print("$1 u_$1
    ");
        print(OUT "$1 u_$1
    ");
      }
      
      elsif($line=~m/(input|output|inout)s*.*s+(w*),/){  # input tb_in,  input [7:0] tb_in,
        print("	.$2($2),
    ");
        print(OUT "	.$2($2),
    ");    
      }
      
      elsif($line=~m/(input|output|inout)s*.*s+(w*)/){  # input tb_in_lat ---last input
        print("	.$2($2)
    ");
        print(OUT "	.$2($2)
    ");  
      }
    
      else{
        print("$line
    ");
        print(OUT "$line
    ");
      }
    }
    
    close IN;
    close OUT;
    
    

  • 相关阅读:
    在Qt中使用sleep
    Qt深入:不能不知道的Type、Attribute和Flags
    浅析mysql 共享表空间与独享表空间以及他们之间的转化
    taobao月报 ---mysql汇总
    slave_net_timeout
    LINUX 内核算杂 七杂 八
    Hadoop可视化与交互式工具:Zeppelin和Hue
    看开源代码利器—用Graphviz + CodeViz生成C/C++函数调用图(call graph)
    python 学习笔记十四 jQuery案例详解(进阶篇)
    MySQL如何选择float, double, decimal
  • 原文地址:https://www.cnblogs.com/wt-seu/p/13091552.html
Copyright © 2011-2022 走看看