您现在的位置是:主页 > news > 建筑公司企业愿景平台/湖北seo
建筑公司企业愿景平台/湖北seo
admin2025/5/23 0:18:32【news】
简介建筑公司企业愿景平台,湖北seo,wordpress 插件启用,廊坊市网站建设一提到Perl你会想到什么?黑客三大法宝之一? 与shell并驾齐驱的脚本语言? 生物科研测序? Regular Expression 王牌? Unix管理员专配? 这些头衔是我后来在知乎看到的,那么Perl到底是什么呢?这个问…
一提到Perl你会想到什么?黑客三大法宝之一?
与shell并驾齐驱的脚本语言?
生物科研测序?
Regular Expression 王牌?
Unix管理员专配?
这些头衔是我后来在知乎看到的,那么Perl到底是什么呢?这个问题如果在此之前有人跟我谈及对Perl的印象,我也只会说那好像是脚本语言。
那么现在来说说,Perl能做什么?Python能做的脚本功能Perl基本都能做,
甚至还能完成Python做不到的功能。
如今Perl现在已经是Linux系统安装自带脚本语言,基本每台linux系统都有自带的Shell,Perl,Python,这哥仨也被称为三大常用脚本语言。
前面说了很多优点,其实Perl作为编程语言也有自己的一些缺点:比如封装问题,你写的Perl只能给出源码。
比如可读性问题,其实可读性也没有太差,但就是代码看起来出奇的劝退…各种符号能让你在键盘上奇怪的知识增加。
提到可读性问题,有趣的就来了,作者除了是程序员还是一个语言学家。一个语言学家难道不更重视可读性吗,这里据说Perl作者Larry Wall自己提到关于可读性和性能的取舍:
在可读易用性和执行效率上我选择了后者。
即降低可读性提升该语言执行效率。我对Perl作者这个看法也是一致,如果我来选,我也宁可降低可读性也要保证运行效率。只是可读性有些劝退而已,好东西要放长远来看,比如用代码的时间总比学代码的时间长得多,拉长了后期收益。
本篇文章就是整合了个人学习Perl基础的笔记,主要意义就是分享一些Perl基础,这些基础内容学习之后作为笔记输出发布,为今后方便自己复习的同时也希望能够帮助到其他人。因为看到知乎内Perl语言的文章也较少,对于Perl的推广我也愿意出自己的一份力。
再次强调本文主旨 一文快速入门Perl
(友情提示:如果你没接触过其他编程语言,这篇文章对你来说可能会节奏比较快,不过不用担心,我给出了大量举例代码,可以轻松上手)
0、入门学习与化繁为简
如果要学一门新的语言你会怎么做?
以我举例的话,当我确定工作要用Perl写脚本的时候,我当即就订了Perl三件套。没错,我的答案就是查到评价最高的入门书,买书来看。
大多数人入门Perl大概率就是下图这本骆驼书Learning Perl
《Learning Perl》骆驼书,全书加附录一共363页,很多对不对。买到书后我是如何翻这363页快速翻到Perl入门级?
我的答案是:不用每页都细读,快速翻看目录找共同点和重点来看。我学习新语言的方式是找以往编程语言入门共同点和重点,比如基础变量,控制循环,构建函数共同的重点在哪?
所以根据以上思路,我想到了四个写代码时常用的四个关键点:Hello World!
变量与变量的赋值
控制与循环逻辑语句
子程序函数
其实学习新的编程语言就像爬一个陡坡,这四点就是上升时会遇到的繁琐的问题,我以往经验告诉我,我只要搞懂练透这四点,就可以把一门编程语言的入门基础迅速掌握,在此之后就会如履平地,就像过了陡坡后面就会直接下坡。本篇内容也将上述提到的四点依次讲解。
这样一来,入门就从读363页就变成了只抓四个点看,这就是化繁为简。这里并非踩骆驼书,必须承认骆驼书写的通俗易懂还趣味横生,读完本文完成快速入门的朋友,如果有时间,我是很推荐读一读骆驼书来把基础打扎实,这本是当之无愧的Perl圣经级入门教材。
好了,闲话讲了很多,我们快开始本篇吧!
1、Hello World!
1.1 编写你的第一个Perl代码
一般新开一段编程语言学习之旅,
我们通常最先会遇到什么?
没错" hello,world."
通过打印 hello world既可以让没学过任何编程语言的同学看到相对有些理解的代码,也可以让已经学过一门或多门编程语言的老油条快速了解新语言的输出方式。
#!/user/bin/perl
print"Hello,World!\n";
上面这段代码就是 Perl 版hello world
这里简单说明下
#!是 注释声明,告诉系统和其他开发者这是Perl代码,而且这行注释必须有,且不可以删,因为它声明执行这段代码的程序路径。如果#!这行写错了,很可能返回以下两种shell返回的报错。看到下面这两行,那么大概率就是注释路径找不到要执行代码的Perl程序。
$#"File not found"
$#"bad interpreter"
这是shell返回的报错,
1.2 编译运行
我们在上一小节编写了 hello world,但是要让代码输出,需要编译运行。编译方法就是在命令行terminal切换在代码所在执行文件的路径下输入下面代码框里的命令
(这里$#是命令行开头的意思)
$#perl test_helloworld.pl
关于文件后缀名文件其实也有别的命名方法,但这里还是用pl后缀名吧
$#Hellp,World!
输出为上面内容就代表编译完成并运行成功了。
顺带一提:可能有的小伙伴到了编译不知道怎么弄环境,这里推荐两种方法,免费较慢而付费来的更快,选适合自己的就好。
1免费:
安一个vm ware装虚拟机进到一个Linux系统,ubuntu也好centos也好,小红帽也好,总之搞一个Linux的镜像安上这样你就可以得到Perl的环境了
2付费:买一个云服务器(学生机),只要年龄在25岁之前就可以10块一个月那种。腾讯阿里坚果滴滴都有卖云服务器,哪家便宜去哪就好,10块钱分配出的内存存储,玩Perl基础代码是绝对够用(非广告,无利益相关)
2、变量与赋值
2.1 Perl变量
要赋值,就要先了解Perl的变量,当我了解这部分的时候挺惊讶于变量的设计思路,Perl所有数字的内部变量都是双精度浮点数(double-precision floating-point)有过其他编程语言背景的同学应该明白了,数字全部都是double 跑内存运算,没有整型这个类型。这个设计着实惊艳到我了,全变量用双精浮点可行吗?当然可行呀,1当然可以是1.0000啊,完全没毛病。
还有一点就是非10进制的直接量
Perl 允许使用10进制,也允许其他进制,包括2进制(binary)8进制(octal),16进制(hexadecimal)
他们的表示方法例如:0377# 8进制377,等于10进制的255
0xff # 16进制ff,也等于10进制的255
0b11111111# 2进制的11111111,既10进制的255
然后...这三个作为直接量赋值,对于 Perl 来说是一个数字,这设计真是绝了...
2.2 数字操作符
然后就是数字操作符,常用的加减乘除就不一一列举了,就是小键盘的加减乘除。
最后要补充的就是:Perl支持取模( modulu)操作符 '%',
Perl支持乘幂( exponentiation)操作符 '**'
2.3 字符串
Perl 没有其他编程语言所使用的String 字符串类型字符串对于该语言 仅仅是字符序列你可以print 'hello'
也可以print '☆☆☆☆☆☆'
支持Unicode如果想要在Perl源代码直接使用Unicode字符需要手动加入模块然后编译命令use utf8;
顺带一提:调用模块是用use来写
#!/usr/bin/perl
use strict;
use warnings;
use File::Basename;
print "test success\n"
这段代码可以让你确认模块可否调用,调用成功输出test success。还有一点,那就是最好你的每个perl脚本都带use strict;调用这个模块可以让你更规范的写Perl
2.4 单引号和双引号
字符串的直接量也分为单引号和双引号,区别不大,顺手即可。如果非要说区别,那就是使用[反斜线转义符号]比如 换行符 '\n',在使用这类转义符号通常是在双引号下。
2.5 自动转换
Perl的数字和字符串之间可自动转换,你说它自动转换,它咋知道我想写的是数还是字符?
Perl的发明者告诉你,这语言可聪明了,它会看你的 写的代码里这行涉及的操作符号。
你要是写了运算符,比如1+1 那就是数字,因为有加号。大多数情况,不需要考虑你在perl脚本获取的值是什么类型,Perl会自动完成数据转换的工作。
2.6 关于赋值
在Perl 语言中 赋值是需要 使用变量标识符($ sigil)标识符可接下划线'_' 数字和字母,且字母区别大小写,下面就是两个变量的命名:$test_Var
$test_var
了解变量的命名规则后,我们就可以赋值了,比如我们可以这么写:
#!/usr/bin/perl
#设置test_var 的值为7
$test_var = 7;
print 'tet_var: ',$test_var,"\n";
#设置test_Hello 的值为字符串‘Hello!Crow’
$test_Hello = 'Hello!Crow'
print 'test_Hello: ',$test_Hello,"\n";
#设置test_barney 的值 为“$test_var值 - 2”值应为5
$test_barney = $test_var - 2
print 'test_barney: ',$test_barney,"\n";
#设置test_barney1 的值 为“$test_barney值 * 2”值应为10
$test_barney1 = $test_barney * 2
print 'test_barney1: ',$test_barney1,"\n";
#设置test_barney 的值 为“$test_barney值 * 2”值应为10
$test_barney *= 2
print 'test_barney: ',$test_barney,"\n";
运行结果:
$#test_var: 7
$#test_Hello: Hello!Crow
$#test_barney: 5
$#test_barney1: 10
$#test_barney: 10
顺带一提:
以上是标量(Scalar)赋值,
Perl 也有数组(array),还有哈希(hash)
关于后两者
赋值数组 要用@开头,声明这是数组变量
赋值哈希 要用%开头, 声明这是哈希散列
2.7 Undef
赋值这块最后提一下undef,
Perl中非常有意思的不赋值。
如果你在其他编程语言文件里,声明了一个变量却没有赋值,运行程序会怎么样?
这大概率会停下报错吧。
而在Perl 如果声明变量但没有对该变量赋值,那么这个变量会进入undef(无定义)状态,undef 的意思很像 '空'值,注意是空不是Null。之所以这么说是因为Perl的undef空得很'灵性'~
举个例子,如果你声明一个变量 没有赋值,然后当你把它写在一个数学运算中,undef 会作为 0 来参加运算,你的Perl执行就不会出现那些烦人的报错文。或者当你把它写在一个print 打印里,undef 会被打印为"'',空字符串输出,你的你的Perl执行也不会出现那些烦人的报错文。
关于这部分,简而言之:undef状态的变量在被调用时,
会自动变为 符合调用场景的'空值'
3、循环与控制
说到这里,接下来见面的基本都是编程语句中的老朋友了,大部分编程语言都有if...else... 做判断执行,而循环语句一般都有 for循环和while循环,Perl中当然也有这些老朋友,只不过写法略有不同。先来见见老朋友1号if..else..
#!/usr/bin/perl
$name = 'Crow';
if($name eq 'Crow'){
print "hello Crow\n";
}else{
print "who is that?\n";
}
输出结果:
$#hello Crow
细心的朋友一定已经注意到了,这判断部分咋不是== 而是eq呢?这里解释一下,Perl的 “比较操作符
这些比较符号在Perl里是一些序列字符串,比如说==在peri里就是字符序列eq
例如:$name eq 'Crow'
所以这次列下 Perl的字符串比较操作符的对应表==eq等于
!=ne不等于
>gt大于
<=le小于等于
>=ge大于等于
回到判断和循环语句,接下来出现的也都是老朋友,这里就简单过一遍
if(#判断条件#){
#执行语句#
}
大概就是这样一个写法。
那接下来就是老朋友2号:while循环
while(#判断条件#){
#执行语句#
}
条件为真,就会循环跑花括号内的#执行语句#
条件为假,4就会直接略过往下执行。
下面就是老朋友3号:for循环
在Perl中有两种写法,那就是for 和foreach
首先Perl的for是真的老朋友,下面是for范式
for(#开始变量#;#限制变量#;#迭代#){
#执行语句
}
有没有想起当初开始学编程配支配的恐惧!
还是熟悉的味道和配方
接下来就是,foreach 这是个全历遍循环
foreach(#区间or数组#){
#执行语句
}
总的来说foreach写起来方便些,比如这里foreach会比较常用,多写一段这部分,
作为一个灵性语言,for也可以写得很灵性,比如用for写foreach..大概就是用着for关键字写foreach句式,出现下面代码的原因很简单,foreach更好用更常用,但Perler不想敲打each四个字,所以就衍生出了敲着for关键字写foreach..
for(1..10){
print " $_ ! \n"
}
还有就是如果你定义了一系列数组,要循环该数组怎么写?
参考下面这段代码
#!/usr/bin/perl
$maids[0] = 'Sengoku Nadeko';
$maids[1] = 'Izayoi Sakuya';
$maids[2] = 'Rem';
$maids[3] = 'Sharon Kluger';
foreach (@rocks) {
print "One maid is $_!\n";
}maid.pl output补充$_:括号前可以不写迭代变量的名称,然后使用默认变量进行迭代,默认变量名为'$_'是Perl很常用的一个默认变量。懒得写迭代变量名字是真的懂我,i了i了
4、子程序函数
任何编程都少不了函数,Perl也提供了构建子程序(subroutine),通过子程序可以将已经写好的代码进行重复使用,而不是每次造轮子。下面会讲一些子程序的基础内容
4.1 构建子程序
构建子程序的范式是:
sub #子程序名# {
#执行语句#
}
要注意的是子程序名可以由字母、数字、下划线组成,但不能由数字来开头。其实这么看比较空洞,举例的话我们可以尝试把hello word装进一个子程序里,
#!/usr/bin/perl
sub hello {
$n += 1
print "Hello,sailor number $n!\n";
}
4.2 调用子程序
上面内容见到了如何创建子程序函数,但是轮子造出来就是用来跑的,所以紧接着就是怎么跑
Perl语言 调用(calling)子程序时用 “&”符号来进行调用,比如:
&hello;
输出结果为:
#$ Hello,sailor number 1!
如果你不信前边提到的所有变量是全局变量的话,可以试一下这段代码
#!/usr/bin/perl
sub hello {
$n += 1
print "Hello,sailor number $n!\n";
}
&hello;
&hello;
&hello;
你会看到这样的输出:
#$ Hello,sailor number 1!
#$ Hello,sailor number 2!
#$ Hello,sailor number 3!
好吧,$n 变量自己就迭代+1了,这下信了吧。
全局变量虽然会有好的效果,但好像更多会造成函数名重名造成bug,所以有了下一节的方法来解决。
4.3 定义私有变量
如果你不写 my定义私有,那你可能会出现一些奇怪报错,因为perl所有变量真的是全局变量赋值。所以定义私有变量怎么写?范式如下
my $_#变量名#
这样定义私有就可以不用担心写的变量和函数在程序里来回乱入了~
4.4参数
Perl作为一个灵活的语言自然少不了灵活的参数。比如你可以给一个子程序写需要传两个参数,结果你传了3个。并不会有什么问题。不过使用的方法还是要举个例的,比如:
$maid = &maid(1,2,3);
4.4返回值
强类型函数都是return规定一个值,比如return xxx。然后这个函数返回这个xxx的值。
然而在灵活的语言里,甚至任性到不写return,只取子程序最后一个变量的结果。哇,这个设计真是太懂我了....我也觉得return这个设计就是浪费我多敲打六个字母的时间。
5、Choose Maid!
A:那么学了这些东西到底能干什么呢?
Q:学到这就能干很多事情呀?
A:比如写一个暂停选女仆?
Q:emmm,可以,上代码!
#/usr/bin/perl
sub ChooseMaid{
my $random = int(rand(11));
print "choose maid is $maids[$random]!\n";
}
$maids[0] = 'Sengoku Nadeko';
$maids[1] = 'Izayoi Sakuya';
$maids[2] = 'Rem';
$maids[3] = 'Sharon Kluger';
$maids[4] = 'Lam';
$maids[5] = 'Shiina Mayuri';
$maids[6] = 'Ferris Nyannyan';
$maids[7] = 'Ayasaki Maria';
$maids[8] = 'harukaze chiwaru';
$maids[9] = 'Wilhelmina Carmel';
$maids[10] = 'Tsuchimikado Maika';
$maids[11] = 'Ayuzawa Misaki';
print "Nadeko yyds\n";
&ChooseMaid;
我觉得hello world 作为上手不太行,
还是改成choose maid让人比较有动力
(毕竟完美潇洒的女仆谁不爱呢~)Izayoi Sakuya
Summary
我在工作调整之后,一直在学Perl,并写相关的笔记做学习输出,而且发现自己在学的过程中越发沉迷Perl,目前学习过程中Perl 展现一些特性着实让我眼前一亮,我也越发痴迷。
那么我到底对Perl有多满意?
我在19年已经可以很熟练的写Python了,各种环境各种模块依赖还有写功能写实现跑算法都比较得心应手了,但我仍觉得Python这不会是我主精通的语言,我很多想做的事情用python写很别扭甚至写不了。直到我遇到了Perl,就像打开了一扇新世界的大门。
我现在终于敢说这就是我一直追寻的编程语言。
Ending
OK,写到这里就告一段落啦~
本篇用了七天的个人碎片时间,全文共计七千余字,有缘看到这里的朋友你确定不给这位志同道合的Perler花费一秒钟点个赞吗?
我是Crow.Lu,
是一个干着数仓活 操着产品心的 数据分析师,
如果喜欢我的文章,可以点击关注追更,
我们下篇文章见
2020.11.23
参考^关于perl的后缀名:这里骆驼书建议不要带后缀扩展名,用户不需要知道你的文件是.c还是.perl,只需要能用就行。但是我暂时可能用不到 perl转c语言的源代码来写,我也就加了pl后缀
^Perl 直接量:直接量是指某个数字在Perl源代码中的写法,这(直接量)不是运算结果,也非I/O操作结果,就是直接写在赋值等号右边的变量叫直接量
^比较操作符:即:'=='等于,'!='不等于, '<'小于,'>='大于,这些叫比较操作符