# Test1.pm
package Test1;
hello{
print "HELLO\n";
}
http위치나 로컬 위치에 par 리포지토리를 만들고, 찌꺼기 없이 동적으로 로딩하여 사용하는 방법이다.
우선 위 파일을 PAR::Packer로 par 파일로 만든다.
pp -B -p -o test1.par Test1.pm
www 디렉토리로 이동한다. par 리포지토리를 초기화한다.
$ parrepo create -r ./parrepo
그리고 파일이름을 바꿔준다.
$ perl -v
This is perl 5, version 17, subversion 10 (v5.17.10) built for x86_64-linux
....
위에 보이는 5.17.10 과 x86_64_linux 를 복사하여 파일이름을 바꾼다. 0.1 은 버전.
mv test1.par test1-0.1-x86_64_linux-5.17.10.par
그리고 리포지토리에 추가한다.
parrepo inject -r ./parrepo test1-0.1-x86_64_linux-5.17.10.par
이제 사용한다.
#!/usr/bin/perl
# test.pl
use PAR {repository=>'http://localhost/parrepo'};
use Test1;
Test1::hello();
잘된다.
모듈버전, 아키텍처, 펄버전에 따라서 알아서 받으므로 크게 다른 손이 들지 않는다. PAR파일 찌꺼기도 안생기고, /tmp 에 캐시만 생김. par을 만들때 -C 옵션을 주면 캐시도 남기지 않는다.
#!/usr/bin/perl
# test.pl
use Test1;
Test1::hello();
로 test.pl 을 만들고.
pp -B -o test1 test.pl
해서 나온걸 원격으로 받아서 작동시킨다.
아키텍처별로 따로 만든다.
#!/usr/bin/perl
# test.pl
use Test1;
Test1::hello();
로 test.pl 을 만들고.
pp -B -p -o test.par test.pl
해서 나온걸 www에 놓는다.
parl -Ahttp://localhost/test.par _par/http%3A%2F%2Flocalhost%2Ftest.par
파일경로를 url 인코딩한 파일이 현재 디렉토리의 _par 안에 생기는데, 이걸 실행해준다.
parl -Ahttp://localhost/test.par _par/*test.par
이렇게 * 을 써줘도 되긴한다.
--multiarch 옵션으로 par들을 합치면, 아키텍처별로 알아서 선택해 실행된다.
끝.