在perl中嵌入shell命令

2021-05-22 21:29:18 字數 1991 閱讀 1264

在linux中,如果要把幾個可執行程式結合起來使用,一般是採用shell或者perl,當然,python也可以。

這裡說一下在perl裡嵌入shell命令的情形。

一般來說,最簡單的方式就是採用「(qx//)就可以執行命令

1

2

$cmd = "du * sh"; 

`$cmd

`;

這樣命令就執行了,但是卻並沒有輸出。要輸入的話,簡單的可以這麼處理:

1
print `

$cmd

`;

這裡,如果程式有輸入,那就不行了,後面再細說。

下面看看另外一種方式,即system執行命令,它可以返回程式的退出狀態,也就是說它可以判斷程式執行是否成功,我們也可以拿它來做個有趣的東西,看下面的程式:

123

4567

8

#include 

using

namespace std;

int main(

int argt, char

* argv)

這是乙個c++程式,我們把程式的退出狀態設定為輸入引數的第1和第2個引數的第乙個字元代表的數字的和。通過g++,我們把它編譯為add程式: g++ add.cc -o add

那麼利用perl的system函式,就可以捕獲這一退出狀態:

123

4

#!/usr/bin/perl $a=

1;$b=

3;print

system

("./add $a $b"

);

輸出4也就是說我們可以利用其他程式來為perl做計算,這個是不是有點像dll的味道? :)

但是這裡有個缺點,就是程式的退出狀態必須是整數。

那麼perl是不是就沒辦法做這件事了呢? 我要說是,很多perl的fans肯定不樂意了,既然perl強大,我們就見識一下它怎麼來做這件事吧

我們把那個c++程式改一改:

123

456

#include 

using

namespace std;

int main(

int argt, char

* argv)

我們用這個程式來輸出第乙個引數的第乙個字元的ascii碼,在perl裡我們這麼來使用:

123

45

#!/usr/bin/perl$a=

"a";$b=

`./add $a`

;print$a,

":",$b,

"n";

輸出 a:97

怎麼樣,是不是更有dll的味道了?

最後來說一下如果呼叫的程式裡有輸入,又該怎麼處理呢? 我們再把c++程式改一改

123

4567

89

#include

using

namespace std;

int main(

)

這個程式讓使用者手動輸入字元,列印字元的ascii碼,來看在perl中的呼叫

123

45

#!/usr/bin/perl 

$cmd

="./add"

;open

(cmd,

"($cmd) |");

while()

#一行一行地輸出

close(cmd);

輸出:

input a char:

a97

解釋一下為什麼第乙個endl很重要,因為在輸出的時候,無法同時處理輸入和輸出,所以加換行,讓輸入單獨在一行。

在C 程式中嵌入Perl

perl 庫一般在這樣的資料夾下 usr local lib perl5 your architecture here core 可以這樣得到它的位置 perl mconfig e print config 編譯的時候要這樣 gcc o2 dbool char dhas bool i usr loc...

在Perl中使用shell命令和管道

在perl中使用shell命令有三種方法 第一種方法,system函式格式如下 system command 若命令正常執行則返回0,否則返回非零值 此方法的缺點是不能將shell命令的輸出直接捕獲到perl程式中來 第二種方法,使用反引號 可直接將shell命令的輸出捕獲到perl程式中 即其返回...

Perl呼叫shell命令方法小結

一 system perl也可以用system呼叫shell的命令,它和awk的system一樣,返回值也是它呼叫的命令的退出狀態.複製 如下 root ax3sp2 cat aa.pl usr bin perl w file wt.pl system ls l wt.pl result syste...