#! /usr/bin/perl
require 5.22.2;
#最常用的默认参数
$_ = "hello perl \n";
print;
CANDIDATE: for my $candidate ( 2 .. 100 ) {
for my $divisor ( 2 .. sqrt $candidate ) {
next CANDIDATE if $candidate % $divisor == 0;
}
print $candidate." is prime\n";
}
#Perl 中标量比较。
Numeric String Meaning
== eq equal
!= ne not equal
< lt less than
> gt greater than
<= le less than or equal
>= ge greater then or equal
eg.
12.0 == 12 TRUE #数字比较
#因为Perl的==操作符会把字符串转换成数字。
"12.0" == 12 TRUE #数字比较
#因为Perl的 eq 操作符会把数字转换成字符串。
"12.0" eq 12 FALSE #字符比较
2 < 3 TRUE #数字
2 lt 3 TRUE #字符
12 > 3 TRUE #数字
12 gt 3 FALSE #! (注意,开始时这个可能不明显) 字符 1 小于 字符3 ,比较的是 ASCII码
#如果你使用use warnings开启警告,会获得两条警告信息。
#警告的原因是你在数值比较 == 的时候传入了两个字符串作为数字。
#在上一节我们提到过,Perl会查看字符串的左边并尝试把所有有意义的转换成数字。
#因为这两个字符串以字母开头,它们都会转换成0. 0 == 0 返回真。
"foo" == "" TRUE #! (如果使用"warning"指令会发出警告)
"foo" eq "" FALSE # 不相等
"foo" == "bar" TRUE #! (如果使用"warning"指令会发出警告)
"foo" eq "bar" FALSE
最后的例子中有一个陷阱,如果你获得一个用户输入,然后小心翼翼的删除换行符,最后检查给定的字符串是否为空。
use strict;
use warnings;
use 5.010;
print "input: ";
my $name = <STDIN>;
chomp $name;
if ( $name == "" ) { # 错误!这里你需要使用eq而不是==!
say "TRUE";
} else {
say "FALSE";
}
如果执行这个脚本的时候输入”abc”则会返回TRUE,就好象Perl将”abc”看作空字符串处理。