Perl快速入门

[作为快速入门类型的文章,用中文是必须的]
[建议正式读一本编程书籍前看一下快速入门类的文章]

认识Perl

Perl是一种高级、通用、直译式、动态的程序语言。
最初设计者拉里·沃尔(Larry Wall)为了让在UNIX上进行报表处理的工作变得更方便,决定开发一个通用的脚本语言,而在1987年12月18日发表。

Perl借取了C、sed、awk、shell脚本以及很多其他编程语言的特性。其中最重要的特性是他内部集成了正则表达式的功能,以及巨大的第三方代码库CPAN。目前拉里·沃尔已经开发Perl 6,来作为Perl的后继;不过,Perl 6语言的语法有很多转变,所以Perl 6被视为Perl家族中的另一个语言。

Perl最初用于简单的文本处理(如log信息处理),现在被广泛的应用在系统管理、Web开发PHPCGI)、网络编程、GUI开发等。

因为许多Perl程序的代码难以阅读(write-only),加上它的面向对象功能被视为不是真正的面向对象(只是模块的模拟),于是很多人拿Perl和其他动态语言来比较。最常见的比较对象是Python


Perl快速入门_第1张图片


安装Perl解释器

Perl快速入门_第2张图片

Perl快速入门_第3张图片

ActivePerl: 一个可以让你任意执行 Perl 程序的工具软件,其包含了包括有 Perl for Win32、Perl for ISAPI、PerlScript、

Perl Package Manager四套开发工具程序,可以让你编写出适用于 unix, windows, linux系统的 CGI程序来。

选另外两个Windows版安装程序也OK。


Perl基本语法

[没有找到Perl格式的,用Python更好些]


#!/usr/bin/env perl
#

#	基本语法
#	;用于语句结束符
#	#用于注释
#	""用于表示字符串,变量可以在""中被替换,如:
$var = "world.";
print "Hello $var\n";	#输出为:Hello world.
#	''用于表示字符串,''内的所有内容都被当作纯文本,如:
print 'Hello $var\n';	#输出为:Hello $var\n
#	关于style
print("Hello, world\n");	#OK
print "Hello, world\n";		#OK


#	变量类型
#	Perl主要有三种变量类型: 标量、数组、哈希表
#	Perl不需要预先声明变量,直接将变量值附给变量即可
#	标量表示单一值,以$后接变量名来表示一个标量
#	标量可以存储字符串、整数、浮点数
$var_scalar = 1;
print $var_scalar;
#	或者
print "The scalar's value is $var_scalar\n";
#	或者
print "The scalar's value is", $var_scalar, "\n";
#	用@后接变量名来表示一个数组
#	数组保存列表,列表是标量集合
@var_array = (1, 2, 3, "a", "b", "c");
#	或者
@var_array = qw(1 2 3 a b c);
#	或者
@var_array = qw/1 2 3 a b c/;
print "The 2nd elm of var_array is $var_array[1]\n";
#	数组切片
#	1. 输出数组中某两个值
print @var_array[0, 2], "\n";
#	2. 用连接符..输出数组中一个区间中的所有值
print @var_array[0..3], "\n";
#	用%后接变量名表示一个哈希,即"键值对"的集合
#	=> 符号左边是键,右边是值
%var_hashes = (a => "Apple", b => "Blizzard");
print "One elm of var_hashes is $var_hashes{\"b\"}\n";
#	用keys()或values()两个函数分别获取哈希表的所有键或所有值
my @allKeys = keys %var_hashes;
my @allValues = values %var_hashes;

#	常用内建变量
#	$_	默认变量
#	@_	默认数组变量,保存传递给子程序的所有参数
#	$!	当前错误信息
#	$0	当前脚本的文件名
#	$$	当前脚本的进程号
#	@ARGV	命令行参数列表


#	内建操作符和操作函数
#	+, -, *, /
#	==, !=, <, >, <=, >=
#	eq  equality
#	ne  inequality
#	lt  less than
#	gt  greater than
#	le  less than or equal
#	ge  greater than or equal
#	&&,	and
#	||, or
#	!,	not
#	=	附值
#	.	串连两个字符串
#	x	重复字符串
#	..	以..符号相端点,创建一串值
#	+=, -=, .=
print "Baidu"x3;
print "\n";

#	变量作用域
#	主要有my和local两种作用域
#	my,声明的层次&同一层次
#	local, 声明的层次&以内层次
my $var_my_scope;
local $var_local_scope;
#	不加my或local,默认为全局作用域 
#	!建议不要用过多全局的变量
#	!建议在脚本开头加上如下两句:
use strict;
use warnings;
#	这样,解释器会强制你使用my或local来表示变量的作用域,
#	这样做可以帮你检查到一些普通的编程错误


#	条件判断和循环控制
#	if, while, for, foreach,until, unless
#	if
my $isOK = 1;
if ($isOK) {	#	()和{}在这里都是必须使用的
	print "OK\n";
} else {
	print "Ooops...\n";
}
#	或者这样写:
print "OK\n" if $isOK;
#	while
my $count = 10;
while($count > 0) {
	print "while ... $count\n";
	$count -= 1;
}
#	因为foreach的存在,for在Perl中用得很少,它的写法和C一样
my @array = (1, 2, 3, "a");
foreach my $elm (@array) {
	print $elm, "\n";
}


#	文件操作,即IO
#	open()函数打开一个文件
#	读文件$file,将文件的标识符附给$fileHandle
my $file2open="./1.txt";
my $fileHandle;
open($fileHandle, "<$file2open");
#	<>符号用于读取$fileHandle指向的内容
#	利用钻石操作符号<>,你可以:
#	1. 将$fileHandle指向的内容附给一个标量,这样只读一行就over
#	my $line = <$fileHandle>;
#	2. 将$fileHandle指向的内容附给一个数组,将每一行作为一个element
#	my @lines = <$fileHandle>;
#	3. 常用于while或者foreach
foreach (<$fileHandle>) {	
	print $_;
}
#	写文件$file
open($fileHandle, ">$file2open");
print $fileHandle "abc";
#	追加写入
open($fileHandle, ">>$file2open");
print $fileHandle "def";
#	关闭文件
close($fileHandle);


#	子程序
#	@_ 符号包含所有传递给子程序的参数
sub subFunc1 {
	print "\nsubroutine 1\n";
}
sub subFunc2 {
	print "subroutine 2\n";
	return "I like Perl.\n";
}
sub subFunc3 {
	my ($param1, $param2) = @_;
	print $param1, $param2, "\n";
}
# calling subroutine
subFunc1();
#	或者
&subFunc1;
print subFunc2();	
subFunc3("Ooops...", 123);


#	正则表达式
#	查找:在$re_test中查找oo
#	=~是绑定操作符
my $re_test = "Google";
if($re_test =~ /oo/) {
	print "Bingo!\n";
}
#	替换;在$re_test中用xx替换oo
if($re_test =~ s/oo/xx/){
	print $re_test, "\n";
}
#	匹配修饰符
#	i, g
my $re_test2 = "FacebOok";
if($re_test2 =~ /oo/i){
	print "Bingo!\n";
}



Perl Module --> .pm(文本文件)

获取Perl Module的地方主要有:

1. CPAN: Comprehensive Perl Archive Network(Perl综合典藏网)

2. 自己编写Perl模块

3. 随Perl发行版本一起打包的,安装在Perl/lib下

Perl快速入门_第4张图片

在脚本开头使用use 声明需要使用的模块,解释器看到后就会将模块中的代码加载进来,接着就可以使用模块中的子函数了。

可以通过perldoc这个命令来查看一些帮助信息 (p.s.:perl.org上有说perlfaq这个命令,但在我Windows版本的Perl64下没有找到)。

自己编写Perl模块话,参考一些现成的脚本来写是个不错的选择,刚才在网上看到markdown就是用perl写的:

Perl快速入门_第5张图片

完后,请立即找一份正二八紧的Perl编程书籍来瞧一瞧,之后就可以开始尝试写点东西了。

你可能感兴趣的:(杂)