Perl语法

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,代码执行的时候就会报错。

所以建议加上这些约束。

本文参考:

菜鸟教程 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北冥牧之

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值