今天写程序发现一个以前混淆的概念:
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 )交流:
小刘哥或者关注小刘哥公众号,不定期推送文章分享学习心得:
小刘哥公众号
网友评论