Qual é a diferença entre .pm
(módulo Perl) e .pl
(script Perl) arquivo?
Diga-me também por que voltamos 1
do arquivo. Se retornar 2 ou qualquer outra coisa, não está gerando nenhum erro, então por que retornamos 1
do módulo Perl?
perl
perl-module
user380979
fonte
fonte
1
nã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 ouuse
que falhe.Respostas:
Basicamente, a extensão de arquivo que você usa não faz diferença em como
perl
interpreta esses arquivos.No entanto, colocar módulos em
.pm
arquivos que seguem uma certa estrutura de diretório que segue o nome do pacote é uma conveniência. Portanto, se você tiver um móduloExample::Plot::FourD
e colocá-lo em um diretórioExample/Plot/FourD.pm
em um caminho no seu@INC
,use
erequire
fará a coisa certa quando receber o nome do pacote como emuse Example::Plot::FourD
.Tudo o que
use
faz é descobrir o nome do arquivo a partir do nome do pacote fornecido,require
em umBEGIN
bloco e invocarimport
no pacote. Não há nada que o impeça de não usar,use
mas executar essas etapas manualmente.Por exemplo, abaixo coloquei o
Example::Plot::FourD
pacote em um arquivo chamadot.pl
, carreguei-o em um script em arquivos.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á.fonte
Um .pl é um único script.
Em .pm ( Módulo Perl ), você tem funções que pode usar de outros scripts Perl:
fonte