81、Perl与Python编程入门指南

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开发等领域广泛应用。无论是初学者还是有经验的开发者,都可以根据自己的需求选择合适的语言进行学习和实践。希望本文能为你打开编程的大门,开启一段有趣的编程之旅。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值