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[This is the "template.pl" exercise file from Perl 5 Essential Training.]);
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










原文地址:https://www.cnblogs.com/hanleilei/p/2378620.html