Perl语法

news2024/10/5 17:43:31

Perl从许多语言中借用了语法和概念:awk,sed,C,Bourne Shell,Smalltalk,Lisp甚至是英语。每个简单的语句必须以分号(;)结尾,和Java类似,与Python不同。

一、扩展名

可以在任何普通的简单文本编辑器程序内部创建Perl脚本。按照Perl约定,必须将Perl文件保存为.pl或.PL文件扩展名,才能将其识别为功能良好的Perl脚本。文件名可以包含数字,符号和字母,但不能包含空格。在空格处使用下划线(_)。

二、注释

1. 单行注释

以井号#开头的行是单行注释。简单地说,Perl中的注释以井号符号开头,一直到行尾。

# 单行注释

 2. 多行注释

以=开头的行被解释为嵌入式文档(pod)一节的开始,编译器将忽略直到下一个=cut的所有后续行。

=pdo
    多行注释
    声明:
        1.标量:$(字符串,数字等);
        2.数组:@
        3.哈希:%(集合,键值对)
    不同类型的变量可以使用相同的变量名
=cut
# 多行注释
=begin comment
    Perl的多行注释
    声明:
        1.标量:$(字符串,数字等);
        2.数组:@
        3.哈希:%(集合,键值对)
    不同类型的变量可以使用相同的变量名
=cut
# 多行注释
=begin
    Perl的多行注释
    声明:
        1.标量:$(字符串,数字等);
        2.数组:@
        3.哈希:%(集合,键值对)
    不同类型的变量可以使用相同的变量名
=cut

区别就在于第一个=号后面的内容,可以按照自己的喜好自定义。 

注意:

  • =pod、 =cut只能在行首。
  • 以=开头,以=cut结尾。
  • =后面要紧接一个字符,=cut后面可以不用。

三、输出方式

print("Hello, World\n");

或者

print "Hello, World\n";

输出:

Hello, World

带不带括弧都可以,要输出的内容用英文双引号括住,结尾以分号结尾,\n是换行符。

输出perl的内容一般都加上\n,否则新的输出就和上一行展示在一起。这个和Java的

System.out.print("Hello, World!");

类似,如果Java输出内容要换行,就可以使用:

System.out.println("Hello, World!");

如果是单引号,就完全当做字符串处理:

print('Hello, World\n');

输出:

Hello, World\n 

单引号中是什么就输出什么。

四、Here 文档

Here文档又称作heredoc、hereis、here-字串或here-脚本,是一种在命令行shell(如sh、csh、ksh、bash、PowerShell和zsh)和程序语言(像Perl、PHP、Python和Ruby)里定义一个字串的方法。

my $a = 10;
my $var1 = << "EOF";
这是一个 Here 文档实例,使用双引号。
可以在这输入字符串和变量。
例如:a = $a
# 结尾的EOF后不能加;
EOF
print("$var1\n");

输出结果:

这是一个 Here 文档实例,使用双引号。               
可以在这输入字符串和变量。                         
例如:a = 10                                       
# 结尾的EOF后不能加;

注意:

  1. 开始标志符后面必须跟分号。
  2. 结束标志符必须独占一行,且要顶格书写,前后不能衔接任何其他内容。
  3. 开始标志符可以不带引号或带单双引号,不带引号与带双引号效果一致,解释内嵌的变量和转义符号。带单引号则不解释内嵌的变量和转义符号。
  4. 当内容需要内嵌引号(单引号或双引号)时,不需要加转义符,本身对单双引号转义。
  5. 开始标志符和结束标志符可以自定义,但是必须保持一致。

单引号开始标志符

my $var2 = << 'EOF';
这是一个 Here 文档实例,使用单引号。
例如:a = $a
EOF
print("$var2\n");

输出:

这是一个 Here 文档实例,使用单引号。              
例如:a = $a 

未对变量进行解释,和直接print('');这种里面加单引号是一样的效果。

自定义标志符

my $var3 = << "DOC";
这是一个 Here 文档实例,使用双引号,自定义标志符。
例如:a = $a
DOC
print("$var3\n");

 这里面我们使用的是双引号,但是里面的内容我们使用的不是上面例子中的EOF,而是DOC,结果如下:

这是一个 Here 文档实例,使用双引号,自定义标志符。
例如:a = 10 

 可见和EOF是一样的。

my $var3 = << "DOC"的意思就是说,我给出了一个标记,用来标记一段文字,使用<<将这一段文字指向该变量之中。从下一行开始,知道遇到最后的结束标志符DOC为止,所有的内容都赋值给变量var3。和Linux的shell脚本中的用法是类似的功能。

比如,我们在shell脚本中创建一个文件并写入一段内容:

cat > test.txt << 'EOF'
这是一个 << 测试语句,
使用EOF作为开始和结束标志符
EOF

  

五、转义符

如果我们需要输出一个特殊的字符,可以使用反斜线(\)来转义,例如输出美元符号($):

my $result = "菜鸟教程 \"runoob\"";
print("$result\n");
print("\$result\n");

输出:

菜鸟教程 "runoob"                                 
$result 

 可以看出,\首先在定义变量时对双引号进行了转义,也就是说加上\就代表你输入的是什么,展示的就是什么。然后在第二个print中对$进行了转义。

六、命名规范

Perl 的命名是用户编程时使用的名字,在程序中使用的变量名,常量名,函数名,语句块名等统称为标识符。

  • 标识符组成单元:英文字母(a~z,A~Z),数字(0~9)和下划线(_)。
  • 标识符由英文字母或下划线开头。
  • 标识符区分大小写,$runoob 与 $Runoob 表示两个不同变量。

七、变量定义

我们上面的一些例子中,定义变量时都加了my。在之前的文章中我们介绍,perl是自由的,其实就是语法很灵活的,没有那么多规矩。

也正是因为Perl的灵活性和"过度"的冗余语法,也因此获得了仅写(write-only)的"美誉",因为Perl程序可以写得很随意(例如,变量不经声明就可以直接使用),但是可能少写一些字母就会得到意想不到的结果(而不报错),许多Perl程序的代码令人难以阅读,实现相同功能的程序代码长度可以相差十倍百倍,这就令程序的维护者(甚至是编写者)难以维护。

同样的,因为Perl这样随意的特点,可能会导致一些Perl程序员遗忘语法,以至于不得不经常查看Perl手册。

建议的解决方法是在程序里使用use strict;以及use warnings;,并统一代码风格,使用库,而不是自己使用"硬编码"。Perl同样可以将代码书写得像Python或Ruby等语言一样优雅。

如果我们在编写perl脚本的时候没有加这些约束,比如:

use strict;
use warnings FATAL => 'all';

那么代码会非常灵活,这也容易导致代码出错的时候很难排查,因为它不报错。

所以加上这些约束,会让我们的代码更容易阅读和规范。

use strict:指的是使用严格模式,任何变量都必须先定义,定义时使用my或者our来指定范围。

my代表的是局部变量,our代表的是全局变量。

use warnings FATAL => 'all':指的是对所有的错误都发出警告。

如果我们不加这些约束,变量都可以随便定义,如果加了,那么我们定义变量的时候不加my或者our,代码执行的时候就会报错。

所以建议加上这些约束。

本文参考:

菜鸟教程 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【苹果推群发iMessage推】软件安装它起首将消息发送到Apple Push服务器,而后Apple Push服务器将消息发送到装配了应用程序的手机

推荐内容IMESSGAE相关 作者推荐内容iMessage苹果推软件 *** 点击即可查看作者要求内容信息作者推荐内容1.家庭推内容 *** 点击即可查看作者要求内容信息作者推荐内容2.相册推 *** 点击即可查看作者要求内容信息作者推荐内容3.日历推 *** 点击即可查看作者要求内容信息作者推荐…

《小猫猫大课堂》——数组,操作符,常见关键字

更新不易&#xff0c;麻烦多多点赞&#xff0c;欢迎你的提问&#xff0c;感谢你的转发&#xff0c; 最后的最后&#xff0c;关注我&#xff0c;关注我&#xff0c;关注我&#xff0c;你会看到更多有趣的博客哦&#xff01;&#xff01;&#xff01; 喵喵喵&#xff0c;你对我…

Java--方法重写

1&#xff09;概念 重写(override)&#xff1a;也称为覆盖。重写是子类对父类非静态、非private修饰&#xff0c;非final修饰&#xff0c;非构造方法等的实现过程 进行重新编写, 返回值和形参都不能改变。即外壳不变&#xff0c;核心重写&#xff01;重写的好处在于子类可以根据…

VUE动态组件,插槽和自定义指令

文章目录动态组件1.component组件的使用-keep-alive的使用keep-alive生命周期学习keep-alive组件的include和exclude属性include(指定keep-alive的哪些组件可以被缓存,不指定的话默认所有都会被缓存)exclude(排除项,与include刚好相反,二者不能同时使用)插槽v-slot指令v-slot的…

NodeJS - Express使用

文章目录1. 参数1.1 获取URL中的动态参数2. 静态资源2.1 挂载路径前缀3. nodemon4.1路由4.1 路由的匹配过程4.2 模块化路由4.3 为路由模块添加前缀5. 中间件5.1 全局生效的中间件5.2 全局生效中间件的简化形式5.3 中间件的作用5.4 局部生效的中间件5.5 定义多个局部中间件5.6 使…

计算机xxxxxxx

文章目录1.互联网的两大组成部分&#xff08;边缘部分与核心部分&#xff09;的特点是什么&#xff1f;它们的工作方式各有什么特点&#xff1f;2.简述分组交换的要点。3.试从多个方面比较电路交换、报文交换和分组交换的主要优缺点。4.网络协议的三个要素是什么&#xff1f;各…

十二、生产者和消费者问题、队列、线程池

内容 理解消费者、生产者的案例执行过程&#xff0c; 理解用队列方式做消费者、生产者的案例 会使用线程池运行任务, 理解ThreadPoolExecutor7个参数的含义&#xff08;会根据需要 通过参数控制线程池的总数量&#xff09; 匿名内部类里的异常处理 Thread 使用匿名内部类…

VScode中不同目录间python库函数的调用

问题描述 vscode中跨目录的模块调用远不如pycharm中的来的简单&#xff0c;在pycharm中即使是不同库文件夹中子函数也可以进行互相调用。而在VScode中则需要我们手动向其中添加依赖路径。如下相同的文件结构&#xff0c;在pycharm中可以简单的在model_arc_pesudo中导入model中的…

HTTP传输过程

简介 HTTPS是在HTTP的基础上和ssl/tls证书结合起来的一种协议,保证了传输过程中的安全性,减少了被恶意劫持的可能.很好的解决了解决了http的三个缺点&#xff08;被监听、被篡改、被伪装&#xff09; 对称加密和非对称加密 对称加密 即加密的密钥和解密的密钥相同, 非对称加…

1801. 积压订单中的订单总数

插&#xff1a; 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 坚持不懈&#xff0c;越努力越幸运&#xff0c;大家一起学习鸭~~~ 题目&#xff1a; 给你一个二维整数数组 orders &…

【HTMLCSS】运维、后端你该会的前端基本内容

文章目录前言一、HTML5基础1.1、前端开发的核心技术1.2、Web组成标准1.3、HTML 实例1.3.1、第一个网页1.4、 文本标签1.5、转义字符1.6、图片1.7、超链接1.8、列表1.8.1、无序列表1.8.2、有序列表1.8.3、自定义列表1.9、表格1.9.1、合并单元格1.10、表单二、CSS基础2.1、入门2.…

【论文导读】Stable Learning via Sparse Variable Independence

准备follow一下稳定学习的系列论文&#xff0c;从这篇开始吧。 AAAI2023上的&#xff0c;主要是根据前几年稳定学习组提出的SV特征分类、关注稳定的S特征的样本重加权的优化 针对问题和措施&#xff1a; 稳定学习算法采用的样本重加权有弊端&#xff1a; 1&#xff0c;在有限…

ESP8266 SDK开发之AiThinkerIDE_V1.5.2安装、配置以及编写一个程序

【本文发布于https://blog.csdn.net/Stack_/article/details/128509864&#xff0c;未经允许不得转载&#xff0c;转载须注明出处】 前言 乐鑫官方不搞IDE&#xff0c;安信可搞了IDE&#xff0c;但是各版本之间安装配置有差异&#xff0c;还没有文档说明。官方安装配置教程不完…

IEEE论文投稿流程

转载文章 这是篇节省你翻论坛、查资料的文章。 我将把每一步尽量写的清楚&#xff0c;能够让新手按照这篇文章进行完整的投稿。 即使你从未投过稿&#xff0c;完全不了解IEEE的投稿流程&#xff0c;希望按照这篇文章&#xff0c;能够帮助你流畅无误的投稿 这是针对本科生和低年…

springboot整合springcloud之nacos配置中心

整合配置中心nacos 应用场景&#xff0c;每次改配置要重新启动才能生效&#xff0c;而把配置放到nacos上&#xff0c;如有修改&#xff0c;那么发布后项目自动就生效了。 场景2&#xff1a;不同微服务单独设置一个命名空间。 一、项目操作 1.引入依赖 <!--使用spring-cloud…

JDBC---Maven之jdbc连接数据库

Maven之jdbc连接数据库 这里需提前将maven环境配置好 链接: Maven环境配置 文章目录Maven之jdbc连接数据库JDBC创建Maven工程JDBC访问数据库步骤1.Class.forName()加载驱动2.DriverManager获取Connection连接3.创建Statement执行SQL语句4.返回ResultSet查询结果()5.释放资源JD…

vsmoon靶场实战笔记

vsmoon靶场实战笔记 web打点 信息收集 nmap扫描端口 扫描结果 └─$ nmap -sV -A 192.168.1.106 -Pn Starting Nmap 7.92 ( https://nmap.org ) at 2023-01-01 12:51 CST Nmap scan report for 192.168.1.106 Host is up (0.00014s latency). Not shown: 986 closed tcp p…

YOLOv5更换骨干网络之 GhostNet

论文地址&#xff1a;https://arxiv.org/abs/1911.11907 代码地址&#xff1a;https://github.com/huawei-noah/ghostnet 由于内存和计算资源有限&#xff0c;在嵌入式设备上部署卷积神经网络&#xff08;CNN&#xff09;很困难。特征图中的冗余是那些成功的神经网络的重要特征…

年度征文 | 回顾2022,展望2023(我难忘的2022,我憧憬的2023)

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;也会涉及到服务端 &#x1f4c3;个人状态&#xff1a; 在校大学生一枚&#xff0c;已拿多个前端 offer&#xff08;秋招&#xff09; &#x1f680;未…

用javascript分类刷leetcode7.双指针(图文视频讲解)

双指针 普通指针&#xff1a;两指针同一方向或不同方向对撞指针&#xff1a;两指针互相靠拢快慢指针&#xff1a;一快一慢 141. 环形链表 (easy) 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再…