IC脚本之perl

        Perl 是一种功能丰富的计算机程序语言,运行在超过100种计算机平台上。IC flow 的 流传的古老版本大多是也是使用这种语言,这里会对Perl的常用知识点进行总结。 

Note: 所有的语句必须以 “ ;”结尾;所有的数据必须先定义才可以使用;

Getopt::Long获取命令行参数用法

1.   变量

        Perl中的数据类型分为变量,数组(类似于python的list),hash(类似于python中的字典)。可以分别通过 my $var; my @array; my %hash; 定义数据结构。

变量包含数字变量以及字符串变量;如果变量未被赋值,它是一个undef 变量, 可以通过define($var) 判断其结构。

1. if (defined($a))  #判断a变量是否被使用赋值。
2. 字符串拼接
   $a."hello"    通过" . "拼接
   join($a,"hello" 通过join函数拼接。
   $a.="hello"     通过" .="将字符串拼接到另一个字符串,但是改变了字符串内容。
   
使用Perl 5.10及以上版本的say函数(需要在脚本开头加入use feature 'say';或者use 5.010;):
say $a."hello"  ; 会把拼接的字符串打印到命令行,并自动换行。    

数组结构

push  @array  data  # 将data存储在数组array的最后一个位置,这里的data可以是任意数据结构。
pop  @array   out_data # 从array数组弹出最后一个位置的元素,并赋值给out_data.

unshift  @array  data  函数会在数组的开头添加一个或多个元素。
shift @array   out_data 函数会从数组的开头移除一个元素,并返回这个被移除的元素

hash结构

        哈希是Perl中的第三种基本数据类型。与数组一样,哈希包含了许多个标量。数组与哈希的差别是:哈希是按照名字来访问它们的标量的,而不是像数组那样使用数字标号进行访问。

哈希元素包含两个部分,即一个关键字和一个

my %hash_test;
$hash_test{"a"}="APPLE"  #通过$hash_name{"key"}读写变量
keys %hash_test  #返回hash_test的所有键。
values %hash_test #返回hash_tes的所有values
delete $hash_test{"a"} #删除a 的元素

2. 分支结构

主要是if-else结构

if-else 结构
if (condition) {
	commands1;
} else {
	commands2;
}

if-elsif- else 结构
if (condition1) {
	commands1;
} elsif (condition2) {
	commands2;
} else {
	commands3;
}

3. 循环结构

        只要表达式为True,while循环就会重复执行该代码段

while (condtion) {
    expression;
} 

for 循环

for (var; condition; incr or decrease) {
	commands;
}


eg
@boy=qw(Greg Peter Bobby);
for($index=0;$index<@boy;$index++){
    print "My favorite is $boy[$index]\n"
}

foreach 经常用于数组的遍历

#!/usr/bin/perl -w
my $b ;
@boy=qw(Greg Peter Bobby);
foreach $b (@boy) {
    print $b."\n";
}

        针对循环结构还存在 last , next语句控制循环进程。last 则是满足某一条件后退出本次循环loop等价于C语言的break; next 则是满足某一条件事,不在执行本次循环的循环体而跳回循环体,等价于C语言continue。 

4. 函数

        在 Perl中,用户定义的函数称为子例程。与 Perl的内置函数一样,用户定义的函数也可以拥有参数,并且可以将值返回给调用者。

#这里的arg默认输入参数也可以没有,直接使用函数体外的全局遍历
subn fun_name (arg1, arg2, arg3) {
    expression; 
}

#调用函数体
&subname (arg1, arg2, arg3);  
subname arg1, arg2, arg3;

5. 文件操作

        open(filehandle,pathname)     open函数将文件句柄作为它的第一个参数,将路径名作为第二个参数。路径名用于指明要打开哪个文件。

#通过 "<” 设定read模式, ">"设定写模式。
open(MYFILE, "</home/liuye/Scripts/perl/file1.txt") || die "$!";
my $line;
#通过while获取文件内容
while ($line = <MYFILE>) {
    chomp($line);
    print ("$line");
}
#通过foreach获取文件内容
my @lines=<MYFILE>
foreach $line ( @lines) {
    chomp($line);
    print ("$line");
}
close (MYFILE);

6. 正则表达式

元字符

元字符
. 圆点用于匹配除了换行符外的任何单个字符
\ 在字符前面加上一个反斜杠,使它失去“元”的含义
+ 用于使前面的字符与后面的字符至少匹配一次
* 前面的字符可以进行 0次或多次匹配
? 用于使前面的字符进行 0次或一次匹配
.* 用来匹配任何东西
{n,m}  根据需要的具体次数进行匹配,n是匹配的最小次数,m是匹配的最大次数

位置锚定符
"^"代表起始位置,“$"代表结束位置。
\b  字符边界
\B  非字符边界

或
| : hell|HELL 表示匹配hell或者HELL。


捕获
(?:pattern)	     匹配 pattern 但不获取匹配结果
(?=pattern)		正向肯定预查,标注pattern前面
(?!pattern)		正向否定预查
(?<=pattern)	反向肯定预查
(?<!pattern)	反向否定预查
(?<var_name>pattern)  命名匹配,这种就可以将pattern匹配的内容存放到var_name变量

=~ 绑定操作符,它用于将正则匹配操作与哪个变量匹配起来。

Example
if ($a =~ m/pattern/ ) #判断 a变量是否匹配设定的pattern。
$a =~ s/old/new/  ;#将 a变量字符串中old字符变成new字符。

常用代码

1. 文件读取

use strict ;
use warnings;
use Getopt::Long;
GetOptions ( 
    'log=s' => \my $log,
    'opt=s' => \my $opt
) or usage();

my $name; 
my $age;
my $birthday;

if (defined($log)) { #判断log变量是否存在
     print($log."\n"); 
}

open $FILE "<filename" or die "Failed to open filename" 
#此时文件的每一行内容存储在内部变量 $_, 循环体内默认对这个变量操作
while (<FILE>) {
    chomp; #用于移除字符串末尾的换行符(通常是 \n)或其他指定的字符
    next if(/$\s*(#|\/\/) or /^\s*$/); #跳过注释行和空白行
    if (/(?<name>\d+)\s+(/(?<name>\w+)\s+(?<birthday>) { 
          print("match \n"); 此时匹配的内容存储到三个字段中
          $name=$+{name};   通过$+{字段} 来引用匹配的变量 
          $age=$+{age};
          $birthday=$+{birthday};
    }
}
close(FILE);

sub usage {
    print("usate is now \n");
}

2. 对于一些死循环或者缓缓比较久的函数使用键盘终止,可通过异常信号捕捉的形式来处理。

1 linux系统的异常事件信号存储在SIG环境变量,perl通过仿真这些变量来执行
  相应的异常处理函数。
  $SIG{'INT'}= \&func;
  $SIG{'TERM'}= \&func;
  $SIG{'QUIT'}= \&func;
这里通过 \& 传递func函数的引用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/920728.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MEMS硅麦克风应用电子烟雾化产业稳步爬升,耐高温、 防油、防酸、防腐蚀等性能优势和可实现自动化贴片及极高的一致性等特性使其必将成为主流

全球范围内&#xff0c;电子烟行业正处于快速发展的阶段。随着消费者健康意识的提升和对传统烟草制品替代品需求的增加&#xff0c;电子烟市场获得了显著的增长。然而&#xff0c;伴随而来的监管挑战和消费者期待的变化&#xff0c;也促使行业不断进行技术创新和产品优化。特别…

双因子认证:统一运维平台安全管理策略

01双因子认证概述 双因子认证&#xff08;Two-Factor Authentication&#xff0c;简称2FA&#xff09;是一种身份验证机制&#xff0c;它要求用户提供两种不同类型的证据来证明自己的身份。这通常包括用户所知道的&#xff08;如密码&#xff09;、用户所拥有的&#xff08;如…

快慢指针应用---环型链表的应用

1.题目--判断链表是否成环 已经了解了快慢指针的应用原理&#xff0c;引申&#xff1a;用快慢指针去判断链表是否成环。 题解 简而言之&#xff0c;在fast和slow指针遍历的这种情况下&#xff0c;如果链表是成环的&#xff0c;那么在循环遍历了两次后&#xff0c;fast指针就会…

三、计算机视觉_06YOLO基础知识

1、YOLO概述 1.1 定义 YOLO&#xff08;You Only Look Once&#xff09;是一种流行的对象检测和图像分割模型&#xff0c;由华盛顿大学的 Joseph Redmon 和 Ali Farhadi 于 2015 年推出&#xff0c;因其高速和准确性而迅速受到欢迎 在目标检测领域&#xff0c;传统方法&…

Python Matplotlib 数据可视化全面解析:选择它的七大理由与入门简介

Python Matplotlib数据可视化全面解析&#xff1a;选择它的七大理由与入门简介 本文介绍了Matplotlib这一强大而灵活的数据可视化工具&#xff0c;涵盖其基本概念、独特优势以及为何在众多Python绘图库中脱颖而出。Matplotlib具有广泛的社区支持、高度自定义能力、多样的绘图类…

【Spring Boot】用 MyBatis 实现数据的 CRUD

用 MyBatis 实现数据的 CRUD 1.创建项目 & 引入依赖2.实现数据表的自动初始化3.实现实体对象建模4.实现实体和数据表的映射关系5.实现增加、删除、修改和查询功能6.配置分页功能6.1 增加分页支持6.2 创建分页配置类 7.实现分页控制器8.创建分页视图 本篇博客将通过 MyBatis…

数据结构-二叉树_堆

目录 1.二叉树的概念 ​编辑1.1树的概念与结构 1.2树的相关语 1.3 树的表示 2. ⼆叉树 2.1 概念与结构 2.2 特殊的⼆叉树 2.2.2 完全⼆叉树 2.3 ⼆叉树存储结构 2.3.1 顺序结构 2.3.2 链式结构 3. 实现顺序结构⼆叉树 3.2 堆的实现 3.2.2 向下调整算法 1.二叉树的概…

独家原创 | SCI 1区 高创新预测模型!

往期精彩内容&#xff1a; 时序预测&#xff1a;LSTM、ARIMA、Holt-Winters、SARIMA模型的分析与比较 全是干货 | 数据集、学习资料、建模资源分享&#xff01; EMD变体分解效果最好算法——CEEMDAN&#xff08;五&#xff09;-CSDN博客 拒绝信息泄露&#xff01;VMD滚动分…

IDEA+Docker一键部署项目SpringBoot项目

文章目录 1. 部署项目的传统方式2. 前置工作3. SSH配置4. 连接Docker守护进程5. 创建简单的SpringBoot应用程序6. 编写Dockerfile文件7. 配置远程部署7.1 创建配置7.2 绑定端口7.3 添加执行前要运行的任务 8. 部署项目9. 开放防火墙的 11020 端口10. 访问项目11. 可能遇到的问题…

Arcgis 地图制作

地图如下,不同历史时期&#xff1a;

【K8S系列】Kubernetes 中如何调试imagePullSecrets配置详细步骤介绍

调试 imagePullSecrets 配置是确保 Kubernetes 能够成功拉取私有镜像所需的关键步骤。以下是详细的调试步骤和建议。 1. 确认 imagePullSecrets 配置 首先&#xff0c;确保在 Pod 的 YAML 配置中正确引用了 imagePullSecrets。其基本结构如下&#xff1a; apiVersion: v1 kin…

山东春季高考-C语言-综合应用题

&#xff08;2018年&#xff09;3.按要求编写以下C语言程序&#xff1a; &#xff08;1&#xff09;从键盘上输入三个整数a、b、c&#xff0c;判断能否以这三个数为边构成三角形&#xff0c;若可以则计算机三角形的面积且保留两位小数&#xff1b;若不可以则输出“不能构成三角…

UE5 第一人称射击项目学习(二)

在上一章节中。 得到了一个根据视角的位置创建actor的项目。 现在要更近一步&#xff0c;对发射的子弹进行旋转。 不过&#xff0c;现在的子弹是圆球形态的&#xff0c;所以无法分清到底怎么旋转&#xff0c;所以需要把子弹变成不规则图形。 现在点开蓝图。 这里修改一下&…

如何实现点击目录跳转到指定位置?【vue】

需求&#xff1a;实现目录点击跳转到指定位置&#xff0c;点击后直接定位到指定模块 效果&#xff1a; 实现方法&#xff1a; &#xff08;1&#xff09;a标签跳转 普通使用&#xff1a; <!DOCTYPE html> <html><head><title>a-Demo</title>&l…

使用chrome 访问虚拟机Apache2 的默认页面,出现了ERR_ADDRESS_UNREACHABLE这个鸟问题

本地环境 主机MacOs Sequoia 15.1虚拟机Parallels Desktop 20 for Mac Pro Edition 版本 20.0.1 (55659)虚拟机-操作系统Ubuntu 22.04 服务器版本 最小安装 开发环境 编辑器编译器调试工具数据库http服务web开发防火墙Vim9Gcc13Gdb14Mysql8Apache2Php8.3Iptables 第一坑 数…

deepin系统下载pnpm cnpm等报错

deepin系统下载pnpm cnpm等报错 npm ERR! request to https://registry.npm.taobao.org/pnpm failed, reason: certificate has expired 报错提示证书过期&#xff0c;执行以下命令 npm config set registry https://registry.npmmirror.com下载pnpm npm install pnpm -g查…

零基础上手WebGIS+智慧校园实例(1)【html by js】

请点个赞收藏关注支持一下博主喵&#xff01;&#xff01;&#xff01; 等下再更新一下1. WebGIS矢量图形的绘制&#xff08;超级详细&#xff01;&#xff01;&#xff09;&#xff0c;2. WebGIS计算距离&#xff0c; 以及智慧校园实例 with 3个例子&#xff01;&#xff01;…

Matlab 答题卡方案

在现代教育事业的飞速发展中&#xff0c;考试已经成为现代教育事业中最公平的方式方法&#xff0c;而且也是衡量教与学的唯一方法。通过考试成绩的好与坏&#xff0c;老师和家长可以分析出学生掌握的知识多少和学习情况。从而老师可以了解到自己教学中的不足来改进教学的方式方…

【实操之 图像处理与百度api-python版本】

1 cgg带你建个工程 如图 不然你的pip baidu-aip 用不了 先对图片进行一点处理 $ 灰度处理 $ 滤波处理 参考 import cv2 import os def preprocess_images(input_folder, output_folder):# 确保输出文件夹存在if not os.path.exists(output_folder):os.makedirs(output_fol…

Python小游戏28——水果忍者

首先&#xff0c;你需要安装Pygame库。如果你还没有安装&#xff0c;可以使用以下命令进行安装&#xff1a; 【bash】 pip install pygame 《水果忍者》游戏代码&#xff1a; 【python】 import pygame import random import sys # 初始化Pygame pygame.init() # 设置屏幕尺寸 …