news 2026/4/29 15:05:34

HoRain云--Perl OOP编程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
HoRain云--Perl OOP编程

🎬 HoRain云小助手:个人主页

🔥 个人专栏: 《Linux 系列教程》《c语言教程》

⛺️生活的理想,就是为了理想的生活!


⛳️ 推荐

前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。

专栏介绍

专栏名称

专栏介绍

《C语言》

本专栏主要撰写C干货内容和编程技巧,让大家从底层了解C,把更多的知识由抽象到简单通俗易懂。

《网络协议》

本专栏主要是注重从底层来给大家一步步剖析网络协议的奥秘,一起解密网络协议在运行中协议的基本运行机制!

《docker容器精解篇》

全面深入解析 docker 容器,从基础到进阶,涵盖原理、操作、实践案例,助您精通 docker。

《linux系列》

本专栏主要撰写Linux干货内容,从基础到进阶,知识由抽象到简单通俗易懂,帮你从新手小白到扫地僧。

《python 系列》

本专栏着重撰写Python相关的干货内容与编程技巧,助力大家从底层去认识Python,将更多复杂的知识由抽象转化为简单易懂的内容。

《试题库》

本专栏主要是发布一些考试和练习题库(涵盖软考、HCIE、HRCE、CCNA等)

目录

⛳️ 推荐

专栏介绍

1. 基本概念

2. 简单示例

定义类(Person.pm):

使用类(main.pl):

3. 继承

子类(Employee.pm):

使用继承:

4. 现代 Perl OOP 模块

Moose(功能完整):

Moo(轻量级 Moose 兼容):

5. 关键点总结

6. 何时使用

示例:完整现代 OOP(Moo)

进阶主题


Perl 的面向对象编程(OOP)基于包(package)和引用(reference),通过 bless 操作将引用与类关联。以下是核心概念和示例:


1.基本概念


2.简单示例

定义类(Person.pm):

package Person; # 类名 use strict; use warnings; # 构造函数 sub new { my ($class, $name, $age) = @_; my $self = { name => $name, age => $age, }; bless $self, $class; # 将引用与类关联 return $self; } # 实例方法 sub get_name { my $self = shift; return $self->{name}; } sub set_name { my ($self, $name) = @_; $self->{name} = $name; } sub get_age { my $self = shift; return $self->{age}; } sub set_age { my ($self, $age) = @_; $self->{age} = $age; } sub info { my $self = shift; return "Name: $self->{name}, Age: $self->{age}"; } 1; # 包必须返回真值

使用类(main.pl):

use strict; use warnings; use Person; # 加载类 my $person = Person->new("Alice", 30); # 创建对象 print $person->info(), "\n"; # 调用方法 $person->set_age(31); print "New age: ", $person->get_age(), "\n";

3.继承

通过@ISA数组指定父类:

子类(Employee.pm):

package Employee; use strict; use warnings; use base 'Person'; # 继承 Person # 扩展构造函数 sub new { my ($class, $name, $age, $job) = @_; my $self = $class->SUPER::new($name, $age); # 调用父类构造 $self->{job} = $job; return $self; } # 新增方法 sub get_job { my $self = shift; return $self->{job}; } # 重写方法 sub info { my $self = shift; my $info = $self->SUPER::info(); # 调用父类方法 return "$info, Job: $self->{job}"; } 1;

使用继承:

use Employee; my $emp = Employee->new("Bob", 25, "Engineer"); print $emp->info(), "\n"; # 输出:Name: Bob, Age: 25, Job: Engineer

4.现代 Perl OOP 模块

传统方式较底层,推荐使用现代模块:

Moose(功能完整):

package Person; use Moose; has 'name' => (is => 'rw', isa => 'Str'); has 'age' => (is => 'rw', isa => 'Int'); sub info { my $self = shift; return $self->name . " is " . $self->age . " years old"; } __PACKAGE__->meta->make_immutable; # 优化性能 1;

Moo(轻量级 Moose 兼容):

package Person; use Moo; has name => (is => 'rw'); has age => (is => 'rw'); sub info { my $self = shift; return $self->name . ", " . $self->age; } 1;

5.关键点总结

传统方式

现代方式(推荐)

手动 bless 哈希引用

使用 Moose/Moo 定义属性

通过 @ISA 实现继承

通过 extends 关键字继承

访问器需手动编写

自动生成访问器(is => 'rw')

无类型检查

支持类型约束(isa => 'Int')


6.何时使用


示例:完整现代 OOP(Moo)

# File: Person.pm package Person; use Moo; use namespace::clean; has name => (is => 'rw', required => 1); has age => (is => 'rw', default => sub { 20 }); sub greet { my $self = shift; return "Hi, I'm " . $self->name; } 1; # 使用: use Person; my $p = Person->new(name => "Carol"); print $p->greet;

进阶主题

Perl OOP 灵活但需注意代码规范。建议新项目从Moo​ 开始,平衡功能和简洁性。

❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/29 15:04:33

手把手教你组装BUFF67 V3 R2:从PCB到蓝牙5.2双模键盘的完整避坑指南

手把手教你组装BUFF67 V3 R2:从PCB到蓝牙5.2双模键盘的完整避坑指南 第一次接触机械键盘DIY的朋友们,看到BUFF67 V3 R2套件时可能会既兴奋又忐忑。这款支持蓝牙5.2双模和热插拔的60%布局键盘,凭借其出色的可玩性和稳定的无线性能,…

作者头像 李华
网站建设 2026/4/29 14:59:28

成年人最廉价的错觉:靠“好说话”换取尊重

上周三晚上快十一点,我在航天桥附近的一个烤串店,碰见了以前团队里的小林。 小林是个性格特温和的架构师,平时在组里出了名的“好说话”。那天他坐在角落里,面前摆着几瓶空啤酒,眼圈通红。 我坐过去陪他喝了两杯。他…

作者头像 李华