【Linux/脚本/芯片学习】Perl学习
Title:Perl学习
-
个人学习策略
主用python.
看懂perl 和 tcl 即可。
-
之前的存货
开始搬砖后,整理 ”网络发布版笔记“ 的心思寡淡了好多,可能就是被工作榨干的原因8…
但今天至少得赶个1024节日… ( ̄▽ ̄)"~
1 介绍
-
是什么
Perl (Practical Extraction and Report Language),实用报表提取语言。
偏向文本处理的脚本语言。
-
脚本的作用
实现一些自动化工作:如写个tcl,由当前系统时间自动生成唯一的版本号;设计一个脚本进行数据格式转换;用脚本实现个人HDL编码习惯的module模板;
脚本语言是文本文件,解释执行。
-
安装
perl的编译器有 ActiveStatePerl 和 Strawberry Perl,前者轻量级,后者包含些第三方库CPAN,自己定,以下以后者为例;
-
下载语言包位置:Perl Download
-
检查系统环境变量path是否更新:
cmd中输入:
perl -v;有显示则成功,否则自己加环境变量到path中:
把perl 安装地址
.\perl\bin加到path环境变量里即可.(重新验证得重开cmd)
-
-
各种脚本语言的对比:perl、tcl、python
大部分Linux都自带了这三种脚本语言。
-
正则表达式
三个都支持正则:但perl支持最好最简洁、py兼容Perl的标准但要re库、tcl用的是另一套标准。
-
Python
语言风格:类似matlab;
优势:写一些开发用个人的小工具,有更丰富、成熟的库而更有优势。
缺陷:EDA工具支持性不好;分为 2.7 和 3.x 俩不兼容的版本,有点麻烦;
后缀:
.py -
Tcl
语言风格:类似C库,被C调用很方便;
优势:EDA支持性好;
EDA工具内置的console都集成、支持 tcl,如:ModelSim、Vivado、Quartus;
故tcl能更好地拓展EDA工具的功能和使用。
缺陷:扩展库不够多而且老;
后缀:
.tcl -
Perl
语言风格:类似shell的拓展;
优势:深度集成正则,故很适合文本处理;优势之一是丰富的第三方库(CPAN)
缺陷:库的质量难以保证;对文本外的开发没啥优势;且py也支持perl的正则标准,够用了。
perl的缺陷是更偏向文本处理、库的稳定性也不够。
后缀:
.pl或.plx
-
2 使用/运行
-
关键文本头
#!自己的perl目录/bin/perl -w-w表示开启warning.不知道目录,linux下可用
which perl查; -
Linux下的系统指令和Windows下不同,Windows下是dos指令;
-
运行
执行文件:
perl 文件名.plcmd中执行单行:
perl -e 语句
3 语法(看完后查阅用)
3.1 叙述性语法
碎片语言风格
-
行尾要有分号
; -
不关心空白;
-
弱语言类型,类似makefile.
-
语句块的
{}不能省略,不像C的单句可省。 -
运算符同C,
多了个乘幂
**;逻辑非用的是not;逻辑或、逻辑且,支持and/or也支持&& / ||;支持
+=、++这类的使用;
变量定义和使用
-
定义
标量 用
$;后面正则元字符里还有符号$,勿混淆!- 未定义的变量,直接用
$,那自然是空(不是空格哈).
数组 用
@哈希 用
% - 未定义的变量,直接用
-
使用
使用都是用
$!直接加符号即可,不用括号.e.g. 定义和使用都是
$var;别和makefile弄混了—— makefile使用需要有{},perl不用. -
数值的使用
默认把整数按浮点数存;
$a = 666; $a = 666.66 + 6.6e+6 -0.66; -
数组
#定义 @array = (1,2,3); @str = ( "1", "2", "3"); #使用 print $str[0];# 数组复制 @copy = @array; # 获得数组个数 $len = @array; #取决于等号左边的变量类型 -
哈希
#定义 %data = ('key1' => 1, 'key2' => 2); #使用 print $data{'key1'};
标识符
大小写敏感,同C. —— 字母、数字(不可开头)、下划线.
输出
不会自动换行;用不用括号()都行
print(1..5); #输出 1 2 3 4 5print "xxx"; # 单输出$str="ABC";
print $str, "\n"; #同下
print "$str\n"; #同上,因为会自动转义$num = 6.66;
print("牛哇牛蛙: ",$num, "\n" ); # 多段输出,其实有没有括号无所谓
print "牛哇牛蛙",$num, "\n"; # 也OK.# Error print ($num + "\n"); # + 只能用于数值计算
注释
-
单行
# -
多行
=pod ... =cut
转义
\
大体使用是和 C 一致,多了一些内容:
\u #下个字符,强制大写
\l #下个字符,强制小写\U #后续字符,全部强制大写,用\E结束
\L #后续字符,全部强制大写,用\E结束
\Q #后续非单词字符,强制转义,用\E结束
\E #上述连续行为的结束标志
字符串
可以跨行写内容(输出包含换行符,同原格式);
-
单引号
强制视为文本,不解析转义;
-
双引号
会对串内包裹内容 解析转义;
print "$name 666" #转义
print '$name 666' #不转义,且可多行内容print "123
456" #包含换行符
print '123
456' #同上
混合使用,同python:不用转义,自动夹杂。
-
字符串的拼接
$a = "abc"; $b = "efg"; # 正确的串拼接方式 1 $c = "$a$b"; #别有空格 # 正确的串拼接方式 2 $c = $a.$b;# 错误的串拼接方式 # $c = $a + $b; # + 号只能进行数值计算 # $c = ($a, $b); # 没毛用 -
存储大段原格式字符串文本
用
= << "标志"来存文本,意思是:从下一行开始,俩标志之间夹杂的所有字符都按原格式存入变量中。$str = << "EOF"; EOF 正所谓天下大事,合久必分,分久必合... 很久很久以前... ... EOF print $str; # 就是上面这段文本 -
vstring
用来表示IP这种用 . 隔开的数字;可用v开头即可:
$ip = v192.168.0.1;$但我试了一下,乱码。( ̄▽ ̄)"
-
字符串比较
$a lt $b # 串a < 串b? 成立则1. $a gt $b # 串a > 串b? 成立则1. $a le $b # 串a <= 串b? 成立则1. $a ge $b # 串a >= 串b? 成立则1. $a eq $b # 串a == 串b? 成立则1. $a ne $b # 串a != 串b? 成立则1. $a cmp $b # 串a < 串b,则1;串a == 串b,则0;串a > 串b,则-1;
特殊符号
__FILE__ #当前perl脚本的 文件名
__PACKAGE__ #当前脚本的 包名
__LINE__ #当前 行号
3.2 控制语句
条件语句
-
支持
a= b?c:d;同C.
-
if-elsif-else
是
elsif不是 else if !if() {} elsif() {} else {} -
反人类的 unless
if是真,则执行;unless是假,则执行.
unless(A){} # A为false,才执行 elseif(B){} # 同if-else, B真,才执行 else{} #剩余的 -
switch
switch (){case 1 { print "数字 1" }case "a" { print "字符串 a" }case [1..10,42] { print "数字在列表中" }case (\@array) { print "数字在数组中" }case /\w+/ { print "正则匹配模式" }case qr/\w+/ { print "正则匹配模式" }case (\%hash) { print "哈希" }case (\&sub) { print "子进程" }else { print "不匹配之前的条件" } #对标C的default }
循环语句
-
while / do-while
while() {}do{} while() -
until (和while反着来)
until( A ){ # A 为真,则不执行} -
for
for( ; ; ){} -
foreach
用于数组内的元素迭代.
foreach $a (@list) { #若元素$a 在list中,则执行}
3.3 正则表达
是常用语言中最强大的正则功能。
-
三种基本形式
- 匹配:
m/.../(可简写为//); - 替换:
s/...A.../...B.../; 把A换成B. - 转化:
tr/...A.../...B.../;
与
=~与!~组合使用:=~:匹配.!~:不匹配.
# 匹配 Example $str = "I love studying..."; if( $str =~ /love/ ){ #单句也不能省略 {}print "match"; } elsif( $str !~ /love/ ){print "not match"; }# 替换 Example $str = "I love studying..."; $str =~ s/love/hate/; print "$str\n"; #输出 I hate studying...# 转化 Example $str = "I love studying..."; $str =~ tr/a-z/A-Z/; #小写字符换成大写 print "$str\n"; #输出 I HATE STUDYING... - 匹配:
-
分别可以后接不同的下操作符
i 忽略大小写;
m 多行模式;
s 单行匹配;
o 仅执行一次;
g 全局匹配;
s 产出重复字符;
其他,略了。
-
正则匹配后的内容提取
$` # 匹配部分的前一部分字符串 $& # 匹配成功的字符串 $' # 匹配剩余的字符串 $n # 表正则式中的 第n个小括号 匹配成功的串值,如$1, $2 -
通用的正则元字符与转义字符
类似vim,copy自vim章节:(maybe滞后)
^ #匹配字符串的“开头”;vim中则表行首; $ #匹配字符串的“末尾”,不是换行符哈,是串尾;vim中则表行尾; < #匹配单词首。 > #匹配单词尾。\b #匹配一个单词的边界。 \d #匹配任意数字。 \D #匹配任意非数字字符。 x? #匹配一个可选的 x 字符 (i.e.匹配 1次或 0次)。 x* #匹配0次或者多次 x 字符。 x+ #匹配1次或者多次 x 字符。 x{n} #匹配n个 x字符 x{n,m} #匹配 x 字符,至少 n 次,至多 m 次。 (a|b|c) #要么匹配 a,要么匹配 b,要么匹配 c。 (x) #一般情况下表示一个记忆组 (remembered group)。你可以利用 re.search 函数返回对象的 groups() 函数获取它的值。 . #匹配任意单个字符,换行符\n不算 \s #匹配所有空白符,包括换行 \S #匹配所有非空白符 \w #匹配 字母|数字|下划线 \d\D #表示任意字符,包括换行符 \s\S #也表示任意字符,包括换行符# 以下是几个转义符 \n #1个换行符 \r #1个回车符 \t #1个制表符 \f #1个换页符s# 以下是判断逻辑,需要和 () 联用, # 来截取特定情境下的串,如(?!a|b),不要字符a或字符b. # e.g. 我需要截取 aaabbbccc 中的bbb,则正则表达式为:(?<=aaa).*(?=ccc) ?!pattern #需要后面 不跟pattern的 ?!<pattern #需要前面 不跟pattern的 ?=pattern #需要后面 跟pattern的 ?<=pattern #需要前面 跟着pattern的 ?i #后面字符忽略大小写 ?-i #前面字符忽略大小写
3.4 自练题
-
明辨 变量定义的
$与 正则元字符$$tag = "stone"; $str = "$tag \$tag stone\nLine 2: stone"; $str =~ s/$str$/666/; print #str, "\n"; # 问原串str,以及后输出是什么?#str原串: #stone $tag stone #Line2: stone#输出内容: #stone $tag stone #Line2: 666
相关文章:
【Linux/脚本/芯片学习】Perl学习
Title:Perl学习 个人学习策略 主用python. 看懂perl 和 tcl 即可。 之前的存货 开始搬砖后,整理 ”网络发布版笔记“ 的心思寡淡了好多,可能就是被工作榨干的原因8… 但今天至少得赶个1024节日… ( ̄▽ ̄)"~ 1 介…...
嵌入式实时操作系统的设计与开发(信号量学习)
信号量 除了临界点机制、互斥量机制可实现临界资源的互斥访问外,信号量(Semaphore)是另一选择。 信号量与互斥量的区别 对于互斥量来说,主要应用于临界资源的互斥访问,并且能够有效地避免优先级反转问题。对于信号量…...
python环境安装教程
Python是一种流行的高级编程语言,它简单易学、功能强大,适用于各种应用领域,从Web开发到数据科学和人工智能。在本教程中,我将向您介绍如何安装Python并设置您的开发环境。请注意,以下步骤适用于Windows操作系统。 步…...
【学习笔记】CF1784F Minimums or Medians
首先让 n n n乘上 2 2 2。 考虑枚举最终被删除的位置有哪些。 a i 0 a_i0 ai0表示这个位置被删除, a i 1 a_i1 ai1表示这个位置被保留,设满足 a i 0 a_i0 ai0的前缀长度为 l l l( l l l是偶数), p r e i pre…...
如何系列 如何玩转远程调用之OpenFegin+SpringBoot(非Cloud)
文章目录 简介原生Fegin示例基础契约日志重试编码器/解码器自定义解码器 请求拦截器响应拦截器表单文件上传支持错误解码器断路器指标metrics客户端 配合SpringBoot(阶段一)配合SpringBoot(阶段二)1.EnableLakerFeignClients2.Lak…...
Python学习第2天-安装pycharm
文章目录 前言一、下载二、安装1.选择安装目录2.安装配置 总结 前言 好用的工具可以极大地提高生产力,开发Python推荐使用jetbrains全家桶的pycharm。 一、下载 通过官网下载安装包。 二、安装 1.选择安装目录 2.安装配置 一路Next,安装完成 总结 …...
等电位连接器行业应用综合方案
等电位连接器的原理 等电位连接器的原理是利用气体放电管或压敏电阻等非线性元件,当连接器两端的电位差大于所限峰值电压时,连接器导通,迫使连接器两端不同接地体电位基本相等,消除接地体间放电现象,从而避免了由于地…...
内裤洗衣机有用吗?最好用的四款内衣洗衣机测评
相信很多小伙伴往往会因为懒而不想洗内衣,又或者洗内衣时经常会洗不干净!这时就很有必要入手一台内衣洗衣机了,当我们洗完澡时,顺手把内衣放入洗衣机内,一键启动即可把我们的内衣洗得干干净净!同时还可以为…...
足底筋膜炎能自愈吗
什么是足底筋膜炎 足底筋膜炎是足底的肌腱或者筋膜发生无菌性炎症所致。最常见症状是脚跟的疼痛与不适,压痛点常在足底近足跟处,有时压痛较剧烈,且持续存在。晨起时疼痛感觉明显,行走过度时疼痛感加剧,严重患者甚至站…...
牛客网刷题-(3)
🌈write in front🌈 🧸大家好,我是Aileen🧸.希望你看完之后,能对你有所帮助,不足请指正!共同学习交流. 🆔本文由Aileen_0v0🧸 原创 CSDN首发🐒 如…...
Centos7 安装 Etcd
Github上下载并解压安装包 wget https://github.com/coreos/etcd/releases/download/v3.4.10/etcd-v3.4.10-linux-amd64.tar.gz tar xzvf etcd-v3.4.10-linux-amd64.tar.gz mv etcd-v3.4.10-linux-amd64 /opt/etcd解压后是一些文档和两个二进制文件etcd和etcdctl。etcd是serve…...
powerjob基于springboot2.1.6.RELEASE版本的问题研究
项目背景:基于第三代框架的集成问题,如果对于powerjob不熟悉的朋友,可以参考官方文档PowerJob 简介 语雀 关于语雀 23 日故障的公告 (qq.com) 简单插一句,针对语雀文档故障的心得,数据恢复,完整性&#…...
【AI视野·今日CV 计算机视觉论文速览 第270期】Wed, 18 Oct 2023
AI视野今日CS.CV 计算机视觉论文速览 Wed, 18 Oct 2023 Totally 60 papers 👉上期速览✈更多精彩请移步主页 Daily Computer Vision Papers 4K4D: Real-Time 4D View Synthesis at 4K Resolution Authors Zhen Xu, Sida Peng, Haotong Lin, Guangzhao He, Jiaming …...
uni-app小程序,uview-ui组件样式无法穿透修改的解决办法
1.首先设置以下选项.该选项的作用是让微信小程序允许样式穿透. 在需要改动的文件内加上 options: { styleIsolation: shared } 2.然后再使用vue的样式穿透写法. ::v-deep .类样式{} 或者 /deep/ .类样式{}...
Codeforces Round 515
Portal. C. Books Queries Portal. sol. D. Boxes Packing Portal. 把从左至右删物品转化为从右至左加物品。模拟即可。 #include <bits/stdc.h> using namespace std;const int maxn2e55; int a[maxn];int main() {int n,m,k;cin>>n>>m>>k;for(…...
Linux shell编程学习笔记15:定义数组、获取数组元素值和长度
一、 Linux shell 脚本编程中的数组概述 数组是一种常见的数据结构。跟大多数编程语言一样,大多数Linux shell脚本支持数组,但对数组的支持程度各不相同,比如数组的维度,是支持一维数组还是多维数组?再如,…...
k8s部署kafka,并使用zookeeper做注册中心
kafka在3.x版本后增加KRaft作为自己的注册中心,可以不依赖外部的zk;这里上一篇已经部署好了zk,kafka依然使用zk作为注册中心。 这里使用kafka是为集成zipkin收发微服务接口链路日志数据,只需要部署1个实列即可够用。 编写脚本yam…...
关于Nginx缓存
Nginx缓存 一般情况下系统用到的缓存有三种 服务端缓存: 缓存存在后端服务器,如redis代理缓存: 缓存存储在代理服务器或中间件,内容从后端服务器获取,保存在本地客户端缓存: 缓存在浏览器什么时候会出现3…...
为什么Open3D可视化TensorFlow张量速度超慢
问题描述 在使用Open3D可视化TensorFlow张量表示的点云时速度超慢 原因分析 可能是因为Open3D没有针对tf.Tensor做优化,也可能是tf.Tensor本身没有对张量的操作做优化,所以可能如果要在CPU中计算,numpy可能性能更好。 解决方案 open3d.u…...
使用element-UI Cascader组件,实现第一级单选选,第二级,第三级,子级可以多选
最近开发过程中,遇到需求测一个需求,就是级联选择器,需要多选;但是第一级是单选; 既要单选又要复选。参照网上内容,自己整理了一下功能实现; 如下图: 思路:1.把第一层的…...
基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...
高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...
EtherNet/IP转DeviceNet协议网关详解
一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…...
Caliper 负载(Workload)详细解析
Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...
Linux系统部署KES
1、安装准备 1.版本说明V008R006C009B0014 V008:是version产品的大版本。 R006:是release产品特性版本。 C009:是通用版 B0014:是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存:1GB 以上 硬盘…...
关于easyexcel动态下拉选问题处理
前些日子突然碰到一个问题,说是客户的导入文件模版想支持部分导入内容的下拉选,于是我就找了easyexcel官网寻找解决方案,并没有找到合适的方案,没办法只能自己动手并分享出来,针对Java生成Excel下拉菜单时因选项过多导…...
在 Spring Boot 项目里,MYSQL中json类型字段使用
前言: 因为程序特殊需求导致,需要mysql数据库存储json类型数据,因此记录一下使用流程 1.java实体中新增字段 private List<User> users 2.增加mybatis-plus注解 TableField(typeHandler FastjsonTypeHandler.class) private Lis…...
STM32标准库-ADC数模转换器
文章目录 一、ADC1.1简介1. 2逐次逼近型ADC1.3ADC框图1.4ADC基本结构1.4.1 信号 “上车点”:输入模块(GPIO、温度、V_REFINT)1.4.2 信号 “调度站”:多路开关1.4.3 信号 “加工厂”:ADC 转换器(规则组 注入…...
云原生安全实战:API网关Envoy的鉴权与限流详解
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关 作为微服务架构的统一入口,负责路由转发、安全控制、流量管理等核心功能。 2. Envoy 由Lyft开源的高性能云原生…...
深入解析 ReentrantLock:原理、公平锁与非公平锁的较量
ReentrantLock 是 Java 中 java.util.concurrent.locks 包下的一个重要类,用于实现线程同步,支持可重入性,并且可以选择公平锁或非公平锁的实现方式。下面将详细介绍 ReentrantLock 的实现原理以及公平锁和非公平锁的区别。 ReentrantLock 实现原理 基本架构 ReentrantLo…...
