搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
你好赵伟
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
绘制箱线图 与 异常值的输出 - 基于Python matplotlib库(1)_箱线图的异常值输出
2
自然语言处理(NLP)—— 神经网络自然语言处理(Neural NLP)基础知识
3
深入理解机器学习:概念、步骤、分类与实现_列举出两种以上机器学习什么什么过程
4
一个初级运维工程师对于运维工作的一些浅显认知_设备运维工程师算不算研发岗
5
数据结构(五)----特殊矩阵的压缩存储_压缩存储结构
6
粤港澳青少年信息学创新大赛 Python 编程竞赛(初中部分知识点整理)_粤港澳青少年信息大赛初中python题目及答案
7
深度学习图像处理04:图像分类模型训练实战——动物分类_动物分类数据集
8
【VirtualBox】--- 从零开始搭建 Ubuntu系统 超详细
9
MySql个人学习资料_mysql学习资料
10
AI 大模型 | LLM 大型语言模型 VS 多模态模型_大语言模型和多模态模型
当前位置:
article
> 正文
Perl语言简介_perl脚本的名字
作者:你好赵伟 | 2024-06-20 02:42:10
赞
踩
perl脚本的名字
什么是Perl?
Perl是一个能用来完成大量不同任务的编程语言。可以用来解开一个文件并打印一份报告,或者将一个文本文件转换成另一种格式。Perl为相当复杂的问题提供了一系列的工具,包括系统编程。
用Perl写的程序叫脚本(Perl scripts),而perl程序(perl program)通常是指名字叫做perl的程序,它是用来执行脚本的。
Perl是解释型(不是编译型)语言。这样,运行一个脚本,和运行一个相应的C程序来讲,要花费相当多的CPU时间。但是,现在的计算机速度越来越快,写一个C程序花的时间比写一个Perl脚本多,从而总的来讲,反而节省了你的时间。
Hello world!
我们还是来写一个Hello world脚本。通过它来介绍Perl脚本的编写和运行的一些最基本的东西。
现在开始:
[Jobs /]cat >;hello
#!/usr/bin/perl
print "Hello world!/n";
[Jobs /]chmod a+x hello
[Jobs /]./hello
Hello world!
[Jobs /]
注解:
1. 用cat命令创建一个叫hello的文件,它包含一个很简单的Perl脚本。通常可以用别的编辑器来创建脚本。
2. 第一行脚本是, #!/usr/bin/perl。它表示脚本是由perl程序来运行的。它是一个必须的前缀。/usr/bin/perl部分是perl程序的路径名。不同的安装,路径名是不同的。
3. 随后是相应的Perl脚本,这里仅有一行。这一行是很好理解的,其中/n代表newline(换行)。在Perl的字符串,控制字符通常使用这种与C语言类似的表达法,/后跟一个字符。
4. 程序写完之后,用chmod命令让这个包含脚本的程序可以执行。在Linux里,文件创建是通常是不可执行的,必须明确的改变文件的属性。在这个命令中all用户能execute(执行)这个文件。
5. 最后,键入脚本文件名就能运行这个脚本了。 ./表示是在Jobs目录下的那个文件。
注意,在Perl中,和C语言一样,一个语句是一个分号结尾的。
数据结构和变量
在Perl中一个变量的值可以是一个数字或字符串或其它别的东西。变量是没有类型的。你可以将一个字符串赋给一个变量,以后,你可以将一个数字赋给同一个变量。
变量在使用前不需要申明。
试图使用一个没有初始化的变量,你用的实际上是0或者一个空的字符串或真假值中的false(假),具体是哪个值,由上下文决定。在使用命令行开关时,表示要求Perl解释器能给出告警信息,比如,-w报告使用了没有定义的值。
Perl has three data structures:
Perl有三种数据结构:scalars,scalars数组,scalars联合数组,就是"hashes"。
Scalar变量名通常以$符号开始,如$myvar。
数组通常以@符号开始,如@myarray。
Hashes的名字通常以%开始,如%myhash。
另外,子程序的名字以&开始,通常这个&可以省略。
上面的符号可以和英语中的单词相对应:
$ 和 the,
@ 和 these or those,
% 和 these or those,
& 和 do。
名字是区分字母的大小写的。比如$foo和$Foo是两个不同的变量。
如果有个数组,如@myarr,你可以用方括号来索引它的某个成员。但此时@要变成$,如$myarr[5]。因为这个成员是一个scalar变量。
也可以组成一个数组,如@myvar[5..10],它是一个数组,是由@myvar组成的,它们的索引分别在5和10之间。
数组的索引是整数,从0开始,和C语言一样。
Hashes,能用字符串来索引它的成员,因此,索引方法不同。对于hashes,索引用大括号表示,如$myhash{'foobar'}。同样,被索引的成员是scalar,必须用$开始。
每种变量都有他们自己的名字空间。因此$foo和@foo是不同的变量名。同样$foo[1]是@foo的一部分,而不是$foo的一部分。另外,有两个预定义的变量,$_和@_。必须知道$_[2]是@_中的一个成员。
一个数组事实上是一个值的列表。在Perl中,可以用以下方法来生成一个列表,
(2, 3, 7, 42)
一个列表可以赋给一个数组变量,如
@foo = (2, 3, 7, 42);
列表在Perl中是很重要的,因为许多操作的结果是列表。
例子:显示的行带行号
下面的例子显示scalar变量的使用。同时也介绍了Perl的几个基本特征。
这个脚本打印出它的输入,但输出的每行有一个行号开始:
#!/usr/bin/perl
$line = 1;
while (<>;) {
print $line, " ", $_;
$line = $line + 1; }
Scalar变量$line是行记数。在一开始,它被初始化为1,在每次处理一行的循环中它的值加上一个1。
循环结构的形式如下:
while (<>;) {
处理一行输入 }
尽管看上去有点神秘,它确实非常便于使用。你不必关心真正的输入操作;就用上面的结构就可以了,用预定义的变量$_来引用输入行。
print语句包含三个参数,一个是打印行号,一个是打印一个空格,另一个是打印整个的输入行。没有打印换行,因为变量$_中已经包含了换行符了。
实际上,可以将代码写的更加简洁:
#!/usr/bin/perl
$line = 1;
while (<>;) {
print $line++, " ", $_; }
这里,语句中包含了$line++ 而不仅仅是$line, 因为在Perl中,和C语言类似,你可以通过给变量加一个运算符来表示对一个变量加1操作。
如果希望行号是右对齐的,比如行号显示在固定的5个字符这样的区域内,左边的用空格来填充。这相当简单,只需用下面这条语句代替print语句:
printf "%5d %s", $line++, $_;
Perl脚本的输入
Perl脚本从那里得到输入值?默认的,即在输入没有任何参数的情况下,输入来自Linux中所谓的输入流。通常是用户的键盘。
通常希望脚本从文件中输入。简单的将文件名作为命令行参数,也就是,脚本文件的名字是命令的时候。这样,举个例子,如果你已经写好了这个简单的脚本,并命名为lines,你可以用下面的方法来测试:
[Jobs /]./lines lines
1 #!/usr/bin/perl
2 $line = 1;
3 while (<>;) {
4 print $line++, " ", $_; }
[Jobs /]
你可能写了几个文件名字作为命令行参数,比如:
lines foo bar zap
这意味着脚本lines将文件foo, bar, 和 zap 作为一个已经合并的单个文件来处理。
例子:拆分输入行
在Perl中,你可以不用详细地写代码就能将数据分成几个域。只需指定你想做什么。
比如,语句:
split;
首先将当前输入行分解成有空格分隔的域,然后将这些域分别赋值给预定义数组@_。随后,就可以使用索引来存取这些域。变量$#_ 包含域的数目:它的值是域的数目减1。
假设,举个例子,有一些数据,每行包括几个由空格分隔的项,如果写一个Perl脚本,将每行的第二项挑选出来。可以写下面这样的一个脚本来实现。
#!/usr/bin/perl
while (<>;) {
split;
print $_[1], "/n"; }
要注意的是由于在Perl中索引值从0开始,因此用一个值为1的索引是引用第二个域。
控制结构
Perl有丰富的控制结构。理论上,通常也很实际,可以用if语句来实现分支结构,while语句来实现循环结构。
在控制结构中,实现有条件执行的动作,或循环执行的动作做为blocks。一个块是一个有大括号围起来的一系列语句。注意,括号是必须的,这和C语言略有不同。
最简单的if语句的格式是:
if(expression)block
它表示,先计算表达式的值,如果表达式的结果为真的话,就执行块语句。
比如,语句if($i < 10) {$j = 100;} ,如果$i的值小于10的话,$j的值就设为100。
一个有两个分支的语句的格式如下:
if(expression)block1 else block2
首先计算表达式的值,如果为真,执行block1,否则执行block2 。
while语句的格式如下:
while(expression)block
先计算表达式的值,如果为真,执行块里面的语句,然后,再计算表达式的值,直到表达式的值为假,否则,还要执行块里的语句。
下面的脚本是一个使用while语句的简单例子,它将输入行进行分解,按相反的方向把各个域打印出来。
#!/usr/bin/perl
while (<>;) {
split;
$i = $#_;
while($i >;= 0) {
print $_[$i--], " "; }
print "/n";
}
在内部的while循环,控制是建立在使用一个辅助的变量$i上的。它的值初始化成对最后一个域的引用,并且不断递减,直到为0,此时,所有的域都处理完毕。运算符>;=的意思是大于或等于。
字符串处理
Perl有强大的字符串处理工具。比如,通常希望将输入数据转换成小写,很简单:
tr /A-Z/a-z/;
这可以理解成:将范围是A到Z的所有字符转换(translate)成范围是a到z的字符。
这个操作是在变量$_上,也就是当前输入行上进行的。如果你想将它用到变量$foo上,你必须这样写:
$foo =~ tr /A-Z/a-z/;
有可能这样的表达式很怪,但一旦熟悉之后,Perl的字符串工具很容易使用。
例子:文件重命名
Linux用户需要将以后缀,比如.for结尾的文件的名字都重新命名成另一个后缀,比如.f。通常没有直接的命令来完成这一个任务。如果你想要用mv *.for *.f ,通常这样并不能解决问题。
但可以用Perl来写一个简单的脚本来实现:
#!/usr/bin/perl
while(<*.for>;) {
$oldname = $_;
s//.for$//.f/;
rename $oldname, $_;
}
while语句表示它只对*.for的名字进行处理。首先将找到的要处理的文件名,把匹配的文件名赋给$_变量。
在循环体内,首先将$_变量所指的文件名保存到变量$oldname 里。随后,对它进行替换。
最后,用替换好的名字来重命名文件。rename是Perl的一个内建函数,他有两个参数。我们可以用另一条语句来代替它:
system "mv $oldname $_";
它是通过调用操作系统命令来实现的。
另外,需要注意的是语句s//.for$//.f/;中的两个/。如果该语句中没有/,则成为:
s/.for$/.f/;
这个语句就不对了。如果遇到zapfor.for ,就会产生如下替换:za.f.for。因为符号.代表任意字符。所以.for的意思是只要在字符串中包含for,就做替换。因此会产生上述结果。为了表示.,就必须用到换码序列,用/.来表示符号.。这与C语言中的概念类似。
小结
Perl语言的语法和C语言有些相同之处,比如控制结构,语句的;结尾,换码序列等等。但它们也有明显差别。C语言是编译型的,C程序的运行效率高。Perl语言是解释型的,脚本的运行效率比较低。但是Perl语言的综合性较高,编写一些功能较复杂的程序所化的时间比较短。另外,Perl的变量是没有数据类型。
参考资料
1、MU Campus Computing的Introduction to Perl or, Learn Perl in Two Hours 。
2、The Perl Language Home Page 包括一些有关Perl的有用的信息,如Perl FAQ。
3、在Windows 95和NT上使用Perl语言。
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/你好赵伟/article/detail/738360
推荐阅读
article
Perl
语言
入门学习笔记1_
cpm
perl
...
Perl
语言
入门学习笔记简介
Perl
的四大特点:如何取得
Perl
编写
Perl
程序编写
Perl
所需编辑器编写最简单的Hel...
赞
踩
article
Perl
入门学习_
perl
入门学习...
Perl
入门学习_
perl
入门学习
perl
入门学习
Perl
的入门学习遵照基本语法与特...
赞
踩
article
Perl
语言入门
学习
_
perl
学习
...
Perl
是一种高级的、动态的、解释型的通用编程语言,由Larry Wall于1987年开发。它是一种非常灵活和强大的语...
赞
踩
article
Perl
语言
入门学习_
perl
语言
入门...
Perl
语言
学习 – 入门篇入门篇包括但不限于以下内容
Perl
简介版本历史第一个
Perl
程序
Perl
的基本数据类型P...
赞
踩
article
数字IC验证
:
Perl
快速入门
_
ic
验证
perl
...
写在前面
:
最近实习需要学习
perl
的基础知识,由于目前只需要了解
perl
基本语法,看懂即可,不做深入学习,因此写下本文,...
赞
踩
article
Perl
调试
器
教程:
调试
Perl
程序
的
10
个简单步骤...
进入 perl
调试
器
后,可以使用以下选项。h 或 hh – 帮助页面c – 从当前执行继续向下直到断点,否则直到子例程...
赞
踩
article
Perl
完整教程_
perl
教程...
Perl
是 Practical Extraction and Report Language 的缩写,可翻译为 “实用...
赞
踩
article
Perl
教程_
perl
教程...
Perl
教程,
Perl
是 Practical Extraction and Report Language 的缩写,...
赞
踩
article
perl
简明
教程
perl
教程
集合...
MYFILE为声明的文件句柄,file1为文件名/文件路径,整行代码意为:如果打开失败,则输出"Could not op...
赞
踩
相关标签
Perl
程序设计
perl
学习
开发语言
script
scala
编程语言
Perl 教程