|
1.1 print基本用法
Perl中有一些预定义的文件句柄,如标准输入STDIN、标准输出STDOUT、和标准错误STDERR。print为输出语句,可以输出到这些文件句柄中。但不输出末尾的回车换行符。
使用语法为:
print 输出句柄 要输出的字符串1, 要输出的字符串2,…, 要输出的字符串n;
如果输出到标准输出句柄中,默认为屏幕,可省略输出设备:
print 要输出的字符串1, 要输出的字符串2,…, 要输出的字符串n;
print STDOUT要输出的字符串1, 要输出的字符串2,…, 要输出的字符串n;
以上2个语句完成同样的功能。比如:
#perl2-6.pl
print STDOUT "abc","def";
print "12345";
输出结果为:
abcdef12345
1.1.1 输出缓冲
Perl将输出先存在缓冲区,等到缓冲区满后再输出,可使用$|打开和关闭输出缓冲,当$|非0值,表示关闭输出缓冲,$|默认为0。
例如:下列代码向STDOUT和STDERR 输出字符串:
print STDOUT "我出错了!\n故障表现为无法连接网站";
print STDERR "\n明白,故障正在处理\n";
我们希望能输出如下结果:
我出错了!
故障表现为无法连接网站
故障处理中
但是运行这段代码却输出这样的结果:
我出错了!
故障处理中
故障表现为无法连接网站
因为STDERR是额外的输出路径,print函数属于行缓冲,遇到换行符后,就输出“\n”之前的“我出错了!”,而“故障表现为无法连接网站”放入缓冲区中,等待下一次的输出。我们关闭输出缓冲,强制把"我出错了!\n故障表现为无法连接网站"立即输出。
$|=1;
print STDOUT "我出错了!\n故障表现为无法连接网站";
print STDERR "\n明白,故障正在处理\n";
运行后得到了正确的输出。
1. 子程序
PERL的子程序可以出现在程序的任何地方。定义方法为:
sub 子程序名{
my ($参数1, $参数2, $参数3) = @_;
语句1;
语句2;
……
return (返回值);
}
调用子程序的方法如下:
&子程序名;
以下子程序完成求2数之和的功能:
#perl2-4.pl
sub add{
my ($x,$y)=@_; #取得子程序的参数
return($x+$y);
}
print &add(10,5);
输出:15
缺省情况下,子程序中最后一个语句的值将用作返回值,这意味着可以不使用return 返回值。我们把上面的程序改写一下:
#perl2-7.pl
sub add{
my ($x,$y)=@_; #取得子程序的参数
$x+$y;
}
print &add(10,5);
虽然没有使用return,但子程序仍然完成了它的功能,输出为:15
1. 基本操作符
1
2
3
4
5
5.1 算术操作符
+-* / % 分别表示加、减、乘、除和取余。
比如:
#perl2-8.pl
$res=10+5;
print $res;#加
print "#";
$res=10-5;
print $res;#减
print "#";
print 10*5;#乘,没有使用变量,直接使用表达式,效果一样。
print "#";
print 10/5;#除
print "#";
print 10%3;#取10除以3的余数 ,结果为1
print "#";
输出结果为:
15#5#50#2#1#
5.2 自增与自减
++为自增,--为自减。
如:
#perl2-9.pl
$res=10;
$res++;#res=11
print $res;
print "#";
$res--;#$res=11-1=10
print $res;
输出为:
11#10
5.3 比较操作符
1、数字比较
< 小于
= 等于
> 大于
== 等于
<= 小于等于
>= 大于等于
!= 不等于
<=> 比较
2、字符比较
lt 小于
gt 大于
eq 等于
le 小于等于
ge 大于等于
ne 等于
cmp比较
5.4 字符串操作符
X 使前面的字符串重复
. 连接字符串
比如:
#perl2-11.pl
print "xy"."z";#将xy和z连接成xyz
print "#";
print "xy"x5;#将xy重复5次
输出:xyz#xyxyxyxyxy
5.5 逻辑运算符
Perl有以下逻辑运算符
and、&& 逻辑与
or、|| 逻辑或
not 、! 逻辑非
xor 异或
5.6 位操作运算符
& 按位与
| 按位或
~ 按位非
^ 按位异或
<< 左移
>> 右移
1.1 赋值操作符
Perl支持以下赋值操作符:
=、 **=、 +=、*=、&=、<<=、&&=、-=、/=、|=、>>=、||=、.=、%=、^=、x=
声明:本神奇的Perl系列为刘兴(http://deepfuture.iteye.com/)原创,未经笔者授权,任何人和机构不能转载
|
|
|