Chinaunix首页 | 论坛 | 博客
  • 博客访问: 570408
  • 博文数量: 201
  • 博客积分: 7734
  • 博客等级: 少将
  • 技术积分: 1994
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-09 19:18
文章分类

全部博文(201)

文章存档

2011年(28)

2010年(173)

分类:

2010-08-14 11:39:54

**要想走的快,就一个人走,要想到的远,就一起走。**
用perl -w my_program 让perl发出警告。
也可以在程序里面插入use warnings;
use diagnostics;信息比warnings更详细。
在把use diagnostics这个编译命令加进程序之后,你可能会觉得程序在启动的候或多或少有点慢。因为
你的程序正在忙着加载(到内存)警告和详细说明,换个角度看,如果你已了解各种警告信息,可以帮
助优化程序。也可以通过perl -Mdiagnostics ./my_program来实现。

标量变量:
标量变量存储的是标量值,标量的名称是以美元符号($)开头,后面可以跟上多个字母、数字或下划线。
但是开头不能是数字。另外,大写和小写的字母会被区分。$Fred和$fred是两个不同的变量。
大部分Perl程序员会建议你不要再写shell、awk和C程序了,但那往往不切实际。
标量变量只能存储一个值,但是像数组(array)和哈希(hash)之类的变量类型就可以存储多个值。
标量的赋值:
$fred = 17;   #将$fred的值设为17
$barney = 'hello'; #将$barney的值高为5个字符组成的字符串'hello'
$barney = $fred + 3; #将$barney设为$fred当前值加上3后的结果,即20
$barney = $barney * 3; #$barney现在被设成$barney当前值乘以2后的结果,即40
最后一行中$barney变量出现了两次:第一次是取值(在等号右方的表达式中),第二次是赋值(在等号
左方),表示要将右方表达式的运算结果存到该变量中。
 
双目赋值操作符:
我们经常会用到类似$fred = $fred + 5这种形式(同样的变量出现在赋值操作符的两边)的表达式,于
是perl提供了更新变量内容的简写方式,也就是双目赋值操作符(binary assignment operator)。
$fred = $fred + 5;  #不使用双目赋值操作符。
$fred += 5;      #使用双目赋值操作符。
上面是等效的,下面也是等效的。
$barney = $barney * 3;
$barney *= 3; 
以上的例子里,双目赋值操作符都是以某种方式直接修改变量的值,而非对表达式求值后覆盖原变量值
另一个常见的双目赋值操作符是由字符串连接操作符(.)改造的追加操作符(.=):
$str = $str . ""; #在$str末尾追加一个空格字符。
$str .= "";
  #用追加操作符做同样的事。

几乎所有的双目操作符都可以这么用,如乘幂操作符也能改成**=,所以$fred **= 3;和
$fred = $fred ** 3是一样的。也就是取$fred的三次方。再存回$fred.
字符串中的标量变量内插:
双引号圈引的字符串直接能进行变量内插,这就是说,字符串内的所有标量名,都会被替换为该变量当
前的值。
$meal = "brontosaurus steak";
$barney = "fred ate a $meal";   # $barney 现在是" fred ate a brontosaurus steak"
$barney = 'fred ate a ' . $meal; # $另一种等效写法
如果变量从来没有被赋值过,就会用空字符串来代替。
如果要打印变量:
print "$fred";  #双引号是多余的
print $fred; #这样比较好
这种写法会让该值被当成字符串处理,而不是当成数字处理,在某些罕见的状况下,也许需要这种写法
,但是在平时,这几乎是在浪费打字时间。

变量内插也称为双引号内插,因为它只会在双引号(而非单引号)里起作用。
如果要将"$"本身放进双引号内的字符串,可以在前面用反斜线转义,以避开它的特殊意义。
$fred = 'hello';
print "The name is \$fred.\n"; #会输出$符号
print 'The name is $fred'."\n"; #这样也行
进行内插时,Perl会尽可能使用最长且合法的变量名称,要是你想在内插的值后面,紧接着输出字母、
数字或下划线,可能会碰上麻烦,当Perl检查变量名称时,它会违背你的本意,将后面的字符当作变量
名称一部分,用一对花括号将变量围起来,也可以先把字符串拆成两半,再利用连接符接起来。

$what = "brontosaurus steak";
$n = 3;
print "fred ate $n $whats.\n";   #不是steaks,而是$whats的值,也这是空值。
print "fred ate $n ${what}s.\n"; #现在是用$what了。
print "fred ate $n $what"."s.\n"; #另一种写法,比较麻烦。
print 'fred ate '. $n . '' . $what. "s.\n"; #写起来特别麻烦。

操作符的优先与结合性:
所有同时在Perl和C里出现的操作符,它们的优先级和结合性都是相同的。
操作符的结合性与优先级(从高到低排序)
结合性    操作符
左  括号;给定参数的列表操作符
左  ->
  ++ -- (自增;自减)
右  **
右  \ ! ~ + - (单目操作符)
左  =~ !~
左  * / % x
左  + - . (双目操作符)
左  << >>
  具名的单目操作符(-X 文件测试;rand)
  < <= > >= lt le gt ge (不相等操作符)
  == != <=> eq ne cmp  (“相等”操作符)
左  &
左  | ^
左  &&
左  ||
  .. ...
右  ?:(三目操作符)
右  = += -= .= (以及类似的赋值操作符)
左  , =>
  列表操作符(向右结合)
右  not
左  and
左  or xor
右:表示从右到左,右边的优先级高于左边。
左:表示从左到右,左边的优先级高于右边。
4**3**2   ##4**(3**2),得4**9(这就是向右结合)
72/12/3   ##(72/12)/3,得6/2,得2(这就是向左结合)
比较操作符:
比较  数值  字符串
相等  ==  eq
不等  !=  ne
小于  <  lt
大于  >  gt
小于或等于 <=  le
大于或等于 >=  ge
35 != 30 + 5  #false
35 == 35.0  #true
'35' eq '35.0'   #false
'fred' lt 'barney' #false
'fred' lt 'free' #true
'fred' eq "fred" #true
'fred' eq 'Fred' #false
' ' gt ''  #true
 
#!/usr/bin/perl -w
$name = "fred";
if ($name eq 'fred')
        {
        printf "true\n";
}
 else
{
        printf "false\n";
}

布尔值:
任何标量值都可以成为if控制结构里的判断条件。如果你将真或假值放进某个变量里,使用起来会很方
便:
$is_bigger = $name gt 'fred';
if ($is_bigger)
{
...
}
怎么决定某个值的真假呢?和其它语言不同,Perl并没用专用的“布尔”(Boolean)数据类型,它是靠一些
简单的规则来判断的:
*如果值为数字,0为假;所有其他数字都为真。
*如果值为字符串,空字符串('')为假;所有其他字符串都为真。
*如果不是数字也不是字符串,就先转换成数字或字符串再行判断。
以上规则中隐藏了另一条规则,字符串'O'跟数字0是同一个标量值,所以Perl会将他们一视同仁。也就
是说,字符串'O'是唯一被当成假的非空字符串。
获取用户输入:
最简单就是“行输入”操作符
$line = ;
if ($line eq "\n") {
 print "That was just a blank line!\n";
}else{
 print "That line of input was: $line";
}

#!/usr/bin/perl -w
$is_bigger = ;
if ($is_bigger >= 5){
        print "That is bigger\n";
} else {
        print "That is smaller\n";
}
chomp操作符:
$text = "a line of text\n"; #假设是从读进来的
chomp($text);   #去除行末的换行符
chomp最常用的方法:
chomp($text = );  #读入文字,略过最后的换行符
$text = ;
chomp($text);     #和上面一样,分成两步来做
$food = ;
$betty = chomp $food; #会得到返回值1,不过我们早就知道了!
11:36 2010-8-14
阅读(880) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~