45tr 发表于 2015-12-27 09:10:44

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]
查看完整版本: Perl 学习手札之八: Operators