zoukankan      html  css  js  c++  java
  • 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










  • 相关阅读:
    数据结构(三)栈与递归
    机器学习(二)------ 回归
    数据结构(二)线性表
    数据结构(一)数据结构基础
    机器学习 (一)------分类
    操作系统概述
    NumPy函数库基础
    总线与输入输出子系统
    FT VIEW SE高效开发之全局对象
    STUDIO 5000 V32新CRACK和新功能
  • 原文地址:https://www.cnblogs.com/hanleilei/p/2378620.html
Copyright © 2011-2022 走看看