生物信息学习

perl 编程技巧(二)

2017-05-23  本文已影响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 )交流:

小刘哥

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

小刘哥公众号
上一篇 下一篇

猜你喜欢

热点阅读