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.pl3. 继承子类Employee.pm使用继承4. 现代 Perl OOP 模块Moose功能完整Moo轻量级 Moose 兼容5. 关键点总结6. 何时使用示例完整现代 OOPMoo进阶主题Perl 的面向对象编程OOP基于包package和引用reference通过 bless 操作将引用与类关联。以下是核心概念和示例1.基本概念类一个包package包含数据和方法。对象被祝福bless的引用通常是哈希引用。方法类的子程序第一个参数为对象或类名。2.简单示例定义类Person.pmpackage 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.pluse 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.pmpackage 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: Engineer4.现代 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 Int6.何时使用小型脚本/遗留代码传统 bless 方式。新项目使用Moo轻量或Moose功能全。性能关键考虑Moo 或Class::Accessor。示例完整现代 OOPMoo# 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, Im . $self-name; } 1; # 使用 use Person; my $p Person-new(name Carol); print $p-greet;进阶主题角色Role类似接口/混入Moose::Role。多继承通过ISA (Class1, Class2)。私有方法约定以_开头非强制。Perl OOP 灵活但需注意代码规范。建议新项目从Moo 开始平衡功能和简洁性。❤️❤️❤️本人水平有限如有纰漏欢迎各位大佬评论批评指正如果觉得这篇文对你有帮助的话也请给个点赞、收藏下吧非常感谢! Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧