英语法语西班牙文

OnWorks 网站图标

perlintro - 云端在线

通过 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器在 OnWorks 免费托管服务提供商中运行 perlintro

这是命令 perlintro,可以使用我们的多个免费在线工作站之一在 OnWorks 免费托管服务提供商中运行,例如 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器

程序:

您的姓名


perlintro -- Perl 的简要介绍和概述

商品描述


本文档旨在让您快速了解 Perl 编程语言,
以及指向进一步文档的指针。 它旨在作为“引导”指南
那些刚接触该语言的人,并提供足够的信息让您能够
阅读其他人的 Perl 并大致了解它在做什么,或者编写自己的
简单的脚本。

本介绍性文件并不旨在完整。 它甚至不打算成为
完全准确。 在某些情况下,为了获得目标而牺牲了完美
大体思路跨越。 你是 非常 建议遵循此介绍更多
来自完整 Perl 手册的信息,其目录可以在
珀尔托克

在本文档中,您将看到对 Perl 文档其他部分的引用。
您可以使用“perldoc”命令或您使用的任何方法阅读该文档
用于阅读本文档。

在 Perl 的整个文档中,您会发现许多旨在帮助解释的示例
讨论的特征。 请记住,其中许多是代码片段而不是
比完整的程序。

这些例子往往反映了该作品作者的风格和偏好。
文档,并且可能比实际程序中的相应代码行更简短。
除非另有说明,否则您应该假设“使用严格”和“使用警告”
语句出现在“程序”的前面,并且使用的任何变量都已经
声明,即使为了使示例更易于阅读而省略了这些声明。

请注意,这些示例是由许多不同的作者在一段时间内编写的
几十年。 因此,风格和技术会有所不同,尽管一些努力已经
在相同的部分中不要将样式变化得太大。 不要考虑一种风格
比别人更好 - “有不止一种方法可以做到”是 Perl 的座右铭之一。
毕竟,在你作为程序员的旅程中,你很可能会遇到不同的风格。

什么是 is 珀尔?
Perl 是一种通用编程语言,最初是为文本操作而开发的
现在用于广泛的任务,包括系统管理、Web 开发、
网络编程、GUI 开发等。

该语言旨在实用(易于使用、高效、完整)而不是
美丽(微小,优雅,最小)。 它的主要特点是使用方便,
支持过程和面向对象 (OO) 编程,具有强大的内置
支持文本处理,并拥有世界上最令人印象深刻的集合之一
第三方模块。

在 perl、perlfaq1 和毫无疑问的其他地方给出了 Perl 的不同定义。 从
这我们可以确定 Perl 对不同的人来说是不同的东西,但是很多
人们认为它至少值得一写。

运行 Perl的 程式
从 Unix 命令行运行 Perl 程序:

perl程序名.pl

或者,将其作为脚本的第一行:

#!/usr/bin/环境 perl的

...并运行脚本 /路径/到/script.pl. 当然,它需要是可执行的
首先是“chmod 755 script.pl”(在Unix下)。

(这条起跑线假设你有 ENV 程序。 你也可以直接把路径放到
你的 perl 可执行文件,比如“#!/usr/bin/perl“)。

有关更多信息,包括其他平台(如 Windows 和 Mac)的说明
操作系统,阅读 perlrun。

安全
默认情况下,Perl 是非常宽容的。 为了使它更健壮,建议
使用以下几行启动每个程序:

#!/usr/bin/perl
用严格;
使用警告;

额外的两行来自 perl 的请求,以捕获代码中的各种常见问题。
他们检查不同的东西,所以你需要两者。 “use strict”捕获的潜在问题;
将导致您的代码在遇到时立即停止,同时“使用警告”;
只会给出警告(如命令行开关 -w) 并让您的代码运行。 到
阅读有关它们的更多信息,请在严格和警告处查看各自的手册页。

基本版 句法 简介
Perl 脚本或程序由一个或多个语句组成。 这些陈述只是
以直截了当的方式写在剧本中。 没有必要有一个“main()”
函数或任何类似的东西。

Perl 语句以分号结尾:

打印“你好,世界”;

注释以哈希符号开始并运行到行尾

#这是一条评论

空白是无关紧要的:

打印
“你好,世界”
;

... 除了在带引号的字符串中:

# 这将在中间打印一个换行符
打印“你好
世界”;

双引号或单引号可用于文字字符串:

打印“你好,世界”;
打印“你好,世界”;

但是,只有双引号“插入”变量和特殊字符,例如
换行符(“\n”):

print "你好,$name\n"; # 工作正常
打印 '你好,$name\n'; # 按字面打印 $name\n

数字不需要引号:

打印 42;

您可以根据您的个人情况对函数的参数使用括号或省略它们
品尝。 他们只是偶尔需要澄清优先事项。

打印(“你好,世界\n”);
打印“你好,世界\n”;

可以在 perlsyn 中找到有关 Perl 语法的更多详细信息。

Perl的 变量 类型
Perl 有三种主要的变量类型:标量、数组和散列。

标量
标量表示单个值:

我的 $animal = "骆驼";
我的 $answer = 42;

标量值可以是字符串、整数或浮点数,Perl 可以
根据需要在它们之间自动转换。 无需预先声明您的
变量类型,但您必须在第一次使用“my”关键字来声明它们
使用它们。 (这是“严格使用;”的要求之一。)

标量值可以通过多种方式使用:

打印 $animal;
print "动物是 $animal\n";
print "$answer 的平方为 ", $answer * $answer, "\n";

有许多“神奇”标量的名称看起来像标点符号或线条
噪音。 这些特殊变量用于各种目的,并被记录在案
在 perlvar 中。 您现在唯一需要了解的是 $_ ,它是“默认
变量”。它被用作 Perl 中许多函数的默认参数,以及
它是由某些循环结构隐式设置的。

打印; # 默认打印 $_ 的内容

阵列
一个数组表示一个值列表:

我的@animals = ("camel", "llama", "owl");
我的@numbers = (23, 42, 69);
我的@mixed = ("骆驼", 42, 1.23);

数组是零索引的。 以下是获取数组元素的方法:

打印 $animals[0]; # 打印“骆驼”
打印 $animals[1]; # 打印“美洲驼”

特殊变量 $#array 告诉您数组最后一个元素的索引:

打印 $mixed[$#mixed]; # 最后一个元素,打印 1.23

您可能会想使用 "$#array + 1" 来告诉您一个数组中有多少项
大批。 不要打扰。 碰巧,在 Perl 期望找到标量的地方使用 @array
值(“在标量上下文中”)将为您提供数组中的元素数:

如果 (@animals < 5) { ... }

我们从数组中得到的元素以“$”开头,因为我们得到的只是
数组中的单个值; 你要求一个标量,你得到一个标量。

从数组中获取多个值:

@动物[0,1]; # 给 ("camel", "llama");
@动物[0..2]; # give ("camel", "llama", "owl");
@animals[1..$#animals]; # 给出除第一个元素之外的所有元素

这称为“数组切片”。

您可以对列表执行各种有用的操作:

我的@sorted = sort @animals;
我的@backwards = 反向@numbers;

还有一些特殊的数组,例如@ARGV(命令行参数
您的脚本)和@_(传递给子程序的参数)。 这些记录在
珀尔瓦尔。

哈希
散列表示一组键/值对:

我的 %fruit_color = ("apple", "red", "banana", "yellow");

您可以使用空格和“=>”运算符来更好地布置它们:

我的 %fruit_color = (
苹果 => "红色",
香蕉 => "黄色",
);

要获取哈希元素:

$fruit_color{"apple"}; # 给出“红色”

您可以使用“keys()”和“values()”获取键和值列表。

我的@fruits = 键 %fruit_colors;
我的@colors = 值 %fruit_colors;

哈希没有特定的内部顺序,但您可以对键进行排序和循环
通过他们。

就像特殊的标量和数组一样,也有特殊的哈希值。 最好的
其中已知的是包含环境变量的 %ENV。 阅读所有关于它(和
其他特殊变量)在 perlvar 中。

perldata 中更完整地记录了标量、数组和散列。

可以使用引用构建更复杂的数据类型,这允许您构建
列表和哈希中的列表和哈希。

引用是一个标量值,可以引用任何其他 Perl 数据类型。 所以通过存储一个
引用作为数组或散列元素的值,您可以轻松创建列表和散列
在列表和哈希中。 以下示例显示了哈希结构的 2 级哈希
使用匿名哈希引用。

我的 $variables = {
标量 => {
描述 => "单个项目",
印记 => '$',
},
数组 => {
描述 => "项目的有序列表",
印记 => '@',
},
哈希 => {
描述 => "键/值对",
印记 => '%',
},
};

print "标量以 $variables->{'scalar'}->{'sigil'} 开头\n";

有关参考主题的详尽信息可以在 perlreftut、perllol、
perlref 和 perldsc。

请按需咨询 范围界定
在上一节中,所有示例都使用了以下语法:

我的 $var = "value";

“我的”实际上不是必需的; 你可以使用:

$var = "值";

但是,上述用法将在整个程序中创建全局变量,即
糟糕的编程习惯。 "my" 改为创建词法范围的变量。 变量
被限定在块(即一堆被花括号包围的语句)中,其中
它们被定义。

我的 $x = "foo";
我的 $some_condition = 1;
如果($some_condition){
我的 $y = "bar";
打印 $x; # 打印“foo”
打印 $y; # 打印“bar”
}
打印 $x; # 打印“foo”
打印 $y; # 什么都不打印; $y 已经超出范围

将“my”与“use strict”结合使用; 在 Perl 脚本的顶部意味着
解释器会发现某些常见的编程错误。 例如,在
上面的例子,最后的“print $y”会导致编译时错误并阻止你
运行程序。 强烈建议使用“严格”。

条件 循环 结构体
Perl 具有大多数常用的条件和循环结构。 从 Perl 5.10 开始,它甚至
有一个 case/switch 语句(拼写为“given”/“when”)。 请参阅 perlsyn 中的“Switch 语句”
,了解更多详情。

条件可以是任何 Perl 表达式。 请参阅下一节中的运算符列表
有关比较和布尔逻辑运算符的信息,它们常用于
条件语句。

if
如果(条件){
...
} elsif(其他条件){
...
} {
...
}

还有一个否定版本:

除非(条件){
...
}

这是作为“if (!健康)状况)”.

请注意,Perl 中需要大括号,即使您在
堵塞。 然而,有一种聪明的方法可以让你的单行条件块更
英语喜欢:

#传统方式
如果($zippy){
打印“哇!”;
}

# Perlish 后置条件方式
打印“哇!” 如果 $zippy;
打印“我们没有香蕉”,除非 $bananas;


而(条件){
...
}

还有一个否定版本,出于同样的原因,我们有“除非”:

直到(条件){
...
}

您还可以在后置条件中使用“while”:

打印 "LA LA LA\n" 而 1; # 永远循环

就像 C 一样:

for ($i = 0; $i <= $max; $i++) {
...
}

Perl 中很少需要 C 风格的 for 循环,因为 Perl 提供了更友好的
列表扫描“foreach”循环。

的foreach
foreach(@array){
print "这个元素是 $_\n";
}

打印 $list[$_] foreach 0 .. $max;

# 你也不必使用默认的 $_...
foreach 我的 $key (keys %hash) {
print "$key 的值为 $hash{$key}\n";
}

“foreach”关键字实际上是“for”关键字的同义词。 见“”foreach
循环“在 perlsyn”。

有关循环构造的更多详细信息(以及本概述中未提及的一些)
见 perlsyn。

内建 运营商 功能
Perl 带有多种内置函数。 其中一些我们已经
看到的包括“打印”、“排序”和“反向”。 在开始时给出了它们的列表
perlfunc,您可以使用“perldoc -f”轻松阅读任何给定的函数
函数名".

Perl 操作符在 perlop 中有完整的文档,但这里有一些最常见的
那些:

算术
+加法
-减法
*乘法
/师

数值比较
== 平等
!= 不等式
< 小于
> 大于
<= 小于或等于
>= 大于或等于

字符串比较
等式
不等式
它小于
gt 大于
小于或等于
ge 大于或等于

(为什么我们有单独的数字和字符串比较?因为我们没有
特殊变量类型,Perl 需要知道是否按数字排序(其中 99
小于 100)或按字母顺序(其中 100 在 99 之前)。

布尔逻辑
&& 和
|| 或者
! 不是

(“和”、“或”和“非”不仅仅在上表中作为描述
运营商。 它们本身也作为运营商得到支持。 他们更
比 C 风格的运算符可读,但与“&&”和
朋友们。 检查 perlop 以获取更多详细信息。)

其他
= 分配
. 字符串连接
x 字符串乘法
.. 范围运算符(创建数字或字符串列表)

许多运算符可以与“=”组合,如下所示:

$a += 1; # 与 $a = $a + 1 相同
$a -= 1; # 与 $a = $a - 1 相同
$a .= "\n"; # 与 $a = $a 相同。 "\n";

I / O
您可以使用“open()”函数打开文件以进行输入或输出。 它记录在
perlfunc 和 perlpentut 中的奢侈细节,但简而言之:

open(my $in, "<", "input.txt") 或者死“无法打开 input.txt: $!”;
open(my $out, ">", "output.txt") 或者死“无法打开 output.txt: $!”;
open(my $log, ">>", "my.log") or die "Can't open my.log: $!";

您可以使用“<>”运算符从打开的文件句柄中读取。 在标量上下文中它读取
文件句柄中的一行,在列表上下文中它读取整个文件,
将每一行分配给列表的一个元素:

我的 $line = <$in>;
我的@lines = <$in>;

一次读入整个文件称为 slurping。 它可能有用,但它可能是
一个记忆猪。 大多数文本文件处理可以通过 Perl 的循环一次一行完成
结构体。

"<>" 运算符最常出现在 "while" 循环中:

while (<$in>) { # 将每一行依次分配给 $_
打印“只需阅读这一行:$_”;
}

我们已经看到如何使用“print()”打印到标准输出。 但是,“打印()”
还可以采用可选的第一个参数指定要打印到的文件句柄:

print STDERR "这是你最后的警告。\n";
打印 $out $record;
打印 $log $logmessage;

处理完文件句柄后,应该“关闭()”它们(尽管说实话,
如果你忘记了,Perl 会在你之后清理):

关闭 $in 或死亡 "$in: $!";

原价 表达式
Perl 的正则表达式支持既广泛又深入,是冗长的主题
perlrequick、perlretut 和其他地方的文档。 但是,简而言之:

简单搭配
if (/foo/) { ... } # true 如果 $_ 包含“foo”
if ($a =~ /foo/) { ... } # true 如果 $a 包含“foo”

“//”匹配运算符记录在 perlop 中。 它默认在 $_ 上运行,或者
可以使用“=~”绑定运算符绑定到另一个变量(也记录在
perlop)。

简单替换
s/foo/bar/; # 用 $_ 中的 bar 替换 foo
$a =~ s/foo/bar/; # 用 $a 中的 bar 替换 foo
$a =~ s/foo/bar/g; # 用 bar 替换 foo 的所有实例
# 在 $a

"s///" 替换操作符记录在 perlop 中。

更复杂的正则表达式
您不仅必须匹配固定字符串。 事实上,你可以匹配
通过使用更复杂的正则表达式,您可以实现任何梦想。 这些是
在 perlre 中进行了大量记录,但与此同时,这是一个快速作弊
床单:

. 单个字符
\sa 空白字符(空格、制表符、换行符、
...)
\S 非空白字符
\da 数字 (0-9)
\D 一个非数字
\wa 单词字符(az, AZ, 0-9, _)
\W 一个非单词字符
[aeiou] 匹配给定集合中的单个字符
[^aeiou] 匹配给定范围之外的单个字符

(foo|bar|baz) 匹配任何指定的替代方案

^ 字符串开头
$ 字符串结尾

量词可用于指定您要匹配的先前事物的数量
上,其中“事物”表示文字字符,列出的元字符之一
或括号中的一组字符或元字符。

* 零个或多个以前的东西
+ 一项或多项先前的事情
? 零或前一件事
{3} 正好匹配前一个事物的 3 个
{3,6} 匹配前一个事物的 3 到 6 个
{3,} 匹配 3 个或更多前一个事物

一些简短的例子:

/^\d+/ 字符串以一位或多位数字开头
/^$/ 字符串中没有任何内容(开始和结束是
邻近的)
/(\d\s){3}/ 三位数,每个后面跟一个空格
字符(例如“3 4 5”)
/(a.)+/ 匹配一个字符串,其中每个奇数
字母是一个(例如“abacadaf”)

# 这个循环从 STDIN 读取,并打印非空行:
而 (<>) {
下一个 if /^$/;
打印;
}

捕获的括号
除了分组,括号还有第二个目的。 它们可用于捕获
正则表达式匹配的部分结果供以后使用。 结果以 1 美元、2 美元结束
等等。

# 一种将电子邮件地址分成几部分的廉价而讨厌的方法

如果 ($电子邮件 =~ /([^@]+)@(.+)/) {
打印 "用户名是 $1\n";
打印“主机名是 $2\n”;
}

其他正则表达式功能
Perl 正则表达式还支持反向引用、前瞻和各种其他复杂的
细节。 在 perlrequick、perlretut 和 perlre 中阅读有关它们的所有信息。

撰稿 子程序
编写子程序很容易:

子记录器{
我的 $logmessage = shift;
打开我的 $logfile, ">>", "my.log" or die "Could not open my.log: $!";
打印 $logfile $logmessage;
}

现在我们可以像使用任何其他内置函数一样使用子程序:

logger("我们有一个记录器子程序!");

那是什么“转变”? 嗯,子程序的参数作为特殊的
名为@_ 的数组(有关更多信息,请参阅 perlvar)。 “shift”的默认参数
函数恰好是@_。 所以“我的 $logmessage = shift;” 关闭第一个项目
参数列表并将其分配给 $logmessage。

我们也可以通过其他方式操作@_:

我的 ($logmessage, $priority) = @_; # 常见的
我的 $logmessage = $_[0]; # 不常见且丑陋

子程序也可以返回值:

子方{
我的 $num = shift;
我的 $result = $num * $num;
返回 $result;
}

然后像这样使用它:

$平方= 广场(8);

有关编写子例程的更多信息,请参阅 perlsub。

OO Perl的
OO Perl 相对简单,是使用知道什么类型的引用来实现的
object 它们基于 Perl 的包概念。 然而,OO Perl 在很大程度上超出了
本文件的范围。 阅读 perlootut 和 perlobj。

作为 Perl 初学者,您最常使用的 OO Perl 将是使用第三个
派对模块,其记录如下。

运用 Perl的 模块
Perl 模块提供了一系列功能来帮助您避免重新发明轮子,并且可以
从 CPAN 下载 ( http://www.cpan.org/ )。 一些流行的模块是
包含在 Perl 发行版中。

模块类别范围从文本操作到网络协议再到数据库
与图形的集成。 CPAN 还提供了模块的分类列表。

要了解如何安装从 CPAN 下载的模块,请阅读 perlmodinstall。

要了解如何使用特定模块,请使用“perldoc 模块::名称”. 通常你会
想“用 模块::名称”,这将使您可以访问导出的函数或 OO
模块的接口。

perlfaq 包含与许多常见任务相关的问题和答案,并且经常提供
使用好的 CPAN 模块的建议。

perlmod 一般描述 Perl 模块。 perlmodlib 列出了随附的模块
你的 Perl 安装。

如果你有写 Perl 模块的冲动,perlnewmod 会给你很好的建议。

使用 onworks.net 服务在线使用 perlintro


免费服务器和工作站

下载 Windows 和 Linux 应用程序

  • 1
    Gin 网络框架
    Gin 网络框架
    Gin 是一个非常快的 Web 框架
    用 Golang 编写,最多可以执行
    快了 40 倍,这要归功于它的
    类似马提尼的 API 和自定义版本
    http路由...
    下载 Gin Web 框架
  • 2
    CEREUS Linux
    CEREUS Linux
    CEREUS LINUX 和 MX LINUX 控制器
    各种不同的写入方式。 这是
    也可以获取的应用程序

    https://sourceforge.net/projects/cereu...
    下载CEREUS LINUX
  • 3
    任务教练
    任务教练
    任务教练 - 你的友好任务
    经理。 任务教练是免费开放的
    源待办事项管理器。 它长出了
    对其他程序的挫败感
    处理复合...
    下载任务教练
  • 4
    HyperSQL数据库引擎(HSQLDB)
    HyperSQL数据库引擎(HSQLDB)
    HSQLDB是一个关系数据库引擎
    用 Java 编写,带有 JDBC 驱动程序,
    符合 ANSI SQL:2016。 一个小的,
    快速、多线程引擎和服务器
    与记忆...
    下载 HyperSQL 数据库引擎 (HSQLDB)
  • 5
    蜡染恢复
    蜡染恢复
    由 Batik 开发的 Project Recovery
    来自印度尼西亚的恢复团队合作,这
    蜡染恢复是蜡染的衍生物
    官方 TWRP 已由
    开发...
    下载蜡染恢复
  • 6
    TightVNC的
    TightVNC的
    TightVNC 是 VNC 的改进版本,
    很棒的免费远程桌面工具。 这
    改进包括带宽友好
    “紧”编码,文件传输
    在...
    下载 TightVNC
  • 更多 ”

Linux 命令

Ad