Perl语言入门学习笔记-1

上一篇 / 下一篇  2007-08-21 13:40:37 / 个人分类:编程吧

51Testing软件测试网4BT a]'d.V

### 标量数据(scalar data) ###51Testing软件测试网5l&E R6T XN
### 比较重要的新概念是undef, <STDIN>, chomp ###
^/w-N mL?051Testing软件测试网(|.he#P&`%TlY"y
@ 标量数据是指单独一个的数据,有数值型和字符型。在Perl内部,所有数值都是“双精度浮点数”,即不存在整数值。
ej@En1FlR U!H0@ 怎样表示数值量?51Testing软件测试网$LH flv&~ F
一般表示法:跟小学算术一样51Testing软件测试网] x1m^9FQv
指数表示法:7.25e45, -1.2E-2351Testing软件测试网2_SiNAZ O:v5U
二进制表示法:0b11111151Testing软件测试网@(a;vrI F [1T+A6G
八进制表示法:0377
F yx7^U@9`t0十六进制表示法:0xff
5T~!h NB|oM8h ~0下划线表示法:61_298_040_283_768, 0x50_65_72_7c, 0x1377_0b7751Testing软件测试网-ny2y'~ Kj

9? w.wGZ'b0函数oct()和hex()分别接受一个八进制的字符串和一个十六进制的字符串,并把它们分别转换成相应的数值。但是你要是想把它们表示成八进制或十六进制的样子,就得使用printf的格式操作符0x%x。51Testing软件测试网)Eu.`e P(Um9S

&kG+Uz7E QP#M mQ0#!/usr/bin/perl -w
2AIO8V4x&| d*L0#Convert list of hex numbers into decimal
gw1T'Q AL"~E\&@0
&N_)I$W5\ L0for($i=0; $i<@ARGV; $i++) {51Testing软件测试网h%MM3q U7^iY
  $val=hex(ARGV[$i]);51Testing软件测试网r0je9qeOG{;j3{
  printf("0x%x=%d\n", $val, $val);51Testing软件测试网c+Z"rTY4u_"D
}51Testing软件测试网0r6SD.J ~x^6[6w
51Testing软件测试网 u*v6m7Pqt-{
@ 数值操作符:+ - * / % **
|/|4|4j9f6P6{0@ 字符串:可以包含各种字符的任意组合,最短的字符串是空字符串,最长的字符串会填满所有可用内存(no built-in limit)。51Testing软件测试网y-r{F2x
@ 单引号里的字符串51Testing软件测试网"qu9z8aSz
除了单引号和反斜线外,单引号内的所有字符串都取其本意(与shell的完全引用类似)。
m"SzQO t8pK4@w0\\ 表示反斜线本身51Testing软件测试网0AvHi-{mU
\' 表示单引号本身
L&p0dj^A1c0\n 表示反斜线和n两个字符
)P0C X9Yp6haV0@ 双引号里的字符串51Testing软件测试网 ^9Tsr.P
与shell的部分引用类似,双引号里的反斜线具有完全的转义功能,也可以进行变量替换。51Testing软件测试网5|9Zp|!B
@ 字符串操作符51Testing软件测试网 b@&vd;vi5gr
连接(concatenation): "hello" . ' ' . "world"
Q/NN$}:W{G0复制(repetition): "fred" x 3 (右操作数在使用前先取整,不进行四舍五入,小于1时产生空字符串)
\%YDj B4^:Y!C8I(W0@ 数值与字符串之间的自动转换:由操作符决定
x5t^j)N7J$Lm0当数值操作符遇到字符串值时,将字符串自动转换成等效的十进制浮点数来处理,字符串中非数值部分以及前置的空白符号被忽略。最极端的情况,完全不是数字的字符串会被转换成零。
BY"R'{-F ]0当字符串操作符遇到数值时,数值将被展开成与其输出结果相同的字符串。
IwH)S Vj+C(v]V)[}0"12fred34"*"3"  #3651Testing软件测试网8J0} l.x P*hl
"Z" . 5*7  #Z35,这与运算符的优先级有关
u!P"a?x8}&YdI0@ 标量变量51Testing软件测试网2yv(?@f$l(Z[
跟Shell变量差不多,但是Perl变量可以拿来就用,不用事先声明。当然,标量变量只能存储一个值。
(Kbsd+C V!w0@ 赋值运算(注意与shell的区别)
9m kSD7T,S0$fred=17;
bU[pB w&eK0双目赋值操作符: += -= *= /= .= **= ......51Testing软件测试网*AC.w:\;ro%jB+E
$fred=$fred+3;
n^v2[!KH3g"Ioo2J0$fred+=3;51Testing软件测试网D?Bx1z,I
没有被赋值的变量初始值是undef,这是一种特殊的标量值。undef作为数字时被假设为0;作为字符串时被假设为空字符串。很多操作符在参数超过有效范围或不合理时会返回undef。51Testing软件测试网"HL0{K"J bW
@ 变量替换
(OV _&V!sz0进行替换时,Perl会尽可能使用最长的合法变量名,所以可以用分隔符将变量名括起来。如前所说,双引号内可进行变量替换。
'J!K,K4q!jB.x)oGA0$whats ${what}s
+{(c#W"o)|`0@ 操作符的优先级和结合性
cx)[]D#a5H k-q0太多了,不背!就用括号了!51Testing软件测试网M%? C? }8z5b
@ 比较操作符
p0Yd j ZC1vYS&[c0数值型 == != < > <= >=
N)W ~PB,uW0字符型 eq ne lt gt le ge
2`]*N(`a0返回值:true, false51Testing软件测试网5Ivd6]| ubh,i
@ if控制结构,任何标量值都可以成为控制结构里的判断条件51Testing软件测试网*o%E6[_S6{.z~/\fw
@ while控制结构
:JE[B.KJETd4`0@ 布尔值:Perl没有Boolean数据类型,有一些简单规则来判断某值的真假:51Testing软件测试网Sx4p@FUn]j
1.数字的情况,0为假,其他数字为真51Testing软件测试网2]?,x1s#G
2.字符串的情况,空字符为假,其他字符串为真(例外,字符串‘0’为假,因为它和数值0为同一个标量值)
g(]#nyg7A Q-o0i D)b6s _ hH03.不是数字或字符的情况,先转换成数字或字符串再判断。例如:undef表示假,所有的引用都是真。
(k5JckH6m7P&c0!单目取反操作符
(@@)?8W%N7B j;NQ|0@ 启用Perl的警告功能和诊断说明
$vH ~eD2QSV1B0在命令行中:51Testing软件测试网 b-FFBt [v
$perl -w ./perl_program
1{u9V(a6_M [EH0$perl -Mdiagnostics ./perl_program
lV[/\\3x`8S\0在脚本中
|P:vp`u g+E0#!/usr/bin/perl -w
z#bJGa0#!/usr/bin/perl51Testing软件测试网ORA:CS/I)zl
use warnings; #用于Perl5.6之后的版本
\ Q!~6Y9CW(Y]a0use diagnostics;
3u9G\*N^2RD+O0@ print()函数/操作符
u\]|}G(@0print "hello", ' ', "world", "/n";  #输出一个列表51Testing软件测试网'n1ZWcv6S
@ 整行输入操作符<STDIN>chomp操作符
$kO&O`8i0<STDIN>:从标准输入读入一行文字,到换行符[Enter]为止。51Testing软件测试网F f7gj$Wz5@9z ~
chomp: 移除字符串结尾的换行符。若字符串后有两个以上的换行符,chomp只删除一个;若没有,chomp不起作用并返回0。chomp()返回值为实际移除的字符数,即1或0。51Testing软件测试网)iI9n6Uy*d}Z:UW
chomp($string=<STDIN>);
Ik7{"lU!r!] W0@ defined函数
$ujET*m pH7U0该函数对undef返回“假”,对其他参数(包括空字符串)都返回“真”。
,iQU,d.ru$rK7^jSI#u0$string=undef;51Testing软件测试网,~:EED1[
$string=<STDIN>; 
0YcV'rrR2H0当<STDIN>遇到文件结尾(end-of-file, Ctrl+D),返回undef。这种特性可配合循环使用,以跳出循环。
(Hz,R]3\/H0while(defined($line=<STDIN>)) {51Testing软件测试网z6Dr$c-OY
  print "I saw $line";
zZbt-c8ax,K];u(K f0}
R6q3ES0w3d0简写形式51Testing软件测试网M~SjVp}]a
#标量上下文51Testing软件测试网D+|+V$E8L![~+i,@u
while(<STDIN>) {    #读取一行处理一行51Testing软件测试网&r iau'U~]%@
  print "I saw $_";
W!\4f QNr+kK4D_0}51Testing软件测试网X0q4e3G7c
#列表上下文,且看下文分解51Testing软件测试网B*rv/G5]n
foreach(<STDIN>) {  #把所有行都读取完再处理
;R^.Y#W A%?h\0  print "I saw $_";
6Cu;[J;|C0}51Testing软件测试网C;w9u-uf6jb
几点说明:
|/PH#w/VV4Kh01. 只有在循环的条件式里只有<STDIN>时,才会读取一行输入并将其存入$_中。换句话说,假如条件式里还有其他东西,这个简写就无法运作了。51Testing软件测试网5h6{)eD*S
2. <STDIN>和$_之间没有什么关联。51Testing软件测试网6Zz-ga?9h6@V

;z,W(pvX{ZxH0习题1-3解答51Testing软件测试网#Ai6w(Lq!I!Jo
#!/usr/bin/perl
-puc D"j2y+V051Testing软件测试网}5M^8JO`xr.WWP
use warnings;51Testing软件测试网VKdH:U%n
51Testing软件测试网9x4l q6G-K;~t*Kqr
print "This is an application to calculate circumference of a circle.\n";51Testing软件测试网Ogh&[t'P c
print "Please input the radius of the circle: ";
\:cKhR9L/BaD k0$PI=3.141592654;51Testing软件测试网!ha7m1W8cR?
chomp($line=<STDIN>);
V `4a Eq(rpxh{ H%y0$radius=$line;
0N$B"p\K0if($radius<=0){
(@ow/InjX9|oo7X0  print "The circumference of your circle is 0.\n";
e5{}8H+{*D0Wf0} else {
%bLA~5ZF E }0  $circum=2*$PI*$radius;51Testing软件测试网#u~yJ] g
  print "The circumference of your circle is $circum.\n";51Testing软件测试网'a+S:w:y g`(wFj
}51Testing软件测试网1D:XaaCp


相关阅读:

TAG: 编程吧

 

评分:0

我来说两句

日历

« 2024-05-11  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 22547
  • 日志数: 38
  • 文件数: 1
  • 书签数: 3
  • 建立时间: 2007-08-14
  • 更新时间: 2008-05-01

RSS订阅

Open Toolbar