美文网首页生物信息学习
perl 编程技巧(二)

perl 编程技巧(二)

作者: 正踪大米饭儿 | 来源:发表于2017-05-23 18:29 被阅读49次

    今天写程序发现一个以前混淆的概念:

    my $time = q/`date +%Y-%m-%d' '%H:%M:%S`/;
    

    这个用法在写程序中一般是比较常用的,尤其是在写一些输出的日志信息时;

    但是在这里我错误的使用了 qw 导致我的程序报错了:

    Useless use of a constant (`date) in void context at script.pl line 6.
    Useless use of a constant (+%Y-%m-%d') in void context at script.pl line 6.
    

    检查后才发现错误的原因。

    这篇笔记就简单分析一下 q, qq, qw, qx 这四者之间的用法与区别。

    1. q

    perl 中一个字母 q 相当于一对单引号 ' ' 其引号内部的内容中的转义符不起作用;
    使用 q 加一对成对的符号表示,如:
    q//, q{}, q[], q() 等表示;

    2. qq

    qq 相当于双引号 " ", 其内部引的内容中转义符起作用,例如\t表示一个制表符;
    使用方式同 q 相同, 用 qq 加一对 成对的符号表示,如:
    qq//, qq(), qq{}, qq[] 等。

    3. qw

    qw 相当于 ( '' ..'', '..')在每一个字符串添加引号;
    qq 和 qw 区别在于 qq 会将数组整体赋给一个变量,而 qw 则会将数组中的每一个元素单独赋给一个变量。

    看示例:

    #!/usr/bin/perl -w
    use strict;
    
    my $out1 = qq/a b c d/;
    my @out1 = qq/a b c d/;
    
    my $out2 = qw/a b c d/;
    my @out2 = qw/a b c d/;
    
    print "$out1\n@out1\n$out2\n@out2\n";
    
    

    编译检查结果如下:

    $perl -c script.pl
    Useless use of a constant (a) in void context at script.pl line 7.
    Useless use of a constant (b) in void context at script.pl line 7.
    Useless use of a constant (c) in void context at script.pl line 7.
    script syntax OK
    

    在检查语法的时候会有提示的信息。

    输出结果如下:

    $perl script.pl
    $ perl fetch_mature_hairpin.pl 
    Useless use of a constant (a) in void context at script.pl line 7.
    Useless use of a constant (b) in void context at script.pl line 7.
    Useless use of a constant (c) in void context at script.pl line 7.
    a b c d
    a b c d
    d
    a b c d
    

    换一种赋值方式:

    #!/usr/bin/perl -w
    use strict;
    
    my $out1 = qq/a b c d/;
    my @out1 = qq/a b c d/;
    
    my ( $a, $b, $c, $d )  = qw/a b c d/;
    my @out2 = qw/a b c d/;
    
    print "$out1\n@out1\n@out2\n";
    print "$a,$b,$c,$d\n";
    

    输出结果:

    $ perl script.pl
    a b c d
    a b c d
    a b c d
    a,b,c,d
    

    4. qx

    qx 的作用类似 反引号 `` 或者system
    看示例:

    # perl 单行命令
    $ perl -e '$a=qx/date/;print $a'
    $ perl -e '$a=`date`;print $a'
    $ perl -e '$a=system("date");print $a'
    

    这三条命令输出的结果都一样:

    # 打印当前的系统时间
    Tue May 23 18:02:44 CST 2017
    

    添加小刘哥微信号( Alipe_2013 )交流:

    小刘哥

    或者关注小刘哥公众号,不定期推送文章分享学习心得:

    小刘哥公众号

    相关文章

      网友评论

        本文标题:perl 编程技巧(二)

        本文链接:https://www.haomeiwen.com/subject/hblgxxtx.html