乱读天书, 不求甚解
周祎骏的个人云笔记
Toggle navigation
乱读天书, 不求甚解
主页
Linux:系统配置
Linux:用户管理
Linux:优化排错
Linux:进程调度
Linux:文件系统
Linux:网络
Linux:系统服务
Linux:安全
Linux:内核
容器:Docker
容器:containerd
容器编排:Kubernetes
IAC:Terraform
大数据:Hadoop
大数据:Zookeeper
大数据:Hbase
消息队列:rsyslog
消息队列:kafka
数据库:MySQL
数据库:MongoDB
搜索引擎:Elasticsearch
时序数据库:OpenTSDB
网站服务:Nginx
编程:Bash
编程:Perl
编程:Python
编程:C
编程:JAVA
编程:Rust
版本控制:gitlab
知识管理:docusaurus
常用小工具
关于我
标签
perl 2.1 引入其他perl脚本
2016-05-24 13:11:41
56
0
0
admin
#一些基础知识 **@INC** perl 引用其它文件,use/do/require 的时候寻找文件的路径(类似JAVA 的JAVA_PATH) **%INC** 加载进来的文件列表,键=>模块名,值=>文件路径 **do**,**use**,**require** 是常用的加载其他文件,模块的方式。 **package** 将一些代码归纳进一个命名空间(作为一个包,或者面向对象的类) #do 官方文档:http://perldoc.perl.org/functions/do.html 立即尝试去读取文件,编译文件,运行文件(所以一般不要放到循环中),文件的最后一句话会作为返回值。不会出现新的进程。 如果读取文件失败,错误会写进\$@,返回undef 如果编译文件失败,错误会写进\$!,返回undef 文件的最后一句话是返回值,最后一句话写0,就相当于失败了,一般文件会以1结尾 ##没有用package 的时候 *脚本* ```perl [root@test ~]# cat r.pl #!/usr/bin/perl use warnings; use strict; print "main process is $$\n"; my $return = do "$ARGV[0]"; if ($@){warn "Fail to compile $ARGV[0]: $@";exit;} #读文件失败 unless (defined $return){warn "Fail to read $ARGV[0]: $!";exit;} #编译失败 unless ($return){warn "Fail to run $ARGV[0]";exit;}#比如返回值为0 my $c = $a + $b; #调用那个包的变量 print "$a + $b = $c\n"; lala(); #调用那个包的方法 ``` *配置* ```perl [root@test ~]# cat cfg.pl #!/usr/bin/perl our $a=1; #our 让别人可以调用 our $b=2; print "run cfg by $$\n"; sub lala(){ print "lala\n"; } 1; #这样才可以正常退出,否则有被认为运行失败的风险 ``` *运行* ```perl [root@test ~]# ./r.pl cfg.pl main process is 9229 run cfg by 9229 1 + 2 = 3 lala ``` ##用package 的时候 *脚本* ```perl [root@test ~]# cat ./r.pl #!/usr/bin/perl use warnings; use strict; print "main process is $$\n"; my $return = do "$ARGV[0]"; if ($@){warn "Fail to compile $ARGV[0]: $@";exit;} unless (defined $return){warn "Fail to read $ARGV[0]: $!";exit;} unless ($return){warn "Fail to run $ARGV[0]";exit;} my $c= ${la::a}+${la::b}; #调用 la 命名空间的变量 print "${la::a} + ${la::b} = $c\n"; la::lala(); #调用la 命名空间的方法 ``` *配置* ```perl [root@test ~]# cat cfg.pl #!/usr/bin/perl package la; #打成一个叫la 的包或者类, 其实是把底下的东西都放进一个叫la的命名空间 our $a=1; our $b=2; print "run cfg by $$\n"; sub lala(){ print "lala\n"; } 1; ``` *运行* ```perl [root@test ~]# ./r.pl cfg.pl main process is 9270 run cfg by 9270 1 + 2 = 3 lala ``` *** #require require "file_name" 类似于do file require file_name 类似于 do file.pm (file_name 中的::会作为目录“/”符号) require 是在运行时导入文件。 强烈建议require 的文件以"1;"结尾 *** #use 相当于 BEGIN { require Module } use 不能像do 和 require 一样 my \$return = use XXX; 只能use xxx; use 在编译时导入文件,因此,如果要定义@INC的话,可以在运行脚本前export PERL5LIB=XXX,也可以这样定义 ```perl use lib ("./dir"); #或者 BEGIN { unshift @INC , "./dir";} ```
上一篇:
perl 1.03 获取运行路径
下一篇:
perl 2.2 面向对象的写法
文档导航