2011-08-22 8 views
1

서브 루틴을 통해 호출하는 경우 어떻게 perl에서 쉘 명령을 실행합니까?펄 루틴 내에서 쉘 명령을 실행하는 방법은 무엇입니까?

예를 들어, 나는 특정 값을 얻기 위해 명령 줄에서이 작업을 실행할 수 있습니다 : 나는 펄 서브 루틴 내에서이 명령을 실행하고 호출 할

mycert-util --show test.user.myuser_cd 

. 예를 들어 내 루틴은 get_auth이고, get_auth의 값을 출력하고 싶습니다.

코드 : 당신은 아마 당신의 $ 간부 변수와 적절하게 다음 출력을 반환해야처럼

use strict; 
use warnings; 

#&get_auth; 
#get_auth(); 

print "The value is: get_auth() \n"; 

sub get_auth 
{ 
    $exec=`mycert-util --show test.user.myuser_cd`; 
} 
+0

원하는 코드가 원하는대로 작동하지 않습니까? 그렇지 않은 경우, 원하는 행동은 무엇이며, 대신 무엇을합니까? –

+2

그런데 perl은 큰 따옴표로 묶인 문자열에서 서브 루틴 호출을 보간하지 않으므로 값은 ".get_auth()."\ n "'이어야합니다. (그리고 인식되어야 할 하위 정의 뒤에 와야합니다). 그러나 이것은 쉘 명령어 _in_와 아무런 관련이 없습니다. –

답변

3

귀하의 문제는 하위되지 않습니다,하지만 당신은 그것을 호출하는 방법 . 따옴표 안에 하위 호출을 배치 할 수 없습니다. 다음과 같은 일부 대체 기능.

use feature qw(say); 
say "The value is: ", get_auth(); 

sub get_auth { 
    return qx(mycert-util --show test.user.myuser_cd); 
} 
+0

perl 5.8에서'feature'와'say'를 사용합니까? – jdamae

+0

그렇게 생각합니다. 그것을 밖으로 시도하십시오. – TLP

+0

행운. '@ INC에서 feature.pm을 찾을 수 없습니다 .' – jdamae

2

같습니다 :

sub get_auth 
{ 
    $exec=`mycert-util --show test.user.myuser_cd`; 
    return $exec; 
} 

print "The value is: " . get_auth() . "\n"; 
관련 문제