首页 > 编程语言 >无涯教程-Perl - 包和模块

无涯教程-Perl - 包和模块

时间:2023-08-04 14:37:16浏览次数:42  
标签:__ 教程 无涯 Perl Person 模块 print Foo

package 语句将当前命名上下文切换到指定的名称空间。

以下是在文件中包含main和Foo软件​​包的示例。在这里,特殊变量__PACKAGE__已用于打印软件包名称。

#!/usr/bin/perl

# This is main package
$i=1; 
print "Package name : " , __PACKAGE__ , " $i\n"; 

package Foo;
# This is Foo package
$i=10; 
print "Package name : " , __PACKAGE__ , " $i\n"; 

package main;
# This is again main package
$i=100; 
print "Package name : " , __PACKAGE__ , " $i\n"; 
print "Package name : " , __PACKAGE__ ,  " $Foo::i\n"; 

1;

执行上述代码后,将产生以下输出-

Package name : main 1
Package name : Foo 10
Package name : main 100
Package name : main 10

BEGIN和END块

您可以定义任意数量的名为BEGIN和END的代码块,它们分别充当构造函数和析构函数。

BEGIN { ... }
END { ... }
BEGIN { ... }
END { ... }
  • 每个BEGIN 块在加载和编译perl脚本之后但在执行任何其他语句之前执行。

  • 每个END块都在perl解释器退出之前执行。

  • 在创建Perl模块时,BEGIN和END块特别有用。

以下示例显示其用法-

#!/usr/bin/perl

package Foo;
print "Begin and Block Demo\n";

BEGIN { 
   print "This is BEGIN Block\n" 
}

END { 
   print "This is END Block\n" 
}

1;

执行上述代码后,将产生以下输出-

This is BEGIN Block
Begin and Block Demo
This is END Block

Perl模块

Perl模块是在库文件中定义的可重用程序包,其名称与扩展名为.pm的程序包名称相同。

一个名为 Foo.pm 的Perl模块文件可能包含这样的语句。

#!/usr/bin/perl

package Foo;
sub bar { 
   print "Hello $_[0]\n" 
}

sub blat { 
   print "World $_[0]\n" 
}
1;

关于Perl模块的几点要点

  • require 和 use 函数将加载模块。

  • 都使用 @INC 中的搜索路径列表来查找模块。

  • 两个函数 require 和 use 调用 eval 函数来处理代码。

  • 底部的 1; 导致eval判断为TRUE(因此不会失败)。

require 函数

可以通过调用 require 函数来加载模块,如下所示:

#!/usr/bin/perl

require Foo;

Foo::bar( "a" );
Foo::blat( "b" );

use 函数

可以通过调用 use 函数来加载模块。

#!/usr/bin/perl

use Foo;

bar( "a" );
blat( "b" );

注意,我们不必完全限定包的函数名。 use 函数将从模块中导出符号列表,并在模块内添加一些声明。

require Exporter;
@ISA=qw(Exporter);

然后,通过填充名为 @EXPORT 的列表变量,提供符号列表(标量,列表,哈希,子示例程等):如-

package Module;

require Exporter;
@ISA=qw(Exporter);
@EXPORT=qw(bar blat);

sub bar { print "Hello $_[0]\n" }
sub blat { print "World $_[0]\n" }
sub splat { print "Not $_[0]\n" }  # Not exported!

1;

创建Perl模块

准备好交付Perl模块时,可以使用标准方法来创建Perl模块树。这是通过 h2xs 实用程序完成的。该实用程序与Perl一起提供。这是使用h2xs的语法-

$h2xs -AX -n  ModuleName

如,如果您的模块在 Person.pm文件中可用,则只需发出以下命令-

$h2xs -AX -n Person

这将产生以下输出-

Writing Person/lib/Person.pm
Writing Person/Makefile.PL
Writing Person/README
Writing Person/t/Person.t
Writing Person/Changes
Writing Person/MANIFEST

这是这些选项的描述-

  • -A 省略了Autoloader代码(由定义大量不常用子示例程的模块最佳使用)。

  • -X 省略了XS元素(eXternal子示例程,其中eXternal表示Perl外部,即C)。

  • -n 指定模块的名称。

安装Perl模块

以tar.gz文件的形式下载Perl模块。按照以下顺序安装任何以 Person.tar.gz 文件下载的Perl模块 Person.pm

tar xvfz Person.tar.gz
cd Person
perl Makefile.PL
make
make install

参考链接

https://www.learnfk.com/perl/perl-packages-modules.html

标签:__,教程,无涯,Perl,Person,模块,print,Foo
From: https://blog.51cto.com/u_14033984/6961961

相关文章

  • 架设传奇技术教程同目录下无法找到DLL文件"KERNELBASE"处理办法
    同目录下无法找到DLL文件:"KERNELBASE"】.请与作者联系.的弹窗办法和解决架设传奇版本启动引擎或者启动没多久的时候经常遇到弹窗提示【同目录下无法找到DLL文件:"KERNELBASE"】.请与作者联系.的弹窗,如上图所示,下面我来给大家介绍下如何解决这个问题。一般出现这个问题都是windows200......
  • CephFS快照镜像(官方教程)
    CephFS支持通过cephfs-mirror工具将快照异步复制到远程CephFS文件系统。通过镜像快照数据,然后创建与要同步的快照同名的快照(对于远程文件系统上的给定目录)来同步快照。1.要求【主(本地)和辅助(远程)Ceph集群版本应为Pacific或更高版本。】2.创建用户首先为镜像守护程序......
  • 无涯教程-Perl - 数据库访问
    本章教您如何在Perl脚本中访问数据库。从Perl5开始,使用DBI模块编写数据库应用程序变得非常容易。DBI代表Perl的数据库独立接口,这意味着DBI在Perl代码和基础数据库之间提供了一个抽象层,使您可以真正轻松地切换数据库实现。DBI体系结构DBI独立于后端中可用的任何数据库。无论......
  • 对拍模板使用教程
    对拍模板(Poweredby@tianbiandeshenghuo11)本模板基于CC0-1.0知识共享协议开源。模板下载地址:Link宣传:TBSHOJ注意,当前服务器即将到期。我们将会在不久后更新服务器。届时该网址将会失效。为您造成的不便,敬请谅解。模板使用教程:在下发模板中有几个文件。sol.cpp是暴......
  • Python如何开发桌面应用程序?Python基础教程,第十三讲,图形界面
    当使用桌面应用程序的时候,有没有那么一瞬间,想学习一下桌面应用程序开发?行业内专业的桌面应用程序开发一般是C++,C#来做,Java开发的也有,但是比较少。本节课会介绍Python的GUI(图形用户界面)编程,用Python也可以写出漂亮的桌面程序,建议此次课程大家稍作了解不要浪费太多时间,因为没有哪家......
  • "No appenders found for logger" and "Please configure log4j properly"
    WhydoIseeawarningabout"Noappendersfoundforlogger"and"Pleaseconfigurelog4jproperly"?Thisoccurswhenthedefaultconfigurationfileslog4j.propertiesandlog4j.xmlcannotbefoundandtheapplicationperformsnoexplici......
  • Java 诊断工具 Arthas 教程学习笔记
    Java诊断工具Arthas教程学习笔记 Java诊断利器Arthas,是阿里的一款开源工具。Github-alibaba/arthas 上可以看到它的介绍。了解它,主要是最近对分析Java错误堆栈比较感兴趣,机缘巧合看到了它。本文记录的内容,就是基于它官网的文档摘抄的,涉及的截图可能由于篇幅有限,不是......
  • python教程 入门学习笔记 第6天 数据类型转换 字符串转换成数值 数值之间互转 其它类
    4、数据类型转换1)字符串转换成数值:int()-----------将值转换成整数float()-----------将值转换成小数str()-----------将值转换成字符串bool()-----------将值转换成布尔值例如:int()将值转换成整数s1="188"#字符串ns1=int(s1)#转换成整型数值print(ns1+8)#打印数......
  • 【Axure 教程】动态面板
    【动态面板】是Axure中另外一个神级的元件,它的江湖地位可以说跟【中继器】不相上下,【动态面板】提供了简单的配置,却可以实现非常丰富的效果,在实际设计中应用非常广泛。对于刚入门的产品经理来说,学习【动态面板】要比学习【中继器】容易得多,基本很快就能上手,但是很多人学习完之......
  • Windows搭建ELK教程
    ELK由ElasticSearch(ES)、Logstash和Kiabana三个开源工具组成 1首先下载如下:分别去https://www.elastic.co/downloads/下载上面三个windows的安装包,以为Logstash依赖ES服务,Kibana依赖Logstash和ES,所以安装和启动顺序分别为:ES->Logstash->Kibana  2安装配......