Perl脚本 — 数字IC验证
文章目錄
- 一、基本語法
- 1.1 標量
- 1.1.1 數字
- 1.1.2 字符串
- 1.1.3 標量的定義
- 1.1.4 標量的賦值
- 1.2 列表與數組
- 1.2.1 定義列表與數組
- 1.2.2 數組的索引
- 1.2.3 關于 qw 的使用
- 1.2.4 關于$_的使用
- 1.2.5 數組的存取
- 1.3 上下文
- 1.4 子程序
- 1.4.1 定義子程序
- 1.4.2 傳遞參數
- 1.4.3 靜態變量
- 二、輸出
- 2.1 讀取文件
- 2.2 輸出文件
- 三、哈希(hash)
- 3.1 常用的 hash 操作
- 3.2 特殊的 hash
👉 perl中使用正則表達式進行匹配:正則表達式
👉 解析register表格:perl腳本解析 register 表格
一、基本語法
1.1 標量
????Perl中兩個最基本的變量,即標量和列表。標量可以是數字和字符串。
1.1.1 數字
數字的類型包含如下:
| 整數 | 如:122222 或 12_2222 ,允許下劃線進行連接。 |
| 浮點數 | 如:345.25 ;1.25e5 ,其中 e 為10的指數。 |
| 非十進制整數 | 0225 ,0開頭表示 8 進制; 0xff ,0x開頭表示16進制; 0b1011_0000,0b開頭表示二進制; |
數字之間的比較,如:>、>=、>>、==、!=。
1.1.2 字符串
字符串分為單引號字符串和雙引號字符串,其含義是不同的。
????1)雙引號字符串支持變量的內插;
????2)雙引號字符串中反斜線 \ 表示轉移字符,其含義包括:
| \ | 轉移字符,如$ 為$字符 ,"表示 " 。?? 注意:這里單引號字符串的用法相同。 |
| \n | 換行 。?? 注意:單引號字符串中,\n 沒有換行的含義,就只是單純的 \n 字符串含義。 |
| \r | 回車 |
| \t | 制表符,Tab |
| \U | 接著的字符均大寫,直到 \E 出現 |
| \u | 下一個字符大寫 |
| \L | 接著的字符均小寫,直到 \E 出現 |
| \l | 下一個字符小寫 |
| \E | 結束\U、\L |
常用的字符串操作符包括:
????1)拼接操作符 “.” ,將字符串拼接起來。如"who".“are”.“you?\n” ,等價于"who are you?\n" 。
????2)重復操作符“x”,如 “ab"x3 ,等價于"ababab” 。
字符串的比較操作符,如下:
1.1.3 標量的定義
????標量以 $ 符號開頭,后面接 Perl 標志符。標志符由字符、數字、下劃線組成,必須以字母或下劃線開頭。注意避開Perl中的一些特殊內置變量,如:
| $ARGV | 指定命令行參數。 |
| $_ | 默認輸入和模式匹配的內容,即如果不指定接受輸入的變量或執行模式匹配的字符串時,默認為這個變量。 |
| $n | 包括$1、$2、… ,匹配的第n個字符串 |
| $$ | 運行當前Perl 腳本程序的進程號 |
| $@ | 命令eval的錯誤消息,如果為空,則表示上一次eval 命令執行成功。 |
| $? | 存放進程結束的狀態。 |
| @_ | 傳給子程序的參數列表。 |
| @ARGV | 傳給Perl 腳本的命令行參數列表。 |
| @INC | 導入模塊時需要搜索的目錄,告訴Perl去哪個目錄下去找這些導入的模塊。 |
| $" | 如 $" = “,”,將字符串的內參空格變成逗號“,” 。 |
| $# | 在數組中,表示數組的最大索引 |
1.1.4 標量的賦值
????常見的方式包括:
my $value = 10; $value = $value + 100; # 等價于 $value += 100;用 my的方式聲明一個變量。在Perl 中使用 use strict時,變量就必須要用 my的方式聲明。
my $str = "little"; $str = $str."verifier"; # 等價于 $str .= "verifier";1.2 列表與數組
1.2.1 定義列表與數組
數組和列表的區分其實沒有那么嚴格,如下,分別創建數組和列表:
# 數組 $arr[0] = "little"; $arr[1] = "verifier"; $arr[2] = undef; ($arr[0],$arr[1],$arr[2]) = ("little","verifier"); #等價于上面三行代碼#列表或數組 @array = ("little","verifier"); #列表 ($str1,$str2,$str3) = ("little","verifier",undef); # 三個字符串標量組成的列表print @arr; # 輸出: littleverifier print @array; # 輸出: littleverifier print "@arr"; # 輸出: little verifier print "@array"; # 輸出: little verifier ,字符串的內參包含一個空格符號注意:
- 如果用了索引,那就要用美元 $ 符號;
- 如果對數組整體做操作,就要用 @ 符號;
- print "@array"的方式,字符串內參會在每個元素之間加一個空格。
- 如果數組或列表的對應位置沒有標量,那就默認是undef。
1.2.2 數組的索引
遍歷數組,如下:
@array = ("little","verifier"); $array[10] = "strong"; # 中間空的索引默認會為 undef $" = "," ; # 將字符串的內參空格變成逗號“,” 。print "@array"; #輸出: little,verifier,,,,,,,,,strong print $array[$#array]; #輸出: strong print $array[1]; #輸出: verifier print $array[2]; #輸出: undef print $array[-1]; #輸出: strong注意:
- $" = “,” ,將字符串的內參空格變成逗號“,” 。
- 索引 $#array 和 -1 都表示最后一個索引,同理 -2 表示倒數第二個。
1.2.3 關于 qw 的使用
使用qw來簡化產生一個數組,如下:
@arr = qw \ \; # 空的數組 @arr1 = qw(little verifier); #相當于 @arr1 = ("little","verifier");注意:
- qw可以使用各種符號,如!# \ {}…,但注意必須是成對的。
1.2.4 關于$_的使用
先看下面幾種等價的遍歷方式,其輸出結果都是相同的。如下:
@str = qw /aaa bbb ccc ddd eee /; foreach $str (@str){ # @str代表待遍歷的的數組print $str."/n"; # $str代表每個循環的變量 } @str = qw /aaa bbb ccc ddd eee /; foreach (@str){ #省略變量不寫print $_."/n"; }從上面可以看出,$_是一個默認的變量。
1.2.5 數組的存取
常用的操作符,如下:
| pop | 從末端取出,即索引最大值處 | $str = pop(@arr); |
| push | 從最末端存入 | push(@arr,0); #向數組中存入0 push@arr,0; #可以省略括號; push@arr,0..10 ; # 存入一個列表0~10 |
| shift | 從首端取出,即索引值的最小值處 | $str = shift@arr; |
| unshift | 從首端存入 | unshift @arr,@str; #添加一個數組str到數組arr中 |
| reverse | 將元素反序后存到另一個變量中,效果即123變321。 | $str = reverse(@arr); $arr = reverse@arr; #將原來arr數組反序 |
| sort | 按照ASCI碼順序從小到大排序 | @num = qw/ 1 10 2 20 9 / @out = sort @num; # 輸出是 1 10 2 20 9 @out = reverse sort @num; # 輸出是 9 20 2 10 1 |
1.3 上下文
????上下文環境咋Perl中是很重要的,且具有很強迷惑性。如下:
情況一:
解釋上面代碼:@str是一個數組或列表,那么@sorted所在的的上下文就是一個數組或列表上下文
情況二:
@str = qw/ little verifier / $num = 42 + @str; # 輸出:44 ,42 + 2 = 44解釋上面代碼:
- 42是一個標量,$num是一個標量,那么這個上下文就是標量上下文,所以@str就必須是一個標量。
- 當數組或列表變成標量時,即其含有幾個元素。這里@str的標量是2 。
情況三:
@str = qw/ aabb ccdd / @out1 = reverse @str; #列表上下文,輸出:ccdd aabb $out2 = reverse @str; #標量上下文,輸出:ddccbbaa解釋上面代碼:當列表或數組變為標量時,會將所有元素變成一個字符串。
情況四:
@str = qw/ little verifier / print scalar @str ; 輸出:2解釋上面代碼:scalar 可以將數組或列表變成一個標量,數組變成標量時即為數組中的元素個數。
情況五:
$line = <STDIN>; # 標量上下文,可以輸入一行 chomp (@arr = <STDIN>); # 列表上下文,可以輸入多行print "$line\n"; print "@arr\n";解釋上面代碼:
- <STDIN> 是鍵盤輸入的操作符,可以接收鍵盤輸入的一行內容
- chomp 可以將字符串中的換行符去掉。
1.4 子程序
1.4.1 定義子程序
my @sheet = qw / /; # 定義一個空數組 my $id = 0;sub parse_ods{ # 定義子程序my $para = 8; # 子程序的私有變量$sheet[$id] = $para * $id ; # 給 @sheet 賦值$id += 1; # 返回值,相當于return $id++ }$temp = &parse_ods; # 調用子程序注:用“&+子程序名”的方式去調用子程序是表示只調用我自己定義的子程序,不去調用預定義好的子程序。
1.4.2 傳遞參數
默認參數:@_ 。Perl會將子程序調用時的參數默認存放在 @_ 數組中,可以通過 $_[0] , $_[1] ,… ,$_[n] 來訪問第一個參數、第二個參數、…第n個參數。如下:
use strict; # 告訴Perl用嚴格的方式編譯,所有的變量必須要用my明確聲明,防止寫錯。sub parse_xml{ print $_[0] ; # 輸出:10print "@_" ; # 輸出:10verifier }sub out_xml1{my($frt,$sec) = @_; # 聲明兩個局部變量來接受傳遞的參數print $frt ; # 輸出:10print $sec ; # 輸出:verifier }sub out_xml2{foreach (@_) {print $_; # $_是遍歷@_時產生的變量} }&parse_xml(10,"verifier"); #調用時傳遞兩個參數 &out_xml1(10,"verifier"); &out_xml2(10,"verifier");1.4.3 靜態變量
子程序中也可以聲明靜態變量,如下:
use strict;sub state_test{state $num = 1;$num += 1;print $num; #每調用一次這個子程序, $num 就加1 }&state_test;二、輸出
這里常用的輸入和輸出(如print 和printf)就不提了,主要側重于文件句柄的使用。如下:
2.1 讀取文件
open SRC_FILE,"<","chip_reg.ods" ; #注意:舊版本還可以寫成 open SRC_FILE,"<chip_reg.ods" ; 的形式while(<SRC_FILE>){print $_; } close SRC_FILE;open 操作時是有返回值得,成功返回1,失敗返回0。如下:
if(!open SRC_FILE,"<","chip_reg.ods") {die "OPEN failed : $! /n" }; close SRC_FILE;2.2 輸出文件
open DEST_FILE,">","my_trans.sv" ; # 如果文件不存在會自動地創建 print DEST_FILE "hello world!\n"; close DEST_FILE;如果要繼續在文件中追加內容,要用 >> 符號。如果繼續用 > 符號會覆蓋原先的內容。如下;
open DEST_FILE,">>","my_trans.sv" ; # 如果文件不存在會自動地創建 print DEST_FILE "hello little verifier!\n"; close DEST_FILE;三、哈希(hash)
哈希就是一個鍵值對,一個鍵(key)對應一個值(value),根據鍵可以索引值。這里的值可以是數組,也可以是標量。如下:
$score {"zhangsan"} = 1; $score {"lisi"} = "shazi";print $score{"zhangsan"}; # 輸出:1 print $score{"lisi"}; # 輸出:shazi哈希的賦值方式,還可以如下:
%score = ("zhangsan",1."lisi","shazi"); %score = ("zhangsan" => 1,"lisi" => "shazi");3.1 常用的 hash 操作
| keys | 返回哈希中的所有鍵的數組 | my @k = keys %hash # 列表上下文,返回hash中的所有鍵 my $k = keys %hash # 標量上下文,返回hash中的所有鍵的個數 |
| reverse | 將 key 變成 value ,value 變成 key | my %k = reverse %hash |
| each | 從hash中取一對數據(key value)出來 | while( ($key,$value) = each %hash ) { ...} |
| exists | 檢查hash中的某個key是否存在對應的value | if ( exists $hash{"zhangsan"}) { ...} |
| delete | 根據key,刪除該鍵值對 | delete $hash{"zhangsan"}; |
3.2 特殊的 hash
%ENV 是一個存儲環境變量的特殊 hash 。如:
print "$ENV{PATH}\n";總結
以上是生活随笔為你收集整理的Perl脚本 — 数字IC验证的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [vue] vue-loader是什么?
- 下一篇: [html] Standards模式和