2017-02-10 1 views
0

나는 wrapper로 사용하고있는 펄 스크립트를 가지고있다. perl 스크립트는 사용자로부터 인수를 수집 한 다음 인수가 배열 인 하위 스크립트를 호출합니다.Perl로부터 하위 스크립트로 Args 전달

문제는 하위 스크립트가 실행될 때 모든 인수가 ARGV [1]에 있다는 것입니다. 사용할 수있는 특수 구분 기호가 있습니까? 나는 정말 자식 스크립트 내부에 배열을 반복하지 않는 것을 선호한다. 종류의 목적을 패배.

[KSH 스크립트]

Your Args 
ARG1: foo bar 
ARG2: 

I 기대했던 결과

Your Args 
ARG1: foo 
ARG2: bar 

내가 배열로 인수를 밀어 배열과 인수를 제공하고있다 그러나.

[펄 스크립트] system

print "Enter $arg_array[$i]: "; 
my $value = <STDIN>; 
chomp $value; 
if (defined $value) { 
    push (@arg_entry, "$value"); #create args array to pass to selectd script 

    } 
    .... sometime later, in another function ...... 

    system("$select_script", "@arg_entry"); 

답변

2

중 하나는 쉘 해석 (그리고 공백에 의해 인수의 분리 순종) 될 단일 문자열을 전달합니다

system 'command arg1 arg2'; 

또는 당신은 당신처럼 여러 인자를 사용합니다. 이 경우 첫 번째 매개 변수는 프로그램이고 다음 매개 변수는 각각 인수입니다. 당신이 ("@arg_entry"로) 문자열을 보간하여 모든 인수에 합류 이후

system 'command', 'arg1', 'arg2'; 

그래서, 그들은 하나 같이 주어졌다. 솔루션은 간단하고, 보간하지 않으며 인수 목록에 정상적으로 삽입됩니다.

system 'command', @args; 
system($select_script, @arg_entry); 
+2

감사합니다 !!! 나는 이것을 호출하는 대안을 찾고 인터넷의 끝 부분에 도달했다. 3 번째 코드 블록의 첫 번째 줄이 답이되었습니다! – Autonomic

+0

@JeremyWinslow 기쁘게 생각합니다. ''$ select_script ''와' "$ value"'의 보간은 전혀 필요하지 않습니다. 변수를 직접 사용할 수 있습니다. – sidyll

+4

@JeremyWinslow는 매우 어두웠습니까? – simbabque

관련 문제