Qual é a diferença entre .pm(módulo Perl) e .pl(script Perl) arquivo?
Diga-me também por que voltamos 1do arquivo. Se retornar 2 ou qualquer outra coisa, não está gerando nenhum erro, então por que retornamos 1do módulo Perl?
Qual é a diferença entre .pm(módulo Perl) e .pl(script Perl) arquivo?
Diga-me também por que voltamos 1do arquivo. Se retornar 2 ou qualquer outra coisa, não está gerando nenhum erro, então por que retornamos 1do módulo Perl?
Respostas:
Basicamente, a extensão de arquivo que você usa não faz diferença em como perlinterpreta esses arquivos.
No entanto, colocar módulos em .pmarquivos que seguem uma certa estrutura de diretório que segue o nome do pacote é uma conveniência. Portanto, se você tiver um módulo Example::Plot::FourDe colocá-lo em um diretório Example/Plot/FourD.pmem um caminho no seu @INC, usee requirefará a coisa certa quando receber o nome do pacote como em use Example::Plot::FourD.
O arquivo deve retornar true como a última instrução para indicar a execução bem-sucedida de qualquer código de inicialização, portanto, é comum encerrar esse arquivo com a
1;menos que você tenha certeza de que retornará true de outra forma. Mas é melhor apenas colocar o1;, caso adicione mais instruções.Se
EXPRfor uma palavra de barra,requireassume a extensão ".pm" e substitui "::" por "/" no nome do arquivo para você, para facilitar o carregamento dos módulos padrão. Esta forma de carregamento de módulos não corre o risco de alterar seu namespace.
Tudo o que usefaz é descobrir o nome do arquivo a partir do nome do pacote fornecido, requireem um BEGINbloco e invocar importno pacote. Não há nada que o impeça de não usar, usemas executar essas etapas manualmente.
Por exemplo, abaixo coloquei o Example::Plot::FourDpacote em um arquivo chamado t.pl, carreguei-o em um script em arquivo s.pl.
C:\Temp> cat t.pl
package Example::Plot::FourD;
use strict; use warnings;
sub new { bless {} => shift }
sub something { print "something\n" }
"Example::Plot::FourD"
C:\Temp> cat s.pl
#!/usr/bin/perl
use strict; use warnings;
BEGIN {
require 't.pl';
}
my $p = Example::Plot::FourD->new;
$p->something;
C:\Temp> s
something
Este exemplo mostra que os arquivos de módulo não precisam terminar em 1, qualquer valor verdadeiro servirá.
Um .pl é um único script.
Em .pm ( Módulo Perl ), você tem funções que pode usar de outros scripts Perl:
Um módulo Perl é uma parte independente do código Perl que pode ser usado por um programa Perl ou por outros módulos Perl. É conceitualmente semelhante a uma biblioteca de links C ou a uma classe C ++.
1não importa. Pode ser2, pode ser"foo", pode ser["a", "list"]. O que importa é que não seja0, ou qualquer outra coisa que seja avaliada como falsa ouuseque falhe.