perl

perl,第1张

概述  @       数组                           $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

 

 
    $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 "$tmp\n";
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  

总结

以上是内存溢出为你收集整理的perl全部内容,希望文章能够帮你解决perl所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1286771.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存