`
huoyunshen888
  • 浏览: 83526 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

perl常用环境变量

阅读更多
先来一个例子吧
#!/usr/bin/perl
use warnings;
@array = qw(a b c d);
foreach (@array) {
print $_,”\n”;
}
例子的作用就是定义一个数组并把其中的元素打印出来,这里需要注意的是foreach循环部分,foreach循环的标准格式应该是:
foreach $element (@array){
……
}
其中数组@array将其中的元素依次赋值给$element,但是在上面那个程序中,我并没有这样做,在程序中,我就使用到了perl中内置的一个特殊变量 $_ 。

在程序第五行中:foreach (@array) 实际上就是等于 foreach $_ (@array),在这里,$_是默认是输入/输出,因此,如果在程序中有类似的没有明确声明的变量位置的时候,就有可能能使用$_代替。
再看另外一个内置变量
perl -e “sleep(5);print qq(The PID of process perl.exe is : $$)”;
这是一句命令行上使用的perl程序,作用就是打印出一段话:print qq(The PID of process perl.exe is : $$) ,在这里,存在着特殊变量$$ ;
$$是当前perl解析器的进程ID(即,PID),大家可以将在段程序写在命令行上,该程序会在perl解析器运行5秒后打印出perl解析器的进程ID,大家可以在程序运行期间通过查看进程列表来确定打印结果是否正确(^_^不会错的)。

接下来是一个用来返回错误信息(或是错误号)的特殊变量
为了省事,不写程序了,还是来个命令行的吧
perl -e “opendir FH,’c:\none’ or die qq(can’t open:$!);”;
这句话就是要打开C盘下的一个none目录(而实际上我的C盘中并没有此目录,之所以这样写的目的就是为了引起一个程序中的错误信息),如果没有打开的话,会执行后面的die qq(can’t open:$!)
在这里,$!就指明了错误信息的内容,命令行会返回错误信息:
can’t open:No such file or directory at -e line 1.
$!在open或是opendir中用的比较多(无论是打开文件还是管道或是其他)。

来个例子,说一个有意思的特殊内置变量
$text = “C:\\test.txt”;
{
open FH,$text or die “can’t open:$!”;
my $line = ;
close FH;
print $line;
}
print “#===========================#\n”;
{
undef $/;
open FH,$text or die “can’t open:$!”;
my $line = ;
close FH;
print $line;
}
=================================
C盘下的test.txt的内容是:
111111111111111111111111111
222222222222222222222222222
333333333333333333333333333
=================================
好,程序的运行结果是:
111111111111111111111111111
#===========================#
111111111111111111111111111
222222222222222222222222222
333333333333333333333333333
程序就不多废话了,作用就是读文件,关键部分在“$line = ”,尖括号操作符(即,<>)作用是读取一行文件内容(相信大多数教程或是书上都是这么写的),但是,这里所说的一行,实际上是有一个标准的,那就是当perl在遇到了换行符后,边认为是一行,而换行符默认情况下是由于$/这个特殊变量定义的,是缺省值。
也就是说,perl 在每次使用<>操作符读文件的时候,会先从$/中获得一个叫做“分隔符”的东西,并以该分隔符为标记来读取文件,如果按默认的$/来说,这个分割符就是一个换行符,所以,默认时,<>操作符才会每次读取一行文本。
在给出的例子中,有这样一句 :undef $/ ,也就是将$/设置为未定义的值,这样一来呢,$/就不再起作用了,因此,大家可以看到,第二次进行同样的操作的时候, <>操作符就不再是只读一行而是将文件内容全部读出来了。

接下来看一个会受到$/影响的内置变量,还是先说实例:
$text = “C:\\test.txt”;
open FH,$text or die “can’t open:$!”;
while () {
print “line $. is:$_”;
}
close FH;
先来看循环中的:print “line $. is:$_”
程序的作用是读文件,并且,将文件逐行赋值给$_(因为只用了<>操作符而没有指定内赋值变量,因此,默认就是赋值给了$_);
但是这里除了$_,还有一个变量“$.”
我们来看一下结果:
line 1 is:111111111111111111111111111
line 2 is:222222222222222222222222222
line 3 is:333333333333333333333333333
可见,变量$.的作用是一个类似计数器的东西,但是,为什么刚开始我说$.会受到$/变量的影响呢 ?
将上面的例子稍做修改,再看一下:
$text = “C:\\test.txt”;
undef $/; # 注意,多加了这一行
open FH,$text or die “can’t open:$!”;
while () {
print “line $. is:$_”;
}
close FH;

第二行多加了一句undef $/; ,上面已经说过它的作用了,来看一下这段程序运行的结果:
line 1 is:111111111111111111111111111
222222222222222222222222222
333333333333333333333333333
本来应该是三行的文本,不但被一次性打印出来,而且还指明了“line 1”(看来程序认为这个文本只有一行),为什么 ?
这是因为$.变量并不是一个单纯的行计数器,确切地说,可以说$.是一个对$/计数器,我们再来看一段程序大概就会明白了:
$text = “C:\\a.txt”;
$/ = “;”; # 注意这里,这里我并将$/设置为未定义,而是给其赋值为分号
open FH,$text or die “can’t open:$!”;
while () {
print “line $. is:$_\n”;
}
close FH;

再看一下C盘下的a.txt的内容:
ddd;bbb;ccc;fff;eee;
就这么简单了。
看一下运行结果:
line 1 is:ddd;
line 2 is:bbb;
line 3 is:ccc;
line 4 is:fff;
line 5 is:eee;
看过这段程序应该就明白了吧。
好,$.已经讲得差不多了,接下来再说一个它的特性,仍然是看程序说话:
$text = “C:\\test.txt”;
open FH,$text or die “can’t open:$!”;
while () {
print “line $. is:$_\n”;
}
print “\n”,$.;
close FH;
print “\n”,$.;
这个程序要注意的是最后三行中的两个print “\n”,$.;(一个是在关闭文件前,另外一个则是在关闭文件后)。
看一下执行结果:
line 1 is:111111111111111111111111111
line 2 is:222222222222222222222222222
line 3 is:333333333333333333333333333
3
0
结果的前三行刚才就已经知道了,这不是我们关心的,我们应该关心的是最后两行结果(即两个print “\n”,$.;的结果);
$.变量是具有记忆性的(从原理上来将,它是一个包变量),因此,在关闭文件前打印会发现,它的值是还没有变化的(这时的值和最后一次读完文件的值均为3);
而在关闭文件后,该变量又被重新初始化为0了。
这个特性大家注意一下就可以了,因为其中的原理涉及到了perl的作用域和包的一些知识,不是很容易说清楚,所以就不说了,如果对包和作用域有了解的读者对这部分即使我不讲他们也应该能理解的。

再说最后一个吧
说一个用来简单判断操作系统类型的,看个例子:
C:\>perl -e “print $^O;”;
MSWin32
注意,这里这个特殊变量$^O 最后一个字符是字母O,且大写。
如果是在linux下的话,结果就不是MSWin32了,而是Linux ;
这是一个判断环境的变量,简单实用。
perl的内置特殊变量还有很多的,例如常用的还有@_、@ARGV、$ARGV、%INC、%ENV等等,有很多,不可能一一列举了,这里给出一个比较有总结性的列表,是chinaunix上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
$ 含有与上个匹配正则表达式对应括号结果
$= 当前页面可打印行的数目
$> 当前进程的有效用户ID
$0 包含正在执行的脚本的文件名
$ARGV 从默认的文件句柄中读取时的当前文件名
%ENV 环境变量列表
%INC 通过do或require包含的文件列表
%SIG 信号列表及其处理方式
@_ 传给子程序的参数列表
@ARGV 传给脚本的命令行参数列表
@INC 在导入模块时需要搜索的目录列表
$-[0]和$+[0] 代表当前匹配的正则表达式在被匹配的字符串中的起始和终止的位置

分享到:
评论

相关推荐

    Perl开发环境.zip

    2. **环境变量**:安装完成后,Strawberry Perl会自动将Perl的bin目录添加到系统的PATH环境变量中,这样你就可以在命令行中直接运行Perl命令了。 3. **验证安装**:打开命令提示符,输入`perl -v`,如果显示出Perl的...

    PERL内置变量$.等

    - **%ENV**:环境变量哈希表,用于访问当前环境变量。 - **%INC**:已导入模块的哈希表,通常用于模块管理。 - **%SIG**:信号处理程序哈希表,用于注册信号处理器。 - **@_**:传递给子程序的参数列表。 - **@ARGV*...

    perl(windows环境)

    安装过程中,你可以选择安装路径,以及是否将Perl添加到系统的PATH环境变量中,这样在命令行中就可以直接运行perl命令了。 安装完成后,你可以通过命令行(如cmd.exe)测试Perl是否已经正确安装。打开命令提示符,...

    ActivePerl + strawberry-perl

    2. **自动配置**:安装后,Strawberry Perl会自动配置环境变量,如PATH,使得用户可以直接在命令行中执行Perl脚本。 3. **CPAN集成**:同样,Strawberry Perl也集成了CPAN,方便用户获取和安装更多Perl模块。 4. **...

    strawberry-perl-5.10.1.0

    在配置webtours时,用户可能需要确保Perl的路径已经被添加到系统的PATH环境变量中,以便系统能够找到并执行Perl脚本。 Perl是一种强大的文本处理和脚本编程语言,常用于系统管理、网络编程、Web开发等领域。它的...

    strawberry-perl-5.32.0.1-64bit.zip

    安装完成后,需要将Perl的安装路径添加到系统的环境变量中,这样在命令行中就可以全局调用Perl解释器了。描述中提到“亲测有效”,意味着这个方法经过验证,可以成功地在Windows系统上运行Perl。 标签“perl 编译器...

    Perl语言在生物信息学中的应用学习教案.pptx

    Perl 语言的字符串变量可以使用一些常用的转义字符,例如 \$var、\n 等。 Perl 语言的变量初值可以是 undef,表示未定义。 Perl 语言的变量可以使用在条件判断中,例如 if(undef $a)。 Perl 语言的变量也可以使用...

    strawberry-perl-5.32.0.1-64bit.msi

    6. 确认配置:确认安装设置,包括环境变量的设置。 7. 完成安装:等待安装过程完成,然后可能需要重启计算机使更改生效。 安装完成后,用户可以通过命令行或集成开发环境(IDE)来使用Perl。在命令行中输入`perl -v...

    删除卸载单个perl模块脚本

    此外,还要检查`.bashrc`、`.profile`或其他Shell配置文件,删除任何与该模块相关的环境变量设置。 5. **处理依赖**:如果该模块有依赖,你也需要检查这些依赖是否还在其他模块中使用。如果不再需要,按照相同步骤...

    ActivePerl-5_ActivePerl5.28_ActivePerl.zip

    ActivePerl包含了一个完整的Perl解释器,以及许多常用的Perl模块,这些模块通常在Unix/Linux环境中需要手动编译和安装。对于开发者来说,这极大地简化了在Windows上的Perl开发流程。 ActivePerl 5.28是Perl 5系列的...

    Strawberry_perl5.10.1

    Strawberry Perl是一种在Windows平台上使用的Perl解释器,它提供了完整的Perl环境,包括所有核心模块和许多常用的CPAN(Comprehensive Perl Archive Network)模块。在IT领域,Perl是一种功能强大的脚本语言,常用于...

    ActivePerl-5_ActivePerl5.28_ActivePerl_源码.zip

    配置方面,可以通过环境变量设置Perl路径,或者使用ppm工具管理模块。 2. **开发环境**:ActivePerl可以与多种IDE和编辑器集成,如Komodo Edit、Notepad++等,提供语法高亮、自动完成等功能。 3. **调试与测试**:...

    ActivePerl 安装包

    5. 选择是否创建桌面快捷方式和环境变量设置。 6. 等待安装完成,然后可能需要重启计算机使更改生效。 一旦安装完毕,ActivePerl将提供一个完整的Perl环境,包括Perl解释器、核心模块和一些常用的第三方模块。用户...

    strawberry-perl-5.10.1.0.msi

    Strawberry Perl 5.10.1.0.msi是这个特定版本的安装程序,它包含了Perl解释器、标准库以及一些常用的Perl模块,使得开发者无需繁琐配置即可在Windows系统上进行Perl开发工作。 在Perl 5.10.1.0中,引入了诸如say、...

    perl基础入门。chm

    综上所述,这个“perl基础入门”教程将引导初学者了解Perl的基本语法和常用技巧,包括变量、流程控制、函数、正则表达式等核心概念,并可能涉及在Linux环境中的应用以及简单的GUI编程。通过学习这个教程,新手可以为...

    ActivePerl-5.6.1.635-MSWin32-x86

    2. 配置环境变量:安装完成后,可能需要手动添加Perl的安装路径到系统的PATH环境变量中,以便在命令行中直接运行Perl。 3. 安装完成后,可以通过在命令行输入`perl -v`来验证Perl是否正确安装,并查看安装的版本信息...

    ActivePerl-5.26_Win_x64.zip

    2. **路径设置**: 用户可以指定Perl的安装目录和Perl bin目录的路径,以便将Perl添加到系统的PATH环境变量中。 3. **组件选择**: 可以选择安装哪些Perl模块和工具,根据个人需求进行定制。 4. **配置完成后**: 安装...

    PERL5中文教程详解

    Perl最初是为了处理文本文件、报告生成和系统管理任务而设计的,特别是在UNIX和类UNIX操作系统环境下。由于其强大的文本处理能力,Perl在Web开发、系统管理、脚本编写等领域得到了广泛应用。 Perl的特点之一是其...

    strawberry-perl-5.30.0.1-32bit.zip

    对于Perl初学者,了解如何配置环境变量以使Perl可执行文件能在命令行中调用,以及熟悉cpan的使用方法是非常关键的。一旦安装完成,你就可以开始编写和运行Perl程序了。记住,Perl语言强调“there's more than one ...

Global site tag (gtag.js) - Google Analytics