Este é o comando perlfaq3 que pode ser executado no provedor de hospedagem gratuita OnWorks usando uma de nossas várias estações de trabalho online gratuitas, como Ubuntu Online, Fedora Online, emulador online do Windows ou emulador online do MAC OS
PROGRAMA:
NOME
perlfaq3 - Ferramentas de Programação
VERSÃO
versão 5.021009
DESCRIÇÃO
Esta seção do FAQ responde a perguntas relacionadas às ferramentas do programador e programação
.
Como funciona o dobrador de carta de canal do I do (nada)?
Você já olhou para o CPAN (veja perlfaq2)? As chances são de que alguém já escreveu um
módulo que pode resolver seu problema. Você leu as páginas de manual apropriadas? Aqui está um
breve índice:
fundamentos básicos
perldata - tipos de dados Perl
perlvar - variáveis pré-definidas de Perl
perlsyn - sintaxe Perl
perlop - Operadores Perl e precedência
perlsub - sub-rotinas Perl
Execução
perlrun - como executar o interpretador Perl
perldebug - depuração Perl
Funções
perlfunc - funções integradas de Perl
objetos
perlref - referências Perl e estruturas de dados aninhadas
perlmod - módulos Perl (pacotes e tabelas de símbolos)
perlobj - objetos Perl
perltie - como esconder uma classe de objeto em uma variável simples
Estruturas de dados
perlref - referências Perl e estruturas de dados aninhadas
perllol - Manipulação de matrizes de matrizes em Perl
perldsc - Livro de receitas de estruturas de dados Perl
Módulos
perlmod - módulos Perl (pacotes e tabelas de símbolos)
perlmodlib - construindo novos módulos Perl e encontrando os existentes
Regexes
perlre - Expressões regulares Perl
perlfunc - funções integradas Perl>
perlop - Operadores Perl e precedência
perllocale - tratamento de localidade Perl (internacionalização e localização)
Movendo para perl5
perltrap - armadilhas Perl para os incautos
perl
Ligando com C
perlxstut - Tutorial para escrever XSUBs
perlxs - manual de referência da linguagem XS
perlcall - convenções de chamada Perl de C
perlguts - Introdução à API Perl
perlembed - como incorporar perl em seu programa C
Vários
<http://www.cpan.org/misc/olddoc/FMTEYEWTK.tgz> (não é uma página de manual, mas ainda é útil, um
coleção de vários ensaios sobre técnicas Perl)
Um índice básico para o conjunto de páginas de manual do Perl pode ser encontrado em perltoc.
Como funciona o dobrador de carta de canal pode I usar Perl interativamente?
A abordagem típica usa o depurador Perl, descrito no perl debug(1) página de manual, em um
programa "vazio", como este:
perl-de 42
Agora, basta digitar qualquer código Perl válido e ele será avaliado imediatamente. Você também pode
examinar a tabela de símbolos, obter rastreamentos de pilha, verificar valores de variáveis, definir pontos de interrupção,
e outras operações normalmente encontradas em depuradores simbólicos.
Você também pode usar Devel :: REPL, que é um shell interativo para Perl, comumente conhecido como
REPL - Leia, avalie, imprima, faça um loop. Ele fornece vários recursos úteis.
Como funciona o dobrador de carta de canal do I find qual módulos e guarante que os mesmos estão instalado on my sistema?
Na linha de comando, você pode usar a opção "-l" do comando "cpan":
$ cpan-l
Você também pode usar a opção "-a" de "cpan" para criar um arquivo autobundle que "CPAN.pm"
compreende e pode usar para reinstalar todos os módulos:
$ cpan-a
Dentro de um programa Perl, você pode usar o módulo ExtUtils :: Installed para mostrar todos os instalados
distribuições, embora possa demorar um pouco para fazer sua mágica. A biblioteca padrão que
vem com Perl apenas aparece como "Perl" (embora você possa obtê-los com
Módulo :: CoreList).
use ExtUtils :: Installed;
meu $ inst = ExtUtils :: Instalado-> new ();
meus @modules = $ inst-> modules ();
Se você quiser uma lista de todos os nomes de arquivo do módulo Perl, você pode usar Arquivo :: Encontrar :: Regra:
use Arquivo :: Encontrar :: Regra;
meus @files = File :: Find :: Rule->
extras ({follow => 1}) ->
arquivo () ->
nome ('* .pm') ->
em (@INC)
;
Se você não tiver esse módulo, você pode fazer a mesma coisa com File :: Find que faz parte de
a biblioteca padrão:
use File :: Find;
meus arquivos;
achar(
{
queria => sub {
push @files, $ File :: Find :: fullname
if -f $ File :: Find :: fullname && /\.pm$/
},
seguir => 1,
follow_skip => 2,
},
@INC
);
imprimir junção "\ n", @files;
Se você simplesmente precisa verificar rapidamente se um módulo está disponível, você pode verificar se há
documentação. Se você pode ler a documentação, o módulo provavelmente está instalado. Se
você não pode ler a documentação, o módulo pode não ter nenhum (em casos raros):
Módulo $ perldoc :: Nome
Você também pode tentar incluir o módulo em uma linha para ver se perl o encontra:
$ perl -MModule :: Name -e1
(Se você não receber a mensagem de erro "Não é possível localizar ... em @INC", o Perl encontrou o
nome do módulo que você solicitou.)
Como funciona o dobrador de carta de canal do I depurar my Perl programas?
(contribuição de brian d foy)
Antes de fazer qualquer outra coisa, você pode ajudar a si mesmo garantindo que Perl lhe diga
sobre áreas problemáticas em seu código. Ao ativar avisos e restrições, você pode evitar
muitos problemas antes que se tornem grandes demais. Você pode descobrir mais sobre estes em estrito e
avisos.
#!/ usr / bin / perl
use estrito;
use avisos;
Além disso, o depurador mais simples é a função "imprimir". Use-o para ver os valores como
você executa seu programa:
print STDERR "O valor é [$ value] \ n";
O módulo Data :: Dumper pode imprimir estruturas de dados Perl:
use Data :: Dumper qw (Dumper);
imprimir STDERR "O hash é". Dumper (\% hash). "\ n";
Perl vem com um depurador interativo, que você pode iniciar com a opção "-d". Isso é
totalmente explicado em perldebug.
Se você gostaria de uma interface gráfica com o usuário e tem Tk, você pode usar "ptkdb". Está ligado
CPAN e disponível gratuitamente.
Se você precisa de algo muito mais sofisticado e controlável, Leon Brocard's Devel :: ebug
(que você pode chamar com a opção "-D" como "-Debug") oferece os ganchos programáticos
em tudo que você precisa para escrever seu próprio (sem muita dor e sofrimento).
Você também pode usar um depurador comercial, como Affrus (Mac OS X), Komodo da Activestate
(Windows e Mac OS X) ou EPIC (a maioria das plataformas).
Como funciona o dobrador de carta de canal do I profile my Perl programas?
(contribuição de brian d foy, atualizado em Fri Jul 25 12:22:26 PDT 2008)
O namespace "Devel" tem vários módulos que você pode usar para criar o perfil de seus programas Perl.
O Devel :: NYTProf (New York Times Profiler) faz o perfil de declaração e sub-rotina.
Ele está disponível no CPAN e você também o invoca com a opção "-d":
perl -d: NYTProf some_perl.pl
Ele cria um banco de dados das informações de perfil que você pode transformar em relatórios. O
O comando "nytprofhtml" transforma os dados em um relatório HTML semelhante ao Devel :: Cover
relatório:
nytprofhtml
Você também pode estar interessado em usar o Benchmark para medir e comparar trechos de código.
Você pode ler mais sobre perfis em Programação Perl, capítulo 20, ou Dominar Perl,
capítulo 5.
documentos perldebguts criando um depurador personalizado se você precisar criar um tipo especial de
analisador. brian d foy descreve o processo em O Perl Blog, "Criando um Perl
Debugger ",http://www.ddj.com/184404522> e "Criação de perfil em Perl"
<http://www.ddj.com/184404580>.
Perl.com tem dois artigos interessantes sobre criação de perfis: "Profiling Perl", de Simon Cozens,
<http://www.perl.com/lpt/a/850> e "Depuração e criação de perfil de aplicativos mod_perl", por
Frank Wiles,http://www.perl.com/pub/a/2006/02/09/debug_mod_perl.html>.
Randal L. Schwartz escreve sobre a criação de perfil em "Speeding up Your Perl Programs" para Unix
Revisão,http://www.stonehenge.com/merlyn/UnixReview/col49.html> e "Criação de perfil em
Template Toolkit via substituição "para Linux revista,
<http://www.stonehenge.com/merlyn/LinuxMag/col75.html>.
Como funciona o dobrador de carta de canal do I referência cruzada my Perl programas?
O módulo B :: Xref pode ser usado para gerar relatórios de referência cruzada para programas Perl.
perl -MO = Xref [, OPÇÕES] scriptname.plx
Is lá a linda impressora (formatador) for Perl?
Perl :: Tidy vem com um script perl perltidy que recua e reformata scripts Perl para
torne-os mais fáceis de ler, tentando seguir as regras do perlstyle. Se você escrever
Perl, ou passar muito tempo lendo Perl, provavelmente o achará útil.
Claro, se você simplesmente seguir as diretrizes em perlstyle, você não precisará
reformatar. O hábito de formatar o código à medida que o escreve ajudará a evitar bugs. Sua
o editor pode e deve ajudá-lo com isso. O modo perl ou o modo cperl mais recente para emacs podem
fornecem quantidades notáveis de ajuda com a maioria (mas não todos) do código, e ainda menos
editores programáveis podem fornecer assistência significativa. Tom Christiansen e muitos outros
Os usuários do VI juram pelas seguintes configurações no vi e seus clones:
definir ai sw = 4
mapa! ^ O {^ M} ^ [O ^ T
Coloque isso no seu .exrc arquivo (substituindo os caracteres circunflexos por caracteres de controle) e
embora você vá. No modo de inserção, ^ T é para indentação, ^ D é para indentação e ^ O é para
blockdenting - por assim dizer. Um exemplo mais completo, com comentários, pode ser encontrado em
<http://www.cpan.org/authors/id/TOMC/scripts/toms.exrc.gz>
Is lá an IDE or Windows Perl Editor?
Os programas Perl são apenas texto simples, portanto, qualquer editor servirá.
Se você está no Unix, já tem um IDE - o próprio Unix. A filosofia Unix é a
filosofia de várias pequenas ferramentas em que cada uma faz uma coisa e a faz bem. É como um
caixa de ferramentas do carpinteiro.
Se você quiser um IDE, verifique o seguinte (em ordem alfabética, não em ordem de preferência):
Eclipse
<http://e-p-i-c.sf.net/>
O Eclipse Perl Integration Project integra edição / depuração Perl com Eclipse.
Local do motor
<http://www.enginsite.com/>
Perl Editor da EngInSite é um ambiente de desenvolvimento integrado (IDE) completo para
criação, teste e depuração de scripts Perl; a ferramenta roda no Windows
9x / NT / 2000 / XP ou posterior.
Quefra
<http://kephra.sf.net>
Editor de GUI escrito em Perl usando wxWidgets e Scintilla com muitos arquivos menores
recursos. Visa uma IU baseada em princípios Perl como TIMTOWTDI e "coisas fáceis
deve ser fácil, coisas difíceis devem ser possíveis ".
Komodo
<http://www.ActiveState.com/Products/Komodo/>
Plataforma cruzada do ActiveState (em outubro de 2004, Windows, Linux e Solaris),
IDE multi-linguagem tem suporte Perl, incluindo um depurador de expressão regular e
depuração remota.
Notepad + +
<http://notepad-plus.sourceforge.net/>
Abra Perl IDE
<http://open-perl-ide.sourceforge.net/>
Open Perl IDE é um ambiente de desenvolvimento integrado para escrever e depurar Perl
scripts com distribuição ActivePerl do ActiveState no Windows 95/98 / NT / 2000.
OptiPerlGenericName
<http://www.optiperl.com/>
OptiPerl é um Windows IDE com ambiente CGI simulado, incluindo depurador e
editor de realce de sintaxe.
Pai
<http://padre.perlide.org/>
Padre é um IDE multiplataforma para Perl escrito em Perl usando wxWidgets para fornecer um
aparência nativa. É código aberto sob a Licença Artística. É um dos
IDEs Perl mais recentes.
PerlBuilderGenericName
<http://www.solutionsoft.com/perl.htm>
PerlBuilder é um ambiente de desenvolvimento integrado para Windows que suporta Perl
desenvolvimento.
visiPerl +
<http://helpconsulting.net/visiperl/index.html>
Em Help Consulting, para Windows.
Perl Visual
<http://www.activestate.com/Products/Visual_Perl/>
Visual Perl é um plug-in Visual Studio.NET da ActiveState.
Zeus
<http://www.zeusedit.com/lookmain.html>
Zeus para Windows é outro editor / IDE multi-linguagem Win32 que vem com suporte
para Perl.
Para editores: se você estiver no Unix, provavelmente já possui o vi ou um clone do vi, e possivelmente um
emacs também, então você pode não precisar baixar nada. Em qualquer emacs o modo cperl (Mx
cperl-mode) oferece talvez o melhor modo de edição Perl disponível em qualquer editor.
Se você estiver usando o Windows, você pode usar qualquer editor que permite trabalhar com texto simples, como
como Bloco de notas ou WordPad. Processadores de texto, como Microsoft Word ou WordPerfect, normalmente
não funcionam, pois inserem todos os tipos de informações de bastidores, embora alguns
permitem que você salve arquivos como "Somente texto". Você também pode baixar editores de texto projetados
especificamente para programação, como o Textpad (http://www.textpad.com/>) e UltraEdit
(http://www.ultraedit.com/>), entre outros.
Se você estiver usando MacOS, as mesmas preocupações se aplicam. MacPerl (para ambientes clássicos) vem
com um editor simples. Editores externos populares são o BBEdit (
<http://www.barebones.com/products/bbedit/>) ou Alpha (
<http://www.his.com/~jguyer/Alpha/Alpha8.html>). Os usuários do MacOS X podem usar editores Unix como
bem.
GNU Emacs
<http://www.gnu.org/software/emacs/windows/ntemacs.html>
MicroEMACS
<http://www.microemacs.de/>
XEmacsGenericName
<http://www.xemacs.org/Download/index.html>
Jedhttp://space.mit.edu/~davis/jed/>
ou um clone vi como
Vimhttp://www.vim.org/>
vil
<http://dickey.his.com/vile/vile.html>
A seguir estão os editores / IDEs multilíngues do Win32 que oferecem suporte a Perl:
MultiEditar
<http://www.MultiEdit.com/>
Liso
<http://www.slickedit.com/>
Contexto
<http://www.contexteditor.org/>
Há também um editor baseado em widget de texto toyedit escrito em Perl que é distribuído com
o módulo Tk no CPAN. O ptkdb (http://ptkdb.sourceforge.net/>) é baseado em Perl / Tk
depurador que atua como uma espécie de ambiente de desenvolvimento. Perl Composer (
<http://perlcomposer.sourceforge.net/>) é um IDE para criação de GUI Perl / Tk.
Além de um editor / IDE, você pode estar interessado em um ambiente de shell mais poderoso
para Win32. Suas opções incluem
bater
do pacote Cygwin (http://cygwin.com/>)
zshhttp://www.zsh.org/>
Cygwin está coberto pela GNU General Public License (mas isso não deveria importar para Perl
usar). Cygwin contém (além do shell) um conjunto abrangente de padrões Unix
utilitários do kit de ferramentas.
BBEdit e TextWrangler
são editores de texto para OS X que têm um modo de sensibilidade Perl (
<http://www.barebones.com/>).
Onde pode I ter Perl macros for vi?
Para obter uma versão completa do arquivo de configuração do vi de Tom Christiansen, consulte
<http://www.cpan.org/authors/Tom_Christiansen/scripts/toms.exrc.gz>, o padrão
arquivo de benchmark para emuladores vi. O arquivo funciona melhor com nvi, a versão atual do vi
de Berkeley, que aliás pode ser construído com um interpretador Perl embutido - veja
<http://www.cpan.org/src/misc/>.
Onde pode I ter modo perl or modo cperl for emac?
Desde o patchlevel 19 do Emacs versão 22 ou mais, existe um perl-mode.el e
suporte para o depurador Perl embutido. Eles devem vir com o padrão Emacs 19
distribuição.
Observe que o modo perl do emacs terá ajustes com "main'foo" (aspas simples), e bagunça
o recuo e o realce. Você provavelmente está usando "main :: foo" no novo código Perl
de qualquer maneira, então isso não deve ser um problema.
Para CPerlMode, consultehttp://www.emacswiki.org/cgi-bin/wiki/CPerlMode>
Como funciona o dobrador de carta de canal pode I usar maldições com Perl?
O módulo Curses do CPAN fornece uma interface de módulo de objeto carregável dinamicamente para um
biblioteca de curses. Uma pequena demonstração pode ser encontrada no diretório
<http://www.cpan.org/authors/Tom_Christiansen/scripts/rep.gz>; este programa repete um
comando e atualiza a tela conforme necessário, renderizando rep ps axu semelhante ao topo.
Como funciona o dobrador de carta de canal pode I escrever a GUI (X, Obrigado, Obrigado, etc) in Perl?
(contribuição de Ben Morrow)
Existem vários módulos que permitem escrever GUIs em Perl. A maioria dos kits de ferramentas GUI tem um
Interface perl: segue uma lista incompleta.
Tk Isto funciona em Unix e Windows, e a versão atual não parece tão ruim
no Windows, como costumava. Alguns dos elementos GUI ainda não "parecem" muito certos,
no entanto. A interface é muito natural e 'perlish', tornando-a fácil de usar em pequenas
scripts que só precisam de uma interface simples. Não é atualizado há algum tempo.
Wx Esta é uma ligação Perl para o kit de ferramentas de plataforma cruzada wxWidgets (
<http://www.wxwidgets.org>). Funciona em Unix, Win32 e Mac OS X, usando
widgets (Gtk no Unix). A interface segue de perto a interface C ++, mas o
a documentação é um pouco esparsa para quem não conhece a biblioteca, principalmente
referindo-se à documentação C ++.
Gtk e Gtk2
Estes são vínculos Perl para o kit de ferramentas Gtk (http://www.gtk.org>). A interface
mudou significativamente entre as versões 1 e 2, portanto, eles têm módulos Perl separados. Isto
roda em Unix, Win32 e Mac OS X (atualmente requer um servidor X no Mac OS, mas
uma porta "nativa" está em andamento), e os widgets têm a mesma aparência em todas as plataformas: ou seja,
eles não correspondem aos widgets nativos. Assim como acontece com Wx, as ligações Perl seguem a API C
de perto, e a documentação requer que você leia a documentação C para entender
.
Win32 :: GUI
Isso fornece acesso à maioria dos widgets Win32 GUI do Perl. Obviamente, só
roda em Win32 e usa widgets nativos. A interface Perl realmente não segue
a interface C: ficou mais perlish, e a documentação é muito boa.
Coisas mais avançadas podem exigir familiaridade com as APIs C Win32 ou referência a
MSDN.
Ossos de Camelo
CamelBones (http://camelbones.sourceforge.net>) é uma interface Perl para Mac OS X's
Kit de ferramentas Cocoa GUI e, como tal, pode ser usado para produzir GUIs nativas no Mac OS X.
não no CPAN, pois requer frameworks que o CPAN.pm não sabe como instalar, mas
a instalação é feita por meio do instalador de pacote OSX padrão. A API Perl é, novamente, muito
perto da API ObjC está empacotando, e a documentação apenas diz a você como
traduzir de um para o outro.
Qt Há uma interface Perl para o kit de ferramentas Qt da TrollTech, mas não parece ser
mantido.
Atena
Sx é uma interface para o conjunto de widgets Athena que vem com o X, mas novamente parece
não deve ser muito usado hoje em dia.
Como funciona o dobrador de carta de canal pode I fazer my Perl programa corrida Mais rápido?
A melhor maneira de fazer isso é criar um algoritmo melhor. Isso muitas vezes pode fazer um
diferença dramática. Livro de Jon Bentley Programação Pérolas (isso não é um erro de ortografia!)
também tem boas dicas de otimização. Conselhos sobre benchmarking se resumem a: benchmark
e perfil para garantir que você está otimizando a parte certa, procure algoritmos melhores
em vez de microtuning seu código, e quando tudo mais falhar, considere apenas comprar mais rápido
hardware. Você provavelmente vai querer ler a resposta à pergunta anterior "Como faço para
perfil de meus programas Perl? "se ainda não o tiver feito.
Uma abordagem diferente é carregar automaticamente o código Perl raramente usado. Veja o AutoSplit e
Módulos AutoLoader na distribuição padrão para isso. Ou você pode localizar o
gargalo e pense em escrever apenas essa parte em C, da maneira que costumávamos pegar
gargalos no código C e escrevê-los em assembler. Semelhante a reescrever em C, módulos que
ter seções críticas podem ser escritas em C (por exemplo, o módulo PDL do CPAN).
Se você está atualmente vinculando seu executável perl a um libc.so, muitas vezes você pode ganhar um
Benefício de desempenho de 10-25% ao reconstruí-lo para vincular com um libc.a estático. Isto
tornará um executável perl maior, mas seus programas Perl (e programadores) podem agradecer
para isso. Veja o INSTALAR arquivo na distribuição de origem para obter mais informações.
O programa undump foi uma antiga tentativa de acelerar o programa Perl, armazenando o
formulário compilado para o disco. Esta não é mais uma opção viável, pois funcionou apenas em alguns
arquiteturas, e não era uma boa solução de qualquer maneira.
Como funciona o dobrador de carta de canal pode I fazer my Perl programa levar menos memória?
Quando se trata de compensações de espaço-tempo, Perl quase sempre prefere jogar a memória em um
problema. Os escalares em Perl usam mais memória do que strings em C, os arrays levam mais do que isso,
e os hashes usam ainda mais. Embora ainda haja muito a ser feito, os lançamentos recentes foram
abordando essas questões. Por exemplo, a partir de 5.004, as chaves hash duplicadas são compartilhadas entre
todos os hashes os usam, portanto, não exigem realocação.
Em alguns casos, usando substr () or vec () simular matrizes pode ser altamente benéfico. Por
exemplo, uma matriz de mil booleanos ocupará pelo menos 20,000 bytes de espaço, mas
pode ser transformado em um vetor de bits de 125 bytes - uma economia de memória considerável. O padrão
O módulo Tie :: SubstrHash também pode ajudar para certos tipos de estrutura de dados. Se vocês são
trabalhar com estruturas de dados especializadas (matrizes, por exemplo) módulos que implementam
estes em C podem usar menos memória do que os módulos Perl equivalentes.
Outra coisa a tentar é descobrir se o seu Perl foi compilado com o sistema malloc ou
com malloc embutido do Perl. Seja qual for, tente usar o outro e veja se
isso faz a diferença. As informações sobre malloc estão no INSTALAR arquivo na fonte
distribuição. Você pode descobrir se está usando o malloc do perl digitando "perl
-V: usemymalloc ".
Claro, a melhor maneira de economizar memória é não fazer nada para desperdiçá-la no primeiro
Lugar, colocar. Boas práticas de programação podem ajudar muito nisso:
Não beba!
Não leia um arquivo inteiro na memória se puder processá-lo linha por linha. Ou mais
concretamente, use um loop como este:
#
# Boa ideia
#
while (meu $ line = <$ file_handle>) {
# ...
}
em vez disso:
#
# Péssima ideia
#
meu @data = <$ file_handle>;
foreach (@dados) {
# ...
}
Quando os arquivos que você está processando são pequenos, não importa muito como você faz
isso, mas faz uma grande diferença quando eles começam a ficar maiores.
Use map e grep seletivamente
Lembre-se de que map e grep esperam um argumento LIST, então faça o seguinte:
@wanted = grep {/ pattern /} <$ file_handle>;
fará com que todo o arquivo seja sugado. Para arquivos grandes, é melhor fazer um loop:
while (<$ file_handle>) {
push (@wanted, $ _) if / pattern /;
}
Evite citações desnecessárias e estringamentos
Não cite strings grandes, a menos que seja absolutamente necessário:
minha $ copy = "$ large_string";
faz 2 cópias de $ large_string (uma para $ copy e outra para as aspas), enquanto
minha $ copy = $ large_string;
faz apenas uma cópia.
Idem para restringir grandes matrizes:
{
local $, = "\ n";
imprima @big_array;
}
é muito mais eficiente em termos de memória do que qualquer um
imprimir junção "\ n", @big_array;
or
{
local $ "=" \ n ";
imprimir "@big_array";
}
Passe por referência
Passe matrizes e hashes por referência, não por valor. Por um lado, é a única maneira de
passar várias listas ou hashes (ou ambos) em uma única chamada / retorno. Também evita
criando uma cópia de todo o conteúdo. Isso requer algum julgamento, no entanto, porque
quaisquer alterações serão propagadas de volta aos dados originais. Se você realmente quer destroçar
(er, modificar) uma cópia, você terá que sacrificar a memória necessária para fazer uma.
Amarre grandes variáveis ao disco
Para "grandes" armazenamentos de dados (ou seja, aqueles que excedem a memória disponível), considere usar um dos
os módulos de banco de dados para armazená-lo no disco em vez de na RAM. Isso irá incorrer em uma penalidade em
tempo de acesso, mas isso provavelmente é melhor do que fazer com que seu disco rígido sofra devido a
troca massiva.
Is it segura para retorno a referência para local or lexical dados?
sim. O sistema de coleta de lixo do Perl cuida disso para que tudo dê certo.
sub makeone {
meu @a = (1 .. 10);
return \ @a;
}
para (1 .. 10) {
push @many, makeone ();
}
imprimir $ muitos [4] [5], "\ n";
imprimir "@ muitos \ n";
Como funciona o dobrador de carta de canal pode I gratuitamente an ordem or hash so my programa encolhe?
(contribuição de Michael Carman)
Normalmente você não pode. Memória alocada para léxicos (ou seja minha() variáveis) não podem ser recuperadas
ou reutilizados mesmo que saiam do escopo. É reservado caso as variáveis voltem
no escopo. Memória alocada para variáveis globais pode ser reutilizada (dentro de seu programa) por
utilização undef () e / ou deletar ().
Na maioria dos sistemas operacionais, a memória alocada para um programa nunca pode ser devolvida ao
sistema. É por isso que os programas de longa execução às vezes se reproduzem. Alguns operando
sistemas (notadamente, sistemas que usam mmap(2) para alocar grandes blocos de memória) pode
recuperar a memória que não é mais usada, mas em tais sistemas, o perl deve ser configurado e
compilado para usar o malloc do sistema operacional, não o perl.
Em geral, a alocação e desalocação de memória não é algo que você pode ou deve ser
preocupando-se muito em Perl.
Consulte também "Como posso fazer meu programa Perl ocupar menos memória?"
Como funciona o dobrador de carta de canal pode I fazer my CGI escrita mais eficiente?
Além das medidas normais descritas para tornar os programas Perl gerais mais rápidos ou menores, um
O programa CGI tem problemas adicionais. Pode ser executado várias vezes por segundo. Dado que cada
vez que for executado, precisará ser recompilado e, muitas vezes, alocará um megabyte ou mais de
memória do sistema, isso pode ser um assassino. Compilando em C não é vai para ajudar Você porque o
a sobrecarga de inicialização do processo é onde está o gargalo.
Existem três maneiras populares de evitar essa sobrecarga. Uma solução envolve executar o
Servidor Apache HTTP (disponível emhttp://www.apache.org/>) com qualquer um dos mod_perl
ou módulos de plug-in mod_fastcgi.
Com mod_perl e o módulo Apache :: Registry (distribuído com mod_perl), o httpd será executado
com um interpretador Perl embutido que pré-compila seu script e então o executa
dentro do mesmo espaço de endereço sem bifurcação. A extensão Apache também dá acesso Perl
para a API do servidor interno, de modo que os módulos escritos em Perl podem fazer praticamente qualquer coisa que um módulo
escrito em C can. Para mais informações sobre mod_perl, vejahttp://perl.apache.org/>
Com o módulo FCGI (do CPAN) e o módulo mod_fastcgi (disponível no
<http://www.fastcgi.com/>) cada um dos seus programas Perl torna-se um daemon CGI permanente
processo.
Finalmente, Plack é um módulo Perl e kit de ferramentas que contém middleware PSGI, ajudantes e
adaptadores para servidores web, permitindo que você implemente facilmente scripts que podem continuar em execução,
e fornece flexibilidade em relação ao servidor da web que você usa. Pode permitir que existam
Scripts CGI para desfrutar desta flexibilidade e desempenho com mudanças mínimas, ou podem ser usados
junto com estruturas da web Perl modernas para fazer a escrita e implantação de serviços da web com Perl
uma brisa.
Essas soluções podem ter efeitos de longo alcance em seu sistema e na maneira como você escreve seu
Programas CGI, investigue-os com cuidado.
Veja tambémhttp://www.cpan.org/modules/by-category/15_World_Wide_Web_HTML_HTTP_CGI/>.
Como funciona o dobrador de carta de canal pode I esconder da fonte for my Perl programa?
Delete isso. :-) Sério, há uma série de soluções (a maioria insatisfatórias) com
vários níveis de "segurança".
Antes de tudo, entretanto, você não pode tirar a permissão de leitura, porque o código-fonte tem que
ser legível para ser compilado e interpretado. (Isso não significa que um CGI
a fonte do script pode ser lida por pessoas na web - apenas por pessoas com acesso a
o sistema de arquivos.) Portanto, você deve deixar as permissões no socialmente amigável 0755
nível.
Algumas pessoas consideram isso um problema de segurança. Se o seu programa faz coisas inseguras e
depende de que as pessoas não saibam explorar essas inseguranças, não é seguro. Isto é
muitas vezes possível para alguém determinar as coisas inseguras e explorá-las sem
visualizar a fonte. Segurança através da obscuridade, o nome para esconder seus bugs em vez de
consertá-los é, de fato, pouca segurança.
Você pode tentar usar a criptografia por meio de filtros de origem (a partir do Perl 5.8 o Filtro :: Simples
e Filter :: Util :: Call modules estão incluídos na distribuição padrão), mas qualquer decente
o programador será capaz de decifrá-lo. Você pode tentar usar o compilador de código de byte e
intérprete descrito mais tarde em perlfaq3, mas os curiosos ainda podem ser capazes de descompilar
isto. Você pode tentar usar o compilador de código nativo descrito mais tarde, mas os crackers podem ser capazes
para desmontá-lo. Estes representam vários graus de dificuldade para as pessoas que desejam alcançar
seu código, mas ninguém pode ocultá-lo definitivamente (verdadeiro para todas as linguagens, não apenas para Perl).
É muito fácil recuperar a origem dos programas Perl. Você simplesmente alimenta o programa para o
interpretador perl e usar os módulos na hierarquia B ::. O módulo B :: Deparse deve ser
capaz de derrotar a maioria das tentativas de ocultar a fonte. Novamente, isso não é exclusivo do Perl.
Se você está preocupado com as pessoas lucrando com seu código, o ponto principal é que
nada além de uma licença restritiva lhe dará segurança jurídica. Licencie seu software e
salpique-o com declarações ameaçadoras como "Este é um software proprietário não publicado de
XYZ Corp. Seu acesso a ele não lhe dá permissão para usá-lo, blá, blá, blá. "Nós
não são advogados, é claro, então você deve consultar um advogado se quiser ter certeza de que
a redação da licença será válida no tribunal.
Como funciona o dobrador de carta de canal pode I compilar my Perl programa para dentro byte código or C?
(contribuição de brian d foy)
Em geral, você não pode fazer isso. Existem algumas coisas que podem funcionar para a sua situação
no entanto. As pessoas costumam fazer essa pergunta porque querem distribuir seus trabalhos
sem revelar o código-fonte, e a maioria das soluções troca espaço em disco por conveniência.
Você provavelmente não verá um grande aumento na velocidade, já que a maioria das soluções simplesmente agrupa
um interpretador Perl no produto final (mas veja "Como posso fazer meu programa Perl rodar
mais rápido?").
O Perl Archive Toolkit (http://par.perl.org/>) é o análogo do Perl ao JAR do Java. Isso é
disponível gratuitamente e no CPAN (http://search.cpan.org/dist/PAR/>).
Existem também alguns produtos comerciais que podem funcionar para você, embora seja necessário comprar um
licença para eles.
O Perl Dev Kit (http://www.activestate.com/Products/Perl_Dev_Kit/>) da ActiveState
pode "Transformar seus programas Perl em executáveis prontos para rodar para HP-UX, Linux, Solaris e
Janelas. "
Perl2Exe (http://www.indigostar.com/perl2exe.htm>) é um programa de linha de comando para
conversão de scripts perl em arquivos executáveis. Destina-se a plataformas Windows e Unix.
Como funciona o dobrador de carta de canal pode I ter "#! perl" para trabalho on [MS-DOS, NT, ...]?
Para OS / 2 basta usar
extproc perl -S -seus_switches
como a primeira linha no arquivo "* .cmd" ("-S" devido a um bug no tratamento de "extproc" do cmd.exe). Por
DOS deve-se primeiro inventar um arquivo de lote correspondente e codificá-lo em
"ALTERNATE_SHEBANG" (veja o dosish.h arquivo na distribuição de origem para mais
em formação).
A instalação do Win95 / NT, ao usar a porta ActiveState do Perl, irá modificar o
Registro para associar a extensão ".pl" ao interpretador perl. Se você instalar
outra porta, talvez até mesmo construindo seu próprio Win95 / NT Perl a partir de fontes padrão
usando uma porta do Windows do gcc (por exemplo, com cygwin ou mingw32), então você terá que modificar o
Registre-se. Além de associar ".pl" com o intérprete, as pessoas do NT podem
use: "SET PATHEXT =% PATHEXT% ;. PL" para permitir que eles executem o programa "install-linux.pl" apenas por
digitando "install-linux".
No MacOS "Clássico", um programa perl terá o Criador e o Tipo apropriados, para que
clicar duas vezes neles invocará o aplicativo MacPerl. No Mac OS X, aplicativos clicáveis
pode ser feito a partir de qualquer "#!" script usando o utilitário DropScript de Wil Sanchez:
<http://www.wsanchez.net/software/>.
IMPORTANTE!: Faça o que fizer, POR FAVOR, não fique frustrado e apenas jogue o perl
intérprete em seu diretório cgi-bin, a fim de fazer seus programas funcionarem para uma web
servidor. Este é um risco de segurança EXTREMAMENTE grande. Dedique um tempo para descobrir como fazer isso
corretamente.
lata I escrever útil Perl programas on da comando linha?
sim. Leia perlrun para mais informações. Seguem alguns exemplos. (Estes pressupõem Unix padrão
regras de cotação do shell.)
# soma do primeiro e último campos
perl -lane 'imprimir $ F [0] + $ F [-1]' *
# identifica arquivos de texto
perl -le 'para (@ARGV) {imprimir se -f && -T _}' *
# remove (a maioria) comentários do programa C
perl -0777 -pe 's {/\*.*?\*/} {} gs' foo.c
# criar arquivo um mês mais jovem do que hoje, derrotando daemons ceifeiros
perl -e '$ X = 24 * 60 * 60; utime (time (), time () + 30 * $ X, @ ARGV) '*
# localizar o primeiro uid não utilizado
perl -le '$ i ++ enquanto getpwuid ($ i); imprimir $ i '
# exibe um caminho de manobra razoável
echo $ PATH | perl -nl -072 -e '
s! [^ / +] * $! man! && - d &&! $ s {$ _} ++ && push @ m, $ _; END {print "@m"} '
OK, o último foi na verdade uma entrada no Concurso Perl Ofuscado. :-)
Sua marca não Perl one-liners trabalho on my DOS / Mac / VMS sistema?
O problema geralmente é que os intérpretes de comando nesses sistemas têm
ideias diferentes sobre citações do que os shells Unix sob os quais os one-liners eram
criado. Em alguns sistemas, você pode ter que alterar aspas simples para as duplas, o que você
devo NÃO fazer em sistemas Unix ou Plan9. Você também pode ter que alterar um único% para %%.
Por exemplo:
# Unix (incluindo Mac OS X)
perl -e 'print "Olá, mundo \ n"'
#DOS, etc.
perl -e "print \" Olá, mundo \ n \ ""
#Mac Clássico
imprimir "Olá, mundo \ n"
(em seguida, execute "Myscript" ou Shift-Command-R)
#MPW
perl -e 'print "Olá, mundo \ n"'
#VMS
perl -e "print" "Olá, mundo \ n" ""
O problema é que nenhum desses exemplos é confiável: eles dependem do comando
intérprete. No Unix, os dois primeiros geralmente funcionam. No DOS, é inteiramente possível que
nem funciona. Se 4DOS fosse o shell de comando, você provavelmente teria melhor sorte assim:
perl -e "imprimir "Olá, mundo \ n ""
No Mac, depende de qual ambiente você está usando. O shell MacPerl, ou MPW, é
muito parecido com shells Unix em seu suporte para várias variantes de cotação, exceto que faz
uso gratuito de caracteres não ASCII do Mac como caracteres de controle.
utilização qq (), q (), e qx (), em vez de "aspas duplas", "aspas simples" e "crases",
pode facilitar a escrita de uma linha.
Não existe uma solução geral para tudo isso. É uma bagunça.
[Parte dessa resposta foi contribuída por Kenneth Albanowski.]
Onde pode I aprende sobre CGI or Site: programação in Perl?
Para módulos, obtenha os módulos CGI ou LWP do CPAN. Para livros didáticos, veja os dois especialmente
dedicado a coisas da web na questão dos livros. Para problemas e perguntas relacionadas ao
da web, como "Por que recebo 500 erros" ou "Por que não funciona no navegador no momento certo
funciona bem na linha de comando ", consulte os guias de solução de problemas e referências em perlfaq9
ou no CGI MetaFAQ:
L<http://www.perl.org/CGI_MetaFAQ.html>
No entanto, olhar para o Plack e os frameworks da web Perl modernos é altamente recomendado; rede
a programação em Perl evoluiu muito desde os velhos tempos de scripts CGI simples.
Onde pode I aprende sobre Orientado a Objeto Perl programação?
Um bom lugar para começar é o perlootut, e você pode usar o perlobj como referência.
Um bom livro sobre OO em Perl é o "Object-Oriented Perl" de Damian Conway de Manning
Publicações, ou "Intermediate Perl", de Randal Schwartz, brian d foy e Tom Phoenix de
O'Reilly Media.
Onde pode I aprende sobre vinculação C com Perl?
Se você quiser chamar C de Perl, comece com perlxstut, passando para perlxs, xsubpp e
perlguts. Se você quiser chamar Perl de C, leia perlembed, perlcall e perlguts.
Não se esqueça de que você pode aprender muito observando como os autores de
módulos de extensão escreveram seu código e resolveram seus problemas.
Você pode não precisar de todo o poder do XS. O módulo Inline :: C permite que você coloque o código C diretamente
em sua fonte Perl. Ele lida com toda a magia para fazê-lo funcionar. Você ainda tem que aprender em
pelo menos um pouco da API perl, mas você não terá que lidar com a complexidade do XS
arquivos de suporte.
Eu tenho ler confuso, perlguts, e assim por diante, mas a I não pode embutir perl in my C programa; o que am I fazer
errado?
Baixe o kit ExtUtils :: Embed do CPAN e execute `make test '. Se os testes passarem, leia
os frutos novamente e novamente e novamente. Se eles falharem, veja perlbug e envie um relatório de bug com
a saída de "make test TEST_VERBOSE = 1" junto com "perl -V".
Quando I experimentado para corrida my roteiro, I tem esse mensagem. O Quê parece it significa?
Uma lista completa de mensagens de erro e avisos do Perl com texto explicativo pode ser encontrada
em perldiag. Você também pode usar o programa splain (distribuído com Perl) para explicar o
mensagens de erro:
programa perl 2> diag.out
explicar [-v] [-p] diag.out
ou mude seu programa para explicar as mensagens para você:
usar diagnósticos;
or
usar diagnósticos -verbose;
O que é Criador?
(contribuição de brian d foy)
O módulo ExtUtils :: MakeMaker, mais conhecido simplesmente como "MakeMaker", transforma um script Perl,
normalmente chamado de "Makefile.PL", em um Makefile. A ferramenta Unix "make" usa este arquivo para
gerencie dependências e ações para processar e instalar uma distribuição Perl.
AUTOR E DIREITOS AUTORAIS
Copyright (c) 1997-2010 Tom Christiansen, Nathan Torkington e outros autores conforme observado.
Todos os direitos reservados.
Esta documentação é gratuita; você pode redistribuí-lo e / ou modificá-lo nos mesmos termos
como o próprio Perl.
Independentemente de sua distribuição, todos os exemplos de código aqui são de domínio público. É você
permitido e encorajado a usar este código e quaisquer derivados dele em seus próprios programas
para se divertir ou lucrar, como você achar melhor. Um simples comentário no código dando crédito ao
Perguntas frequentes seriam corteses, mas não são obrigatórias.
Use perlfaq3 online usando serviços onworks.net