Perl--包

在 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}
";}
[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}
";}


得到变量$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 $file
";
}
[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 $stuff
";


2.11.2 行输入(尖角)操作符

@line = <STDIN>;
foreach   (@line){
print "$_ is $_
";
};


@line = <>;
foreach   (@line){
print "$_ is $_
";
};

<> 指定文件获得

<STDIN>获取标准输入


2.11.3 文件名聚集操作符
@files=<*.pl>;
foreach (@files){print $_};


原文地址:https://www.cnblogs.com/hzcya1995/p/13351973.html