Perl--包和模块
发布时间:2020-12-15 23:50:04 所属栏目:大数据 来源:网络整理
导读:模块就是用包来实现的使代码段不发生冲突而用以分开代码的空间。把变量和函数分为不同区间的标记。不同空间中的变量或函数可以同名。使用变量要带上名空间的前缀$name::a。用包来实现名字空间一个包就是一个文件Perl5 用包来创建模块:require: 类似C语言的in
模块就是用包来实现的 使代码段不发生冲突而用以分开代码的空间。 把变量和函数分为不同区间的标记。不同空间中的变量或函数可以同名。使用变量要带上名空间的前缀$name::a。 用包来实现名字空间 一个包就是一个文件 Perl5 用包来创建模块: require: 类似C语言的include 把其他地方写好的程序包含进来 require 运行到时才把程序包含进来 use 把模块导入你的Perl程序中 将模块导入你的Perl程序中使用use语句 use Mymodule; 这样,模块Mymodule中的子程序和变量就可以使用了。 取消导入模块使用no语句 , no Mymodule; 1。编译时运行:use相当于在BEGIN{}中执行,把use用于互斥条件会出错。if(con){use mod1;}else{use mod2;}实际 上是use mod1;use mod2;if(con){}else{}当mod2不存在是出错。此时用require. 2。带参数的use add 2,2;使用import函数接收参数 ('add',2,2) use mod ('a','b')只引入a,b 3. use strict; use Config编译环境存在%Config中,如Config{'osname'}; use vars想使用全局变量,但又用了strict(使用my). use vars qw($file); use strict; 变量必须是my声明 use vars想使用全局变量,但又用了strict(使用my). use vars qw($file); 在 Perl 里,一个名字空间叫一个包。 构造含义 $days 简单标量值 $days $days[28] 数组 @days 的第二十九个元素 $days{'Feb'} 散列 %days 的“Feb”值 构造含义 ${days} 和 $days 一样,不过在字母数字前面不易混淆 $Dog::days 在 Dog 包里面的不同的 $days 变量 $#days 数组 @days 的最后一个索引 $days->[28] $days一个引用指向的数组的第二十九个元素 $days[0][2] 多维数组 $days{200}{'Feb'} 多维散列 $days{2000,'Feb'} 多维散列枚举 Perl 里的符号表也被称为包(package),因此这些变量常被称为包变量 任何提到 $Dog::bert 的程序都是获取位于 Dog:: 包的变量 $bert main默认的包名,没有单独的文件 包定义: 名字空间namespace: 使代码段不发生冲突而用以分开代码的空间。 把变量和函数分为不同区间的标记,不同空间中的变量或函数可以同名。使用变量要带上名空间的前缀$name::a 包定义 package mypack; 得到main包所有的变量名: [oracle@jhoa 2]$ cat 1.pl foreach $key (keys %main::) {print "$$key => $main::{$key}n";} [oracle@jhoa 2]$ perl 1.pl $/ => *main::/ $stderr => *main::stderr $key => *main::key $utf8:: => *main::utf8:: $" => *main::" $CORE:: => *main::CORE:: $DynaLoader:: => *main::DynaLoader:: $stdout => *main::stdout $attributes:: => *main::attributes:: $ => *main:: $stdin => *main::stdin $ARGV => *main::ARGV $INC => *main::INC $ENV => *main::ENV $Regexp:: => *main::Regexp:: $UNIVERSAL:: => *main::UNIVERSAL:: $$ => *main::$ $_<perlio.c => *main::_<perlio.c $main:: => *main::main:: $- => *main::- $_<perlmain.c => *main::_<perlmain.c $PerlIO:: => *main::PerlIO:: $_<universal.c => *main::_<universal.c $0 => *main::0 => *main:: $@ => *main::@ $_<xsutils.c => *main::_<xsutils.c $STDOUT => *main::STDOUT $IO:: => *main::IO:: $ => *main:: $_ => *main::_ $+ => *main::+ $STDERR => *main::STDERR $Internals:: => *main::Internals:: $STDIN => *main::STDIN $DB:: => *main::DB:: $<none>:: => *main::<none>:: [oracle@jhoa 2]$ cat 1.pl foreach $key (keys %main::) {print "$$key => $main::{$key}n";} 得到变量$a的值print ${$main::{'a'}}; 存储变量和子程序的名字的缺省符号表为main包,如果在程序里定义了其它的包,当你想切换回去使用缺省的符号表,可以重新指定main包 。 2.5.1 名字查找 常用通用含义替换 ' ' q// 文本字串否 " " qq// 文本字串是 ` ` qx// 执行命令是 () qw// 单词数组否 // m// 模式匹配是 s/// s/// 模式替换是 y/// tr/// 字符转换否 " " qr// 正则表达式是 [oracle@jhoa 2]$ cat 2.pl unlink('aa'); 删除aa文件 [oracle@jhoa 2]$ cat 3.pl @files=qw/1 2 3 4 5 6/; while (@files) { my $file = shift @files; print "$file is $filen"; } [oracle@jhoa 2]$ perl 3.pl $file is 1 $file is 2 $file is 3 $file is 4 $file is 5 $file is 6 [oracle@jhoa 2]$ cat 4.pl @stuff = ("one","two","three"); $stuff = @stuff; print "$stuff is $stuffn"; 2.11.2 行输入(尖角)操作符 @line = <STDIN>; foreach (@line){ print "$_ is $_n"; }; @line = <>; foreach (@line){ print "$_ is $_n"; }; <> 指定文件获得 <STDIN>获取标准输入 2.11.3 文件名聚集操作符 @files=<*.pl>; foreach (@files){print $_}; 使用模块的例子: [oracle@june2 perl]$ cat a1.pl #!/usr/bin/perl use integer; $result = 2.4 + 2.4; print "$resultn"; no integer; $result = 2.4 + 2.4; print "$resultn"; [oracle@june2 perl]$ perl a1.pl 4 4.8 如果use或no语句出现在语句块中,则只在该块的有效范围内起作用 模块的说明,常嵌入在模块中用perldoc mod来查看 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |