加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl

发布时间:2020-12-16 00:33:50 所属栏目:大数据 来源:网络整理
导读:? @?????? 数组?????????????????????????? $x{}?? x名字前面是美元符号($),后面是花括号({}),则其为 hash 元素 %?????? 要引用整个 hash,使用百分号(“ )作为前缀。前面几页中使用的 hash 的名字为%family_name。 $!????? 系统产生的一些可读的信息,也可能
?


@?????? 数组??????????????????????????

$x{}?? x名字前面是美元符号($),后面是花括号({}),则其为 hash 元素
%?????? 要引用整个 hash,使用百分号(“ )作为前缀。前面几页中使用的 hash 的名字为%family_name。
$!????? 系统产生的一些可读的信息,也可能是出错的信息
$_???? 子函数参数变量自己本身
@_???? 子程序的私有变量 ( @_? 在某个函数内,数组 @_ 包含传递给该函数的所有参数。参见 perlsub)
&x???? 调用子函数x
<>??? 数据输入.如果没有指定文件名,则其从标准输入流中自动打开和关闭一系列文件进行读入

perl默认的内部变量

$- 当前页可打印的行数,属于Perl格式系统的一部分
$! 根据上下文内容返回错误号或者错误串
$” 列表分隔符
$# 打印数字时默认的数字输出格式
$$ Perl解释器的进程ID
$% 当前输出通道的当前页号
$& 与上个格式匹配的字符串
$( 当前进程的组ID
$) 当前进程的有效组ID
$* 设置1表示处理多行格式.现在多以/s和/m修饰符取代之.
$,当前输出字段分隔符
$. 上次阅读的文件的当前输入行号
$/ 当前输入记录分隔符,默认情况是新行
$: 字符设置,此后的字符串将被分开,以填充连续的字段.
$; 在仿真多维数组时使用的分隔符.
$? 返回上一个外部命令的状态
$@ Perl解释器从eval语句返回的错误消息
$[ 数组中第一个元素的索引号
$ 当前输出记录的分隔符
$] Perl解释器的子版本号
$^ 当前通道最上面的页面输出格式名字
$^A 打印前用于保存格式化数据的变量
$^D调试标志的值
$^E在非UNIX环境中的操作系统扩展错误信息
$^F最大的文件捆述符数值
$^H由编译器激活的语法检查状态
$^I内置控制编辑器的值
$^L发送到输出通道的走纸换页符
$^M备用内存池的大小
$^O操作系统名
$^P指定当前调试值的内部变量
$^R正则表达式块的上次求值结果
$^S当前解释器状态
$^T从新世纪开始算起,脚步本以秒计算的开始运行的时间
$^W警告开关的当前值
$^X Perl二进制可执行代码的名字
$_ 默认的输入/输出和格式匹配空间
$| 控制对当前选择的输出文件句柄的缓冲
$~ 当前报告格式的名字
$` 在上个格式匹配信息前的字符串
$’ 在上个格式匹配信息后的字符串
$+ 与上个正则表达式搜索格式匹配的最后一个括号
$< 当前执行解释器的用户的真实ID
$<digits>含有与上个匹配正则表达式对应括号结果
$= 当前页面可打印行的数目
$> 当前进程的有效用户ID
包含正在执行的脚本的文件名
$ ARGV 从默认的文件句柄中读取时的当前文件名
%ENV 环境变量列表
%INC 通过do或require包含的文件列表
%SIG 信号列表及其处理方式
@_ 传给子程序的参数列表
@ARGV 传给脚本的命令行参数列表
@INC 在导入模块时需要搜索的目录列表

Perl中模块的安装方法

#perl –MCPAN –e shell
install Bundle::CPAN? 更新
reload cpan? 重新加载
install Tk?? 安装pm,用install加上模块名就行了
?

Perl中不错的文章

关于perl变量作用域(原译) http://bbs.chinaunix.net/thread-612342-1-1.html

在perl语法中

BLOCK是一个用{}包围的代码块。EXPR可以是子函数名、正则表达式等。LIST是输入列表

?


=================================命令行参数==================================

??? 命令行参数两种操作方法
整体数组法??? @ARGV
数组元素法??? $ARGV[$i]

??? 象C一样,PERL也有存储命令行参数的数组@ARGV,$ARGV[$i],与C和shell不同的是,$ARGV[0]是第一个参数,而不是程序名本身
#!/usr/bin/perl
for($j=0;$j<4;$j++)
{
print "$ARGV[$j] n";
}???
?
[macg@localhost perltest]$ ./tip.pl 36 gg test a
36?????????????? $ARGV[0]==36
gg
test
a?
?

?
??? $tmp=shift(@ARGV); 把数组@ARGV的元素向前移出一个,其元素数量即减少了一个
shift是数组操作,不是专门为@ARGV准备的,就当@ARGV是普通数组
注意:两个动作:
??? 由数组頭部,将第一個元素取出,并把这个元素做为返回值
??? 数组缩短
其实没必要用shift,因为@ARGV可以访问单个数组元素
#!/usr/bin/perl
for($j=0;$j<4;$j++)
{
print "$ARGV[$j] ";
}
print "n";

$tmp=shift(@ARGV);
print "$tmpn";
for($j=0;$j<4;$j++)
{
print "$ARGV[$j] ";
}
print "n";
?
[macg@localhost perltest]$ ./tip.pl 36 gg test a
36 gg test a
36
gg test a??????? 重新打印参数列(变短了)

?
===================================q指令=====================================

??? q------字符串单引号替代
$target = 'This is what you have';??? 等价于??? $target = q[This is what you have];

??? qq------双引号替代----在cgi编程时最常用
$target = “This is what you have”;??? 等价于??? $target = qq[This is what you have];
#!/usr/bin/perl
@arraytest="hello "test" world";
如果字符串内也有双引号,比如HTTP语句,就会形成双引号套双引号的问题
foreach? (@arraytest) {
?print $_,"n";
}??
?
[macg@localhost perltest]$ ./tip.pl
Bareword found where operator expected at ./tip.pl line 2,near ""hello "test"
??????? (Missing operator before test?)??
出错
?
解决:用qq
#!/usr/bin/perl
@arraytest=qq(hello "test" world);
foreach? (@arraytest) {
?print $_,"n";
}?
?
[macg@localhost perltest]$ ./tip.pl
hello "test" world?
?

?
???? qx------反引号替代,相当于取其内字串命令的输出
$run = `ls -la`;??? 等价于??? $run = qx[ls -la];

??? qw----串列替代??? 双引号和逗号替代
#!/usr/bin/perl
@arraytest=("aaa","bbb","123");
foreach? (@arraytest) {
?print $_,"n";
}
?#!/usr/bin/perl
@arraytest=qw(aaa bbb 123);
foreach? (@arraytest) {
?print $_,"n";
}
?
[macg@localhost perltest]$ ./tip.pl
aaa
bbb
123
?[macg@localhost erltest]$ ./tip.pl
aaa
bbb
123
?


qw也不一定要用括號,可用任何符號做為起始及結束符號
qw/ Mmm NNN Jjj Kkk Xxx /
qw! Mmm NNN Jjj Kkk Xxx !
qw# Mmm NNN Jjj Kkk Xxx #
qw{ Mmm NNN Jjj Kkk Xxx }
qw< Mmm NNN Jjj Kkk Xxx >
qw[ Mmm NNN Jjj Kkk Xxx ]
但里面都是相同的:都是用空格代替双引号和逗号


========================特殊字符===========================================
?@ARGV 命令行参数?? (也是数组)
?$_ 代表缺省变量
?$!????? —— 錯誤訊息內容
?$$?? PID
?$0 程序名
?$&? 结果
STDIN 标准输入
STDOUT 标准输出
STDERR 标准错误输出

__FILE__ 程序文件名
__PACKAGE__ 目前包名


??? $_ 代表缺省变量,语句中缺的变量,可以用$_代替
[macg@localhost perltest]$ vi tip.pl

#!/usr/bin/perl
@arraytest=("aaa","123");
foreach $tmp (@arraytest) {
?print $tmp,"n";
}
?
[macg@localhost perltest]$ ./tip.pl
aaa
bbb
123
?
等价于
[macg@localhost perltest]$ vi tip.pl

#!/usr/bin/perl
@arraytest=("aaa","n";
}
?
[macg@localhost perltest]$ ./tip.pl
aaa
bbb
123
?
??? 甚至可以连$_都缺省了,就更简化了
@arraytest=("aaa","123");
foreach? (@arraytest)
{ print;}
?
[macg@localhost perltest]$ ./tip.pl
aaabbb123[macg@localhost perltest]$
?
??
?????? require;?????????? 不指定文件名
变量$_的值即作为文件名传递给require
?
?? $!????? —— 錯誤訊息內容
open(FHD,"$file") || die "?? $! n";
rmdir($tmp[0]) || die "$!";
?
[macg@localhost perltest]$ ./tip.pl
testdir
0
Directory not empty at ./tip.pl line 13,<> line 2.
?

?? $$????? PID
print $$,"n";
?
[macg@localhost perltest]$ ./tip.pl
2861?
?

? ??? $0 程序名,所以$ARGV[0]不是程序名,仍是参数,因为已经有$0代表程序名了 #!/usr/bin/perl print $0,"n"; ? [macg@localhost perltest]$ ./tip.pl ./tip.pl ?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读