다른 기능을 위해 비슷한 코드 블록을 가진 여러 Perl 스크립트를 유지 관리하고 있습니다. 코드 블록이 업데이트 될 때마다 각 스크립트를 거쳐 수동으로 변경해야합니다.일반적인 Perl 함수를 자체 스크립트에 캡슐화하는 방법이 있습니까?
공통 함수를 자체 스크립트에 캡슐화하고 호출하는 방법이 있습니까?
다른 기능을 위해 비슷한 코드 블록을 가진 여러 Perl 스크립트를 유지 관리하고 있습니다. 코드 블록이 업데이트 될 때마다 각 스크립트를 거쳐 수동으로 변경해야합니다.일반적인 Perl 함수를 자체 스크립트에 캡슐화하는 방법이 있습니까?
공통 함수를 자체 스크립트에 캡슐화하고 호출하는 방법이 있습니까?
다른 방법이 있지만 모두 심각한 문제가 있습니다. 모듈은 갈 길이고 복잡하지 않아도됩니다. 다음은 기본 템플릿입니다.
package Mod;
use strict;
use warnings;
use Exporter 'import';
#list of functions/package variables to automatically export
our @EXPORT = qw(
always_exported
);
#list of functions/package variables to export on request
our @EXPORT_OK = qw(
exported_on_request
also_exported_on_request
);
sub always_exported { print "Hi\n" }
sub exported_on_request { print "Hello\n" }
sub also_exported_on_request { print "hello world\n" }
1; #this 1; is required, see perldoc perlmod for details
/home/user/perllib
과 같은 디렉토리를 만듭니다. 이 코드를 해당 디렉토리의 Mod.pm
이라는 파일에 넣으십시오. 다음과 같이 모듈을 사용할 수 있습니다 :
#!/usr/bin/perl
use strict;
use warnings;
#this line tells Perl where your custom modules are
use lib '/home/user/perllib';
use Mod qw/exported_on_request/;
always_exported();
exported_on_request();
물론 원하는대로 파일의 이름을 지정할 수 있습니다. 패키지와 파일을 같은 이름으로 지정하는 것이 좋습니다. 패키지 이름에 ::
(예 : File::Find
)을 사용하려면 /home/user/perllib
에 하위 디렉토리를 만들어야합니다. ::
은 /
과 동일하므로 My::Neat::Module
은 /home/user/perllib/My/Neat/Module.pm
파일에 있습니다. 당신은 가장 강력한 방법을 모듈이다 사용하고, 도움이 될 것입니다 모듈을 사용하는 방법을 학습 perldoc Exporter
일반적인 기능을 module에 넣으십시오. 자세한 내용은 perldoc perlmod
을 참조하십시오.
모듈없이이 작업을 수행하는 방법은 없나요을? 나는 Perl을 잘 다루지 못했고 javascript-ish와 같은 솔루션이 더 있었으면 좋겠다. –
라이브러리를 만들 수 있습니다. 다시 말하지만, 우리는 내 책에서 그 모든 것을 다룹니다. :) –
Intermediate Perl의 약 1/3은이 주제에만 사용됩니다.
이것은 대답이 아니라 논평으로 나를 공격합니다. – Telemachus
모듈 또는 문서 페이지로 연결하는 것이 답입니다. –
@brian : 그래, 그것도 꽤 많은 의견이다. (당신이 신안의 대답을 언급했다면, 나는 적어도 모듈에 공통적 인 내용을 넣는다는 단서 문장이있다."당신은 단지"나의 책은 당신에게이 일을하는 법을 알려줍니다. "라고 대답했습니다. 당신의 반응은 사실 저를 보았을 때 시안의 대답에 대한 논평이었습니다.) – Telemachus
에 Exporter
에 대한 perldoc perlmod
에서 모듈에 대한 더 자세한 내용을보실 수 있습니다.
do
기능이 덜 효율적입니다. "mysub.pl」라고, 별도의 파일에 코드를 추출하고,
do 'mysub.pl';
이 다음 읽을 것이다 파일의 내용을 평가 후면. 귀하의 모든 일반적인 기능을 넣고 위의 라인을 포함하는 다른 스크립트에서 호출 할 경우
당신은
require "some_lib_file.pl";
를 사용할 수 있습니다. 예를 들어
:
146$ cat tools.pl
# this is a common function we are going to call from other scripts
sub util()
{
my $v = shift;
return "$v\n";
}
1; # note this 1; the 'required' script needs to end with a true value
147$ cat test.pl
#!/bin/perl5.8 -w
require 'tools.pl';
print "starting $0\n";
print util("asdfasfdas");
exit(0);
148$ cat test2.pl
#!/bin/perl5.8 -w
require "tools.pl";
print "starting $0\n";
print util(1);
exit(0);
그리고 다음과 같은 결과를 얻을 것입니다 test.pl
및 test2.pl
을 실행 :
149$ test.pl
starting test.pl
asdfasfdas
150$ test2.pl
starting test2.pl
1
감사합니다. , 그것은 웹에서 찾은 것보다 더 분명합니다. 모든 수출품을 이해할 수는 없지만 귀하의 예에서 사용하는 방법을 이해합니다. –