在perl中嵌入shell命令
在linux中,如果要把几个可执行程序结合起来使用,一般是采用shell或者perl,当然,python也可以。这里说一下在perl里嵌入shell命令的情形。一般来说,最简单的方式就是采用“(qx//)就可以执行命令12$cmd = "du * sh";`$cmd`;这样命令就执行了,但是却并没有输出。要输入的话,简单的可以这么处理:1print `$cmd`;这里,如果程序有输入,那就不行了,
在linux中,如果要把几个可执行程序结合起来使用,一般是采用shell或者perl,当然,python也可以。
这里说一下在perl里嵌入shell命令的情形。
一般来说,最简单的方式就是采用“(qx//)就可以执行命令
1 2 | $cmd = "du * sh"; `$cmd`; |
这样命令就执行了,但是却并没有输出。要输入的话,简单的可以这么处理:
1 | print `$cmd`; |
这里,如果程序有输入,那就不行了,后面再细说。
下面看看另外一种方式,即system执行命令,它可以返回程序的退出状态,也就是说它可以判断程序执行是否成功,我们也可以拿它来做个有趣的东西,看下面的程序:
1 2 3 4 5 6 7 8 | |
这是一个c++程序,我们把程序的退出状态设定为输入参数的第1和第2个参数的第一个字符代表的数字的和。通过g++,我们把它编译为add程序: g++ add.cc -o add
那么利用perl的system函数,就可以捕获这一退出状态:
1 2 3 4 | #!/usr/bin/perl $a=1;$b=3; print system("./add $a $b"); |
输出4
也就是说我们可以利用其他程序来为perl做计算,这个是不是有点像dll的味道? :)
但是这里有个缺点,就是程序的退出状态必须是整数。
那么perl是不是就没办法做这件事了呢? 我要说是,很多perl的fans肯定不乐意了,既然perl强大,我们就见识一下它怎么来做这件事吧
我们把那个c++程序改一改:
1 2 3 4 5 6 | |
我们用这个程序来输出第一个参数的第一个字符的ascii码,在perl里我们这么来使用:
1 2 3 4 5 | #!/usr/bin/perl $a = "a"; $b = `./add $a`; print $a,":",$b,"n"; |
输出 a:97
怎么样,是不是更有dll的味道了?
最后来说一下如果调用的程序里有输入,又该怎么处理呢? 我们再把c++程序改一改
1 2 3 4 5 6 7 8 9 | |
这个程序让用户手动输入字符,打印字符的ascii码,来看在perl中的调用
1 2 3 4 5 | #!/usr/bin/perl $cmd = "./add"; open(CMD, "($cmd) |"); while(<CMD>){print;} #一行一行地输出<br />close(CMD);<br /></cmd> |
输出:
input a char:
a
97
解释一下为什么第一个endl很重要,因为在输出的时候,无法同时处理输入和输出,所以加换行,让输入单独在一行。
更多推荐
所有评论(0)