perl 简明教程 perl教程集合
作者:mdxy-dxy 发布时间:2023-08-08 19:58:12
前言:perl是什么,干什么用的?perl原来设计者的意图是用来处理 字符的,80%的强项是处理字符,当然其它的很多都可以。现在很多网页也是用perl的,通常需要CGI环境,比如 $char =~ /语言/ ,意思是查找含有“语言”这两个字的字符串。它还能做unix和linux系统管理,文件内容处理(基于awk和sed等工具的功能),其他好多你想做的事。
一、perl环境配置
1.获取perl
Perl通常位于/usr/local/bin/perl或/usr/bin/perl中。你可以在Internet用匿名FTP免费得到它,如ftp://prep.ai.mit.edu/pub/gnu/perl-5.004.tar.gz
2.安装过程为:
(1)解压:
$gunzip perl-5.004.tar.gz
$tar xvf - <perl-5.004.tar.gz
(2)编译:
$make makefile
(3)放置:
将编译生成的可执行文件拷贝到可执行文件通常所在目录,如:
$copy <compiled excutable file> /usr/local/bin/perl
3.运行
用文本编辑器编辑好你的Perl程序,加上可执行属性:$chmod +x <program>就可以执行了:$./<program>。如果系统提示:"/usr/local/bin/perl not found",则说明你没有安装成功,请重新安装。
注:你的程序的第一行必须为#!/usr/local/bin/perl(perl所在位置)。
4注释:
注释的方法为在语句的开头用字符#,如:
# this line is a comment
注:建议经常使用注释使你的程序易读,这是好的编程习惯。
二、常量、变量等问题
1.单引号与双引号
双引号内的字符串中支持简单变量替换 如:$text = "This text contains the number $number.";
双引号内的字符串中支持转义字符
单引号字符串与双引号字符串有两个区别,一是没有变量替换功能,二是反斜线不支持转义字符。
2.重复和联结
重复:print "t" x 5 (会输出5个t,注意:其中x为英文字母小写x)
联结:$a.="bc" (相当于连等于)
3.简单变量、数组、列表
简单变量:用$声明,如:$a="hello";
数组:用@声明,如:@arr=('a','b','c');
列表:列表是包含在括号里的一序列的值,可以为任何数值,也可为空,如:(1, 5.3 , "hello" , 2),空列表:()
三、文件操作
1.打开文件:如open (MYFILE, "file1") || die ("Could not open file");MYFILE为声明的文件句柄,file1为文件名/文件路径,整行代码意为:如果打开失败,则输出"Could not open file";
关闭文件:当文件操作完毕后,用close(MYFILE); 关闭文件。
2.读文件
语句$line = <MYFILE>;从文件中读取一行数据存储到简单变量$line中并把文件指针向后移动一行。<STDIN>为标准输入文件,通常为键盘输入,不需要打开。
语句@array = <MYFILE>;把文件的全部内容读入数组@array,文件的每一行(含回车符)为@array的一个元素。
#!/usr/bin/perl
open(MYFILE,'1.txt');
@arr = <MYFILE>;
print @arr;
3.写文件
形式为:
open(OUTFILE, ">outfile");
print OUTFILE ("Here is an output line.\n");
注:STDOUT、STDERR为标准输出和标准错误文件,通常为屏幕,且不需要打开。
4.判断文件状态
1、文件测试操作符
语法为:-op expr,如:
if (-e "/path/file1") {
print STDERR ("File file1 exists.\n");
}
文件测试操作符
操作符 | 描述 |
-b | 是否为块设备 |
-c | 是否为字符设备 |
-d | 是否为目录 |
-e | 是否存在 |
-f | 是否为普通文件 |
-g | 是否设置了setgid位 |
-k | 是否设置了sticky位 |
-l | 是否为符号链接 |
-o | 是否拥有该文件 |
-p | 是否为管道 |
-r | 是否可读 |
-s | 是否非空 |
-t | 是否表示终端 |
-u | 是否设置了setuid位 |
-w | 是否可写 |
-x | 是否可执行 |
-z | 是否为空文件 |
-A | 距上次访问多长时间 |
-B | 是否为二进制文件 |
-C | 距上次访问文件的inode多长时间 |
-M | 距上次修改多长时间 |
-O | 是否只为“真正的用户”所拥有 |
-R | 是否只有“真正的用户”可读 |
-S | 是否为socket |
-T | 是否为文本文件 |
-W | 是否只有"真正的用户"可写 |
-X | 是否只有"真正的用户"可执行 |
注:“真正的用户”指登录时指定的userid,与当前进程用户ID相对,命令suid可以改变有效用户ID。 |
例:
unless (open(INFILE, "infile")) {
die ("Input file infile cannot be opened.\n");
}
if (-e "outfile") {
die ("Output file outfile already exists.\n");
}
unless (open(OUTFILE, ">outfile")) {
die ("Output file outfile cannot be opened.\n");
}
等价于
open(INFILE, "infile") && !(-e "outfile") &&
open(OUTFILE, ">outfile") || die("Cannot open files\n");
四、模式匹配:
1.概念:模式指在字符串中寻找的特定序列的字符,由反斜线包含:/def/即模式def。其用法如结合函数split将字符串用某模式分成多个单词:@array = split(/ /, $line);
2.匹配操作符 =~、!~
=~检验匹配是否成功:$result = $var =~ /abc/;若在该字符串中找到了该模式,则返回非零值,即true,不匹配则返回0,即false。!~则相反。
五、控制结构
(1)、条件判断:if()elseif()else();
(2)、循环:
1、while循环
2、until循环
3、for循环
4、针对列表(数组)每个元素的foreach循环
open(MYFILE,'1.txt');
@arr = <MYFILE>;
foreach $str (@arr){
print $str;
}
5、do循环
6、循环控制:退出循环为last,与C中的break作用相同;执行下一个循环为next,与C中的continue作用相同;PERL特有的一个命令是redo,其含义是重复此次循环,即循环变量不变,回到循环起始点,但要注意,redo命令在do循环中不起作用。
7、传统的goto语句:goto label;
(3)、单行条件
语法为statement keyword condexpr。其中keyword可为if、unless、while或until,如:
print ("This is zero.\n") if ($var == 0);
print ("This is zero.\n") unless ($var != 0);
print ("Not zero yet.\n") while ($var-- > 0);
print ("Not zero yet.\n") until ($var-- == 0);
虽然条件判断写在后面,但却是先执行的。
六、子程序
(1)、定义
子程序即执行一个特殊任务的一段分离的代码,它可以使减少重复代码且使程序易读。PERL中,子程序可以出现在程序的任何地方。定义方法为:
sub subroutine{
statements;
}
(2)、调用
调用方法如下:用&调用
&subname;
...
sub subname{
...
}
七、文件系统:与unix紧密相关,
OTHER:
管道:可以将前一执行的结果作为后面的参数,比如
env | grep EDITOR
就可以删选出环境变量中EDITOR的值


猜你喜欢
- 在输出代码行中,加入“index=False”如下:m_pred_survived.to_csv("clasified.csv&q
- 前言本文主要讲述numpy数组的计算与转置,讲相同尺寸数组的运算与不同尺寸数组的运算,同时介绍数组转置的三种方法。numpy数组的操作比较枯
- 一、框架架构二、项目目录结构三、框架功能说明解决痛点:通过session会话方式,解决了登录之后cookie关联处理框架天然支持接口动态传参
- 分形几何学的基本思想:客观事物具有自相似性的层次结构,局部和整体在形态,功能,信息,时间,空间等方面具有统计意义上的相似性,称为自相似性,自
- 简单演示import matplotlib.pyplot as pltimport numpy as np# 从[-1,1]中等距去50个数
- 目录1 请求和响应1.1 请求1.2 响应2 视图2.1 基于APIView写接口2.2 基于GenericAPIView写的接口2.3 基
- 一、view实现计数在apiviews.py中加入以下内容from ApiTest.models import ApiTestfrom dj
- %有哪几种含义?查找手册翻看《The Python Libary Reference》python库指南中附录index部分(P1899):
- 简介 SQL Server 2014提供了众多激动人心的新功能,但其中我想最让人期待的特性之一就要算内存数据库了。去
- PHP 中的 Interface 是一种非常重要的特性,它允许开发人员定义一组规范或者约束,以确保类之间的互操作性和兼容性。在本文中,我们将
- 1.添加文本标签 plt.text()用于在绘图过程中,在图像上指定坐标的位置添加文本。需要用到的是plt.text()方法。&em
- session的本质使用cookie来实现。原理大概是:http 带来服务端提前设置 cookie,服务端拿到标示用户身份的cookie,
- 本文实例为大家分享了UDP实现文件传输的具体代码,供大家参考,具体内容如下tcp进行文件传输看这里–python实现TCP文件接发这里实现的
- 本文实例讲述了Python实现的质因式分解算法。分享给大家供大家参考,具体如下:本来想实现一个其它的基本数学算法问题,但是发现在实现之前必须
- 这个操作在numpy数组上的操作感觉有点麻烦,但是也没办法。例如 a = [[1,2,3], [4,5,6], [7,8,9]]取 a 的
- 本文实例为大家分享了Vue实现简单跑马灯特效的具体代码,供大家参考,具体内容如下效果:点击按钮让文字动起来,点击停止按钮让文字停止知识点:s
- 微软 Office 提供基于 COM 接口的编程。Python 通过 pywin32 可以方便地调用各组件。如果下载和安装 pywin32
- 前言随着圣诞的到来,大家纷纷@官方微信给自己的头像加上一顶圣诞帽。当然这种事情用很多P图软件都可以做到。但是作为一个学习图像处理的技术人,还
- 如下所示:#简单来说 LabelEncoder 是对不连续的数字或者文本进行编号from sklearn.preprocessing imp
- 这篇文章主要介绍threading模块中的主类Thread的一些主要方法,实例代码如下:''' Crea