反引号(``)以及system都是perl中执行系统命令的方式,但是两者有较大的不同。
总体概括一下,在perl程序中“`$cmd`” 获取的是程序执行结果,而system($cmd)获取的是程序执行后的返回值。
详情参看如下示例:
操作系统 & perl 版本:
[root@mdw ~]# uname -a
Linux mdw 2.6.18-238.el5 #1 SMP Sun Dec 19 14:22:44 EST 2010 x86_64 x86_64 x86_64 GNU/Linux
[root@mdw ~]# perl -v
This is perl, v5.8.8 built for x86_64-linux-thread-multi
Copyright 1987-2006, Larry Wall
Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.
Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl". If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.
demo示例:
#!/usr/bin/perl
use strict;
my ($cmd,$ret1,$ret2);
$cmd = "ls /tmp";
print "*************执行反引号结果*****************\n";
$ret1 = `$cmd`;
print "*************执行system结果*****************\n";
$ret2 = system($cmd);
print "*************反引号方式*****************\n";
print $ret1 ;
print "*************下面是system方式*****************\n";
print $ret2 ;
执行结果如下:
[root@mdw ~]# perl 20150325.pl
<span style="color:#ff6666;">*************执行反引号结果*****************#反引号执行结果输出为空</span>
*************执行system结果*****************<span style="color: rgb(255, 102, 102); font-family: 'Microsoft YaHei';">#system将执行结果输出</span>
dsp.war keyring-BRRbfe keyring-ef4G7O keyring-qF3esN mapping-root ssh-LdGZWd5072 vmware-root
edsSvc.war keyring-CLv3aa keyring-Ib7ubB keyring-w6ccVd OraInstall2014-12-10_11-03-22PM virtual-root.KIEbpb
gconfd-root keyring-D3X4iy keyring-iXPFuW keyring-yDTyOo orbit-root virtual-root.nNRBCU
keyring-ap4Ph9 keyring-eC7MRe keyring-nSr1Pp keyring-YzW56H ssh-BGYzXS4811 VMwareDnD
*************反引号方式*****************
dsp.war
edsSvc.war
gconfd-root
keyring-ap4Ph9
keyring-BRRbfe
keyring-CLv3aa
keyring-D3X4iy
keyring-eC7MRe
keyring-ef4G7O
keyring-Ib7ubB
keyring-iXPFuW
keyring-nSr1Pp
keyring-qF3esN
keyring-w6ccVd
keyring-yDTyOo
keyring-YzW56H
mapping-root
OraInstall2014-12-10_11-03-22PM
orbit-root
ssh-BGYzXS4811
ssh-LdGZWd5072
virtual-root.KIEbpb
virtual-root.nNRBCU
VMwareDnD
vmware-root
*************下面是system方式*****************
<span style="color:#ff0000;">0</span>[root@mdw ~]#
从上面的执行结果可以看出,当调用system命令的时候,系统会将执行结果输出到屏幕,并且将执行结果返回值(0或者非0)传给$ret2 ;
然而反引号(``)将会把所有结果都保存到变量$ret1上,并且不会输出任何结果。
有兴趣的同学可以将$cmd改成一个执行错误的命令,并且执行程序,查看输出
#################################################################################################
小P工作室提供专业perl培训 . 解决perl开发过程中遇到各种问题.
沟通交流群 :438349855 QQ :1400184751