2014-11-22 3 views
0

행렬을 하나의 perl 파일에서 다른 백틱으로 명령 줄을 사용하여 전송하고 싶습니다. 첫 번째 파일 펄에 perl 명령 행에서 행렬 사용

, source.pl :

use warnings; 
use strict; 

my @matrix = (
    [1, 2, 3], 
    [4, 5, 6], 
    [7, 8, 9] 
); 

my $results = `perl other_file.pl @matrix`; #option 1 
# my $results = `perl other_file.pl '@matrix'`; #option 2 
print $results; 

에 other_file.pl

use strict 
use warnings 

my @matrix_other = $ARGV[0]; 
print "mat_adress = ".$matrix_other[1][2]."\n"; 

발사 source.pl 후, 터미널 출력 : 옵션을

  • 1 : sh : 1 : 구문 오류 : "(예기치 않은
  • 옵션 2 : 사용할 수 없음 배열 심판으로 트링 ("ARRAY (0x6c0cb8) ARRAY (0x6df410)"...) 나는 또한 시도했습니다 other_file.pl 라인 5.

에서 사용되는 "엄격한 심판은"성공하지 Symbolic references를 사용하는 동안 other_file.pl에 (출력 : "other_file.pl에서 ARRAY 참조가 아닙니다")

어떤 생각? 고마워요.

추신 : 간단한 변수 $ var에 문제가 없습니다.

+0

2 차원 배열을 그런 문자열로 보간 할 수 없습니다. 'ARRAY (0x6c0cb8)'는 문자열 화 된 배열 참조입니다. 또한, 쉘을 통해 다른 변수를 다른 Perl 프로그램으로 전송할 수 없습니다. 원하는 경우, Perl을 사용하여 프로그램을 연결해야합니다. – TLP

+0

명령 행에서 전송하기 위해 렌더링하고 구문 분석해야 할 방법 중 하나입니다. '저장 가능'과 같은 것이 트릭을 할 수 있을까요? – Sobrique

답변

1

좋아, 근본적으로 - 당신이 직접하려는 일을하는 것은 불가능합니다. 배열은 메모리 상태이므로 편리하게 전달하지 못합니다. 그것이 ARRAY(0x6c0cb8)과 같은 것을 얻는 이유입니다. 배열 (또는 하위 요소)이 차지하는 메모리 주소이기 때문입니다.

이렇게하면 배열을 먼저 렌더링 한 다음 서브 프로그램에서 구문 분석해야합니다. perlipc

접근이 걸릴 당신이 달성하기 위해 노력하고 정확하게에 따라 많이 달라집니다

이것은 거기에 대한 문서의 전체 섹션 있다는 충분히 큰 주제입니다. 당신이 일을하려고있어 무엇을 위해, 내 첫번째 생각은 Storable보고하는 것입니다 : 당신은 아마 File::Temp를 사용해야하지만

use warnings; 
use strict; 
use Data::Dumper; 

use Storable qw/retrieve/; 

my ($filename) = @ARGV; 

print Dumper retrieve($filename); 

(:

use warnings; 
use strict; 

use Storable; 

my @matrix = ([ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ]); 

my $tempfile = "matrix.$$"; 
store \@matrix, $tempfile; 

my $results = `perl other_file.pl $tempfile`; #option 1 
print $results; 

와의

가 'other_file'retrieve를 사용 임시 파일의 임의의 이름이 아닌).

그러나 perlipc에서 정보를 앞뒤로 전달하는 방법에 대해 자세히 알아보십시오.

+0

감사합니다. 작동 중입니다. – Poub