2014-07-26 4 views
-1

나는 perl에 익숙하지 않기 때문에 perl 스크립팅에 대한 지식이별로 없다. 나는 test1.pl과 testfinal.pl이라는 두 개의 파일을 가지고있다.perl에서 한 파일의 변수를 다른 파일의 함수로 내보내거나 사용하려면 어떻게해야합니까?

testfinal.pl

for loop{ 
$var = $_; 
my $out = `perl test1.pl -p $var`; 
} 

test1.pl

Foo(); 
sub Foo(){ 
# I want to get $var from testfinal.pl so that I can perform some functions of that perticular varaible. 
$elt = `mkdir $var`; 
} 

좀 링크를 확인,하지만 난 '가 .pm'형식으로 파일을 만들 필요가 수출에 대한 발견 (testfinal.pm) 이것은 최종 결과를 얻지 만 testfinal.pl을 실행해야하므로 불가능합니다.

사람이 quickly.Please 여기 좀 도와 줄래 ...

답변

2

Pathak를 파일 시스템을 통해 정보를 전달하는 교묘 한 방법으로 덮여있다, 그러나 나는 또한 당신이 명령 줄을 통해 $var를 통과했습니다 있습니다. test1.pl은 이미 해당 정보가 @_, 구체적으로는 $_[1]이어야합니다.

예 :

Foo(); 

sub Foo(){ 
    $elt = `mkdir $_[1]`; 
} 

또는 명령 라인 파라미터 청소기 취급 할

Foo($_[1]); 

sub Foo{ #prototype deleted, probably should stay that way... 
    my $dir = shift; 
    $elt = `mkdir $dir`; 
} 

더 상기 GetOpt::Long 코어 모듈이다.

펄 실행 파일의 두 번째 인스턴스 인 셸 &을 실행하는 데 첨부되지 않은 경우 두 개의 파일을 단일 프로그램으로 실행하기위한 다른 승인은 키워드 userequire입니다. (자세한 내용은 perldoc을 확인하십시오.) 이러한 접근 방식을 통해 패키지 변수를 공유하거나 매개 변수를 대상 서브 루틴에 직접 전달할 수 있습니다.

1

perlmodExporter에 설명 된대로 모듈을 만드는 것이 좋습니다.

MyModule.pm :

package MyModule; 

use strict; 
use warnings; 

use Exporter qw(import); 

sub Foo { 
    my $var = shift; 
    print "mkdir $var\n"; 
} 

testfinal.pl :

다음은 설정이 작업을 수행하는 방법을 보여줍니다

use strict; 
use warnings; 

use MyModule qw(Foo); 

my @array = (...); 

for my $var (@array) { 
    my $out = Foo($var); 
} 

은 또한 펄 네이티브 mkdir 기능을 가지고 있습니다, 그래서 거기 해당 기능을 위해 시스템을 쉘 아웃 할 필요가 없습니다.

관련 문제