日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Perl脚本 — 数字IC验证

發布時間:2023/12/9 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 = qw/ little verifier / @sorted = sort @str;

解釋上面代碼:@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 變成 keymy %k = reverse %hash
each從hash中取一對數據(key value)出來while( ($key,$value) = each %hash ) { ...}
exists檢查hash中的某個key是否存在對應的valueif ( exists $hash{"zhangsan"}) { ...}
delete根據key,刪除該鍵值對delete $hash{"zhangsan"};

3.2 特殊的 hash

%ENV 是一個存儲環境變量的特殊 hash 。如:

print "$ENV{PATH}\n";

總結

以上是生活随笔為你收集整理的Perl脚本 — 数字IC验证的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。