1. 操作符的优先级与结合性
在复杂的表达式里,先执行哪个操作再执行哪个操作,取决于操作符的优先级
可以用括号(即圆括号)来改变操作的优先级
操作符的结合性与优先级(从高至低排序)
| 结合性 | 操作符 |
|---|---|
| 左 | 括号;给定参数的列表操作符 |
| 左 | - > ++ --(自增;自减) |
| 右 | ** |
| 右 | \ ! ~ + - (单目操作符) |
| 左 | =~ !~ |
| 左 | * / % x |
| 左 | + - . (双目操作符) |
| 左 | >> << 具名的单目操作符 (-X 文件测试;rand) < <= > >= lt le gt ge (“不相等操作符”) == != <=> eq ne cmp (“相等操作符”) |
| 左 | & |
| 左 | | ^ |
| 左 | && |
| 左 | || // |
| 右 | ?:(条件操作符) |
| 右 | = += -= .=(以及类似的赋值操作符) |
| 左 | , => 列表操作符(向右结合) |
| 右 | not |
| 左 | and |
| 左 | or xor |
2. 比较操作符
| 比较 | 数字 | 字符串 |
|---|---|---|
| 相等 | == | eq |
| 不等 | != | ne |
| 小于 | < | lt |
| 大于 | > | gt |
| 小于或等于 | <= | le |
| 大于或等于 | >= | ge |
35 != 30 +5 # 假
35 == 35.0 # 真
'35' eq '35.0' # 假(当成字符串来比较)
'fred' lt 'barney' # 假
'fred' lt 'free' # 真
'fred' eq "fred" # 真
'fred' eq 'Fred' # 假
' ' gt '' # 真
3. if 控制结构
if ($name gt 'fred'){
print "'$name' comes after 'fred' in sorted order.\n";
} else {
print "'$name' does not come after 'fred'.\n";
print "Maybe it's the same string, in fact.\n";
}
4. 布尔值
任何标量值都可以成为if控制结构里的判断条件
$is_bigger = $name gt 'fred';
if($is_bigger) {...}
perl没有专用的布尔(Boolean)数据类型
- 数字,0为假,所有其它数字为真
- 字符串,空字符串(’’)以及字符串‘0’都为假,所有其它字符串都为真
- 未被赋值变量为假
使用==单目操作符!==对其后的操作数取反
$still_true = !! 'Fred';
$still_false = !! '0';
5. 获取用户输入
行输入操作符 <STDIN>
从标准输入设备读取完整的一行标量值,即第一个换行符前的所有内容。
标准输入可以右多种输入源,默认为来自键盘的用户输入。
如果<STDIN>没有可读取的内容,perl程序会停下来等待用户输入,直到看到换行符(也就是按下回车键)为止
从<STDIN>读取的字符串是包含末尾的换行符的,可以利用这点判断输入的是否为空行
$line = <STDIN>;
if($line eq "\n"){
print "That was just a blank line!\n";
}else {
print "That line of input was: $line";
}
实际应用时,并不需要末尾的换行符,使用chomp()操作符去除
6. chomp操作符
去掉字符串末尾的换行符,如果字符串末尾没有换行符就啥也不干
$text = "a line of text\n";
chomp($text);
chomp($text = <STDIN>);
理解:
- 先赋值,再去掉换行符
- 读取不带换行符的输入内容
chomp()本质上是个函数,有其返回值,为实际移除的字符数(这个数字一般没用)
$food = <STDIN>;
$betty = chomp $food;
如果去掉括号不改变表达式的意义,则可以去掉括号!
如果字符串后面有2个以上的换行符,chomp()只去掉最后的那个换行符
7. while控制结构
$count = 0;
while ($count < 10){
$count += 2;
print "count is now $count\n";
}
8. undef值
变量首次赋值前,初始值为undef
- 当成数字,为0
- 当成字符串,为空字符串
$n = 1;
while ($n < 10){
$sum += $n;
$n += 2;
}
print "The total was $sum.\n";
$string .= "more text\n";
许多操作符在参数越界或不合理是会返回undef,然后继而返回0或空字符串参与后续的运算
如果开启警告信息,perl会对未定义值发出警告
9. defined函数
<STDIN>有时会返回undef,正常情况下,它返回的是读取得一行文本,但再无数据可读,如到了文件末尾时,就返回undef
$next_line = <STDIN>;
if (defined($next_line)){
print "The input was $next_line";
}else{
print "No input available!\n";
}
1577

被折叠的 条评论
为什么被折叠?



