Perl与Python编程入门指南
1. Perl编程基础
Perl是一种功能强大的脚本语言,在系统管理和文本处理方面表现出色。以下是一些Perl的基本操作和代码示例。
1.1 模块安装
要让Perl检查系统并下载安装大量模块,可以使用
install
关键字,在提示符下指定
Bundle
,然后按回车键,示例如下:
cpan> install Bundle::CPAN
若要下载指定模块,使用
get
关键字,例如:
cpan> get Mail::Sendmail
模块源文件会下载到
.cpan
目录,接着使用
install
关键字构建并安装模块:
cpan> install Mail::Sendmail
也可以在命令行使用Perl的
-e
选项完成模块的检索、构建和安装:
# perl -MCPAN -e "install Mail::Sendmail"
1.2 日志清理
许多程序会维护各种日志,其中很多信息可能是冗余或无用的。下面的Perl程序可以从文件中移除包含特定单词或短语的行:
#!/usr/bin/perl
# Be careful using this program!
# This will remove all lines that contain a given word
# Usage: remove <word> <file>
$word=@ARGV[0];
$file=@ARGV[1];
if ($file) {
# Open file for reading
open (FILE, "$file") or die "Could not open file: $!";
@lines=<FILE>;
close FILE;
# Open file for writing
open (FILE, ">$file") or die "Could not open file for writing: $!";
for (@lines) {
print FILE unless /$word/;
} # End for
close FILE;
} else {
print "Usage: remove <word> <file>\n";
} # End if...else
该程序使用
<FILE>
符号将文件内容读入数组,然后将不匹配命令行指定模式的行写回文件。如果
open
语句失败,
die
函数会终止程序并显示错误信息,
$!
是操作系统返回的错误信息。
1.3 发布到Usenet
如果工作需要定期向Usenet发布内容(如FAQ列表),以下Perl程序可以实现自动化:
#!/usr/bin/perl
# load the post data into @post
open (POST, "post.file");
@post = <POST>;
close POST;
# import the NNTP module
use Net::NNTP;
$NNTPhost = 'news';
# attempt to connect to the remote host;
# print an error message on failure
$nntp = Net::NNTP->new($NNTPhost)
or die "Cannot contact $NNTPhost: $!";
# $nntp->debug(1);
$nntp->post()
or die "Could not post article: $!";
# send the header of the post
$nntp->datasend("Newsgroups: news.announce\n");
$nntp->datasend("Subject: FAQ - Frequently Asked Questions\n");
$nntp->datasend("From: ADMIN <root>\n");
$nntp->datasend("\n\n");
# for each line in the @post array, send it
for (@post) {
$nntp->datasend($_);
} # End for
$nntp->quit;
该程序使用
Net::NNTP
模块,可通过
perldoc Net::NNTP
查看更多文档。
1.4 单行代码与Schwartzian变换
Perl擅长单行代码编程。Schwartzian变换是一种对数组进行非显而易见排序的方法。例如,按字符串长度对字符串列表进行排序:
@sorted_by_length =
map { $_ => [0] } # Extract original list
sort { $a=>[1] <=> $b=>[1] } # Sort by the transformed value
map { [$_, length($_)] } # Map to a list of element lengths
@list;
从右向左阅读这段代码,首先
map
操作将列表转换为哈希,键为列表元素,值为元素长度;接着
sort
函数按值排序;最后
map
操作将哈希转换回数组。
1.5 命令行处理
Perl在解析各种程序输出方面表现出色。以下示例使用Perl列出大于10KB的文件:
matthew@seymour:~$ ls -la | perl -nae 'print "$F[8] is $F[4]\n" if $F[4] > 10000;'
-n
开关表示Perl代码对输出的每一行运行,
-a
开关自动将输出分割到
@F
数组,
-e
开关表示命令行后续为Perl代码。
1.6 相关Ubuntu和Linux命令
在Linux中使用Perl时常用的命令和工具如下:
| 命令/工具 | 描述 |
| ---- | ---- |
| a2p | 将awk脚本转换为Perl的过滤器 |
| find2perl | 根据
find
命令行创建Perl代码的实用工具 |
| perldoc | 阅读Perl文档的实用工具 |
| s2p | 将sed脚本转换为Perl的过滤器 |
| vi | 文本编辑器(实际为vim) |
2. Python编程基础
Python正逐渐在命令行脚本领域占据主导地位,其精确简洁的语法使其易于学习。
2.1 Python在Linux上的使用
大多数Linux和UNIX版本(包括macOS)都预装了Python。Python二进制文件通常安装在
/usr/bin/python
(或
/usr/bin/python3
),运行该命令可进入Python交互式解释器:
matthew@seymour:~$ python
Python 3.6.4 (default, Dec27 2017, 13:02:49)
[GCC 7.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
在交互式解释器中可以设置和获取变量:
>>> python = 'great'
>>> python
'great'
完成操作后,按
Ctrl+D
退出,此时所有变量和命令会被解释器遗忘,因此复杂的Python程序通常保存为脚本。
2.2 Python基础语法
Python的语法逻辑清晰,大多数人能快速掌握。
2.2.1 数字处理
Python处理数字更加精确,除了常见的运算符(
+
、
-
、
/
、
*
),还增加了
%
(取模)、
**
(幂运算)和
//
(整除):
>>> a = 5
>>> b = 10
>>> a * b
50
>>> a / b
0
>>> b = 10.0
>>> a / b
0.5
>>> a // b
0.0
在Python 3.x系列中,整数类型会自动为大数字提供额外精度,而在2.x中,对于超出普通整数范围的数字需要使用单独的长整数类型。
2.2.2 字符串处理
Python将字符串存储为不可变的字符序列,可使用等号直接赋值:
>>> mystring = 'hello';
>>> myotherstring = "goodbye";
>>> test = "Are you really Jayne Cobb?"
可以通过索引访问字符串中的字符,索引从0开始:
>>> string = "This is a test string"
>>> string[0]
'T'
还可以使用切片操作提取字符串的部分内容:
>>> string[0:4]
'This'
Python字符串支持使用
+
和
*
运算符进行拼接和重复操作,同时还提供了一系列内置方法,如
capitalize()
、
lower()
、
title()
和
upper()
等:
>>> string = "This is a test string"
>>> string.upper()
'THIS IS A TEST STRING'
>>> string.lower()
'this is a test string'
以下是Python字符串操作的流程图:
graph TD;
A[定义字符串] --> B[索引访问];
A --> C[切片操作];
A --> D[运算符操作];
A --> E[内置方法调用];
通过以上介绍,你可以初步了解Perl和Python的基本编程知识,后续可以进一步深入学习和实践。
2.3 Python函数
在Python中,函数是组织好的、可重复使用的代码块,用于执行特定任务。以下是定义和调用函数的基本示例:
def greet(name):
"""This function greets the person passed in as parameter"""
print("Hello, " + name + ". How are you?")
# 调用函数
greet("John")
在这个例子中,
greet
函数接受一个参数
name
,并打印出一条问候语。函数定义以
def
关键字开头,后面跟着函数名和括号内的参数列表。函数体是缩进的代码块,并且可以包含文档字符串(docstring),用于描述函数的功能。
函数还可以返回值,例如:
def add_numbers(a, b):
return a + b
result = add_numbers(3, 5)
print(result)
这个
add_numbers
函数接受两个参数,将它们相加并返回结果。调用函数时,返回值可以赋给一个变量。
2.4 Python面向对象编程
Python是一种面向对象的编程语言,支持类和对象的概念。类是对象的蓝图,定义了对象的属性和方法。以下是一个简单的类定义和对象创建的示例:
class Dog:
def __init__(self, name, age):
self.name = name
self.age = age
def bark(self):
print(self.name + " says woof!")
# 创建对象
my_dog = Dog("Buddy", 3)
# 调用对象的方法
my_dog.bark()
在这个例子中,
Dog
类有一个构造函数
__init__
,用于初始化对象的属性。
bark
方法是类的一个实例方法,用于让狗发出叫声。创建
Dog
类的对象时,会自动调用构造函数并传入相应的参数。
以下是Python面向对象编程的基本流程表格:
| 步骤 | 描述 |
| ---- | ---- |
| 定义类 | 使用
class
关键字定义类,包含属性和方法 |
| 初始化对象 | 调用类的构造函数创建对象 |
| 调用方法 | 通过对象调用类的实例方法 |
2.5 Python标准库和Python包索引
Python拥有丰富的标准库,提供了各种功能模块,如文件操作、网络编程、数据处理等。例如,使用
os
模块可以进行文件和目录操作:
import os
# 获取当前工作目录
current_dir = os.getcwd()
print(current_dir)
# 列出目录中的文件
files = os.listdir(current_dir)
for file in files:
print(file)
除了标准库,Python还有Python包索引(PyPI),这是一个存储第三方Python包的仓库。可以使用
pip
工具从PyPI安装包,例如安装
requests
包用于网络请求:
pip install requests
安装后,可以在Python代码中导入并使用该包:
import requests
response = requests.get('https://www.example.com')
print(response.text)
以下是使用Python标准库和第三方包的流程图:
graph TD;
A[导入标准库模块] --> B[使用标准库功能];
C[使用pip安装第三方包] --> D[导入第三方包];
D --> E[使用第三方包功能];
总结
通过本文的介绍,我们了解了Perl和Python两种编程语言的基础知识。Perl在系统管理、文本处理和网络发布等方面有强大的功能,提供了丰富的模块和便捷的命令行处理能力。而Python以其简洁的语法、强大的标准库和活跃的第三方包社区,在命令行脚本、数据分析、Web开发等领域广泛应用。无论是初学者还是有经验的开发者,都可以根据自己的需求选择合适的语言进行学习和实践。希望本文能为你打开编程的大门,开启一段有趣的编程之旅。
超级会员免费看
9

被折叠的 条评论
为什么被折叠?



