Perl 学习手札之八: Operators
数值的比较运算符:+, -, *, /, ++, --;arithemetic.pl
#!/usr/bin/perl
use strict;
use warnings;
main(@ARGV);
sub main
{
my $n=42 + 12;# repeat with - * /
message("The number is: " . $n);
my $n =42;
#$n++;
#$n--;
#++$n;
message("The number is: " . $n++);
message("The number is: " . ++$n);
message("The number is: " . --$n);
}
sub message
{
my $m = shift or return;
print("$m\n");
}
sub error
{
my $e = shift || 'unkown error';
print("$0: $e\n");
exit 0;
}
数值的运算符,还有++,--,这些都是和C里面完全相同。
还有就是关于比较运算符:
comparition.pl
#!/usr/bin/perl
use strict;
use warnings;
main(@ARGV);
sub main
{
# if(5<=5){
# if(6>5){
# if(6>==5){
# if("five" eq "five"){
if("six" gt "five"){
message("this is true");
}else{
message("this is NOT true");
}
}
sub message
{
my $m = shift or return;
print("$m\n");
}
sub error
{
my $e = shift || 'unkown error';
print("$0: $e\n");
exit 0;
}
以上是关于字符,数字的比较运算符,这个完全可以参照perldoc perlop来看更详细的解释。
logical.pl
#!/usr/bin/perl
#
use strict;
use warnings;
main(@ARGV);
sub main
{
my $x = (5!=5);
message("x is '$x'");
if((5==6||(6==5))){
# if((5==6)&&(6==5)){
# if((5==6) and (6==5)){
# if((5==6) or (6==5)){
message("this is true");
}else{
message("this is not true");
}
}
sub message
{
my $m = shift or return;
print("$m\n");
}
sub error
{
my $e = shift || 'unkown error';
print("$0: $e\n");
exit 0;
}
注意此时的 || 等价与or; &&等价与 and。
filetest.pl
#!/usr/bin/perl
use strict;
use warnings;
main(@ARGV);
sub main
{
my @dirlist = <*>;
foreach my $fn (@dirlist){
message($fn);
if( -f $fn){
my $size = -s $fn;
message("$fn is a plan file($size bytes)");
}elsif( -d $fn){
message("$fn is a directory");
}else{
message("$fn is something else");
}
}
}
sub message
{
my $m = shift or return;
print("$m\n");
}
sub error
{
my $e = shift || 'unkown error';
print("$0: $e\n");
exit 0;
}
文件测试,可以查询相应的章节,或者在eclips的环境下,选中-f,然后点击右键,选中perldoc。
range.pl
#!/usr/bin/perl
#
use strict;
use warnings;
main(@ARGV);
sub main
{
# print foreach (1..9);
# print foreach ('a'..'z','A'..'Z');
# print foreach ('00'..'31');
print join(',', ('00'..'31'));
}
sub message
{
my $m = shift or return;
print("$m\n");
}
sub error
{
my $e = shift || 'unkown error';
print("$0: $e\n");
exit 0;
}
我们会发现,range操作符还是很有用处的^^.
concatenation.pl
#!/usr/bin/perl
use strict;
use warnings;
main(@ARGV);
sub main
{
my $s1="string 1";
my $s2 = "string 2";
message($s1.' '.$s2);
}
sub message
{
my $m = shift or return;
print("$m\n");
}
sub error
{
my $e = shift || 'unkown error';
print("$0: $e\n");
exit 0;
}
连接运算符 . 也是经常会见到的运算符。
quoteop.pl
1 #!/usr/bin/perl
2
3
4 #
5 use strict;
6 use warnings;
7
8 main(@ARGV);
9
10 sub main
11 {
12 message("This is the \"template.pl\" exercise file from Perl 5 Essential Training.");
13 message(q);
14 message(q/This is the \"template.pl\" exercise file from Perl 5 Essential Training./);
15 message(q{This is the \"template.pl\" exercise file from Perl 5 Essential Training.});
16 my $x=42;
17 message(q{This is the "template.pl" ($x)exercise file from Perl 5 Essential Training.});
18 message(qq{This is the "template.pl" ($x)exercise file from Perl 5 Essential Training.});
19
20 }
21
22 sub message
23 {
24 my $m = shift or return;
25 print("$m\n");
26 }
27
28 sub error
29 {
30 my $e = shift || 'unkown error';
31 print("$0: $e\n");
32 exit 0;
33 }
这个可以参考qq和q的差别,也就是双引号和单引号的差别。
precedence.pl
1 #!/usr/bin/perl
2 #
3 use strict;
4 use warnings;
5
6 main(@ARGV);
7
8 sub main
9 {
10 my $n = 3+7*5;
11 message($n);
12 }
13
14 sub message
15 {
16 my $m = shift or return;
17 print("$m\n");
18 }
19
20 sub error
21 {
22 my $e = shift || 'unkown error';
23 print("$0: $e\n");
24 exit 0;
25 }
可以参照programming perl里面的运算符的优先级表。
或者本目录下的附件:
Operator Precedence.txt
Operator Precedence and Associativity in Perl
=============================================
left terms and list operators (leftward)
left ->
nonassoc ++ --
right **
right ! ~ \ and unary + and -
left =~ !~
left * / % x
left + - .
left << >>
nonassoc named unary operators
nonassoc < > <= >= lt gt le ge
nonassoc == != <=> eq ne cmp ~~
left &
left | ^
left &&
left || //
nonassoc .. ...
right ?:
right = += -= *= etc.
left , =>
nonassoc list operators (rightward)
right not
left and
left or xor
页:
[1]