<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Blog do Blabos de Blebe &#187; Perl</title>
	<atom:link href="http://blog.blabos.org/category/tecnologia/programacao/perl/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.blabos.org</link>
	<description>Perl, tecnologia e algum blá blá blá</description>
	<lastBuildDate>Thu, 18 Aug 2011 03:28:54 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Perl cada vez mais fácil</title>
		<link>http://blog.blabos.org/2011/01/perl-cada-vez-mais-facil/</link>
		<comments>http://blog.blabos.org/2011/01/perl-cada-vez-mais-facil/#comments</comments>
		<pubDate>Sun, 30 Jan 2011 00:50:28 +0000</pubDate>
		<dc:creator>blabos</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Perl]]></category>

		<guid isPermaLink="false">http://blog.blabos.org/?p=751</guid>
		<description><![CDATA[A minha diversão remunerada favorita é programar em Modern::Perl, algo que a cada dia fica ainda mais divertido e simples. Uma das facilidades das quais estou tirando proveito hoje é o App::cpanminus do Miyagawa. Esse aplicativo foi criado para facilitar a instalação de módulos em ambientes com restrições de recursos, portanto ele não possui muitas [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify">A minha diversão remunerada favorita é programar em <a href="http://www.modernperlbooks.com/">Modern::Perl</a>, algo que a cada dia fica ainda mais divertido e simples.</p>
<p style="text-align: justify">Uma das facilidades das quais estou tirando proveito hoje é o <a href="http://search.cpan.org/perldoc?App::cpanminus">App::cpanminus</a> do Miyagawa. Esse aplicativo foi criado para facilitar a instalação de módulos em ambientes com restrições de recursos, portanto ele não possui muitas dependências e tem um baixo footprint.</p>
<p style="text-align: justify">Em <a href="https://github.com/blabos/Docs/wiki/Instalando-Catalyst-com-local::lib">alguns</a> <a href="http://blog.blabos.org/2010/02/criando-um-mini-mirror-do-cpan-com-o-cpanmini/">posts</a> <a href="http://blog.blabos.org/2009/08/instalando-modulos-do-cpan-via-locallib/">antigos</a> eu mostrei como configurar o aplicativo cpan, instalar módulos no home do usuário e criar um mini mirror local com CPAN::mini, então como aquecimento para o Equinócio que se aproxima eu vou atualizar esses tutoriais tornando os posts anteriores obsoletos.</p>
<p><span id="more-751"></span></p>
<p style="text-align: justify">Para contextualizar os novos leitores vamos a um rápido overview das ferramentas abordadas:</p>
<ul>
<li><strong><a href="http://search.cpan.org/perldoc?cpan">cpanm</a></strong> e <strong><a href="http://search.cpan.org/perldoc?cpanm">cpanm</a></strong>: são aplicativos que automatizam a instalação de módulos Perl publicados no repositório www.cpan.org.</li>
<li><strong><a href="http://www.cpan.org">www.cpan.org</a></strong>: É o repositório de módulos Perl onde podemos encontrar (hoje) cerca de 89768 módulos escritos por cerca de 8734 autores, para as mais diversas finalidades. Frequentemente alternamos o significado da palavra cpan entre &#8220;o repositório da web&#8221; e o &#8220;aplicativo de instalação de módulos&#8221;.</li>
<li><strong><a href="http://search.cpan.org/perldoc?local::lib">local::lib</a></strong>: é um módulo (ou biblioteca) que facilita a instalação de outros módulos em diretórios que não os da instalação padrão, o que é útil quando você não possui privilégios administrativos e precisa de alguns módulos extras.</li>
<li><strong><a href="http://search.cpan.org/perldoc?CPAN::Mini">CPAN::Mini</a></strong>: é outro módulo que permite a criação de um mini repositório local com a última versão de cada módulo do cpan. Isso é muito útil quando você precisa instalar módulos em um ambiente que não possui acesso à internet.</li>
</ul>
<h3>Mão na massa</h3>
<p style="text-align: justify">Bom o primeiro passo agora, ao invés de configurar o aplicativo cpan é baixar e instalar o cpanm. Quando essa etapa é feita em conjunto com o sudo, o cpanm é instalando na árvore padrão de instalação do Perl. Para instalar no seu home basta executar:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">curl <span style="color: #660033;">-L</span> http:<span style="color: #000000; font-weight: bold;">//</span>cpanmin.us <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">perl</span> - App::cpanminus</pre></div></div>

<p style="text-align: justify">Entretanto isso ainda não configurou o seu ambiente. O cpanm foi instalado em <code>$HOME/perl5/bin</code>, mas seu <code>$PATH</code>, as variáveis de ambiente e o local::lib ainda não estão prontas.</p>
<p style="text-align: justify">Para instalar o módulo local::lib faça:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #007800;">$HOME</span><span style="color: #000000; font-weight: bold;">/</span>perl5<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>cpanm <span style="color: #7a0874; font-weight: bold;">local</span>::lib</pre></div></div>

<p style="text-align: justify">Especificar o caminho completo é necessário porque ainda não adicionamos o diretório de instalação local na variável de ambiente <code>$PATH</code>. Para fazer isso executamos:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">'eval $(perl -I$HOME/perl5/lib/perl5 -Mlocal::lib)'</span> <span style="color: #000000; font-weight: bold;">&gt;&gt;</span> ~<span style="color: #000000; font-weight: bold;">/</span>.bashrc</pre></div></div>

<p style="text-align: justify"><strong>Nota</strong>: No Mac o arquivo é o .profile ao invés do .bashrc.</p>
<p style="text-align: justify">Isso faz com que a cada login, o ambiente pergunte ao módulo local::lib onde estão os outros módulos. Note que desta vez não precisamos exportar a variável <code>PERL_MM_USE_DEFAULT</code> porque o cpanm resolve as dependências de uma forma um pouco mais esperta que o seu irmão mais velho.</p>
<p style="text-align: justify">Para finalizar esta etapa, feche o terminal e abra novamente para carregar as variáveis ou execute:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">. ~<span style="color: #000000; font-weight: bold;">/</span>.bashrc</pre></div></div>

<p style="text-align: justify">Agora, se você quiser configurar o mini repositório, os passos são os mesmos:</p>
<ol>
<li>Instalar o módulo CPAN::Mini;</li>
<li>Criar o arquivo de configuração para ele;</li>
<li>Executar o comando minicpan;</li>
</ol>
<p style="text-align: justify">A instalação pode ser feita com o comando:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">cpanm CPAN::Mini</pre></div></div>

<p style="text-align: justify">O arquivo de configuração (~/.minicpanrc) pode ser criado com o conteúdo:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">local</span>: ~<span style="color: #000000; font-weight: bold;">/</span>minicpan
remote: http:<span style="color: #000000; font-weight: bold;">//</span>www.cpan.org</pre></div></div>

<p style="text-align: justify">Daí é só executar o comando minicpan e esperar o repositório ser baixado (aproximadamente 1.5 GB).</p>
<p style="text-align: justify">Para que o <code><strong>cpanm</strong></code> aponte para o repositório local você deve invocá-lo passando com o seguinte parâmetro extra:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">cpanm <span style="color: #660033;">--mirror</span> ~<span style="color: #000000; font-weight: bold;">/</span>minicpan <span style="color: #660033;">--mirror-only</span></pre></div></div>

<p style="text-align: justify">Ou para maior conveniência criar um alias:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;alias cpanmm='cpanm --mirror ~/minicpan --mirror-only'&quot;</span> <span style="color: #000000; font-weight: bold;">&gt;&gt;</span> ~<span style="color: #000000; font-weight: bold;">/</span>.bashrc</pre></div></div>

<p style="text-align: justify">Após recarregar o .bashrc você terá disponíveis os comandos <code><strong>cpanm</strong></code> que baixa os módulos diretamente da internet e o <code><strong>cpanmm</strong></code> que instala os módulos a partir do seu repositório local.</p>
<p style="text-align: justify">Não se esqueça de executar o comando <code><strong>minicpan</strong></code> pelo menos uma vez por semana para manter o seu repositório local atualizado.</p>
<h3>Referências:</h3>
<ul>
<li><a href="http://edencardim.com/">Eden Cardim</a></li>
<li><a href="http://search.cpan.org/perldoc?App::cpanminus">App::cpanminus</a></li>
<li><a href="http://www.cpan.org">cpan.org</a></li>
<li><a href="http://search.cpan.org/perldoc?local::lib">local::lib</a></li>
<li><a href="http://search.cpan.org/perldoc?CPAN::Mini">CPAN::Mini</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.blabos.org/2011/01/perl-cada-vez-mais-facil/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>O Caos, a Moda e o Hacker</title>
		<link>http://blog.blabos.org/2010/07/o-caos-a-moda-e-o-hacker/</link>
		<comments>http://blog.blabos.org/2010/07/o-caos-a-moda-e-o-hacker/#comments</comments>
		<pubDate>Sat, 31 Jul 2010 20:57:45 +0000</pubDate>
		<dc:creator>blabos</dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Opinião]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[Tecnologia]]></category>

		<guid isPermaLink="false">http://blog.blabos.org/?p=725</guid>
		<description><![CDATA[O Caos Nesta sexta feira aconteceu a última aula do curso de férias de 20hs que eu e alguns amigos ministramos na FEI sobre introdução ao Linux. Gostaria de registrar mais uma vez nosso agradecimento por todo o apoio que recebemos da instituição, representada pelo Professor Plínio. O curso foi carinhosamente redefinido durante a semana [...]]]></description>
			<content:encoded><![CDATA[<h3>O Caos</h3>
<p style="text-align: justify;">Nesta sexta feira aconteceu a última aula do curso de férias de 20hs que eu e alguns amigos ministramos na <a href="http://www.fei.edu.br">FEI</a> sobre introdução ao Linux. Gostaria de registrar mais uma vez nosso agradecimento por todo o apoio que recebemos da instituição, representada pelo <a href="http://www.fei.edu.br/~plinio.aquino/">Professor Plínio</a>.</p>
<p style="text-align: justify;">O curso foi carinhosamente redefinido durante a semana como &#8220;Uma caótica e divertida introdução ao mundo Linux&#8221;, pois ao invés de nos focarmos em memorização de comandinhos, tentamos mostrar aos alunos como se virar sozinhos, habituando-os a usar o manual e deixando-os confortáveis o suficiente para experimentar.</p>
<p><span id="more-725"></span></p>
<p style="text-align: justify;">A temática foi mais ou menos no estilo de &#8220;O que acontece se eu apertar esse botão vermelho?&#8221;, onde até mesmo os instrutores faziam coisas erradas para utilizar isso como gancho para o tópico seguinte.</p>
<p style="text-align: justify;">No primeiro dia falamos para os alunos que eles não precisavam de um curso com especialistas para que pudessem explorar o sistema, então a frase mais usada foi &#8220;Não sei. Vamos procurar no man?&#8221;, seguida de uma ajudinha sobre como localizar e entender o manual corretamente.</p>
<p style="text-align: justify;">Nesse formato, interagimos sobre manuais, comandos básicos, organização do sistema de arquivos, permissões, pipes, descritores de arquivos, redirecionamento de E/S, particioamento entre outros tópicos, sempre focando nas dúvidas dos alunos, ao invés de no programa do curso, mostrando que eles poderiam destrinchar um determinado assunto tão profundamente quanto quisessem.</p>
<p style="text-align: justify;">Naturalmente, acabamos não tendo tempo de entrar em vários assuntos, mas os tópicos que não abordamos, ou os termos mais específicos eram deixados no quadro para que eles anotassem e pesquisassem por conta própria, sempre tomando o cuidado de dar uma direção, de forma que eles não ficassem perdidos ou com tudo mastigado.</p>
<p style="text-align: justify;">Na quata feira, abordamos a instalação do Linux, tomando como exemplo o Ubuntu. Até mesmo um pendrive que corrompeu algumas ISOs serviu de gancho para falarmos de checksum. Em pouco tempo eles já estavam configurando o sistema sozinhos, atualizando e instalando pacotes sem que precisássemos interferir muito.</p>
<p style="text-align: justify;">A quinta feira foi o dia mais audacioso para um curso introdutório. Focando nas necessidades dos alunos, abordamos ferramentas de desenvolvimento e debug. Demos uma visão geral das etapas de compilação, mostramos como as macros são pre-processadas, como é gerado código objeto e como os objetos são linkados. Falamos brevemente sobre cpp, gcc, ld, gdb, nm, objdump, e sobre como as bibliotecas são criadas, sem assustar com os comandos, focando nos conceitos por trás de tudo.</p>
<p style="text-align: justify;">Embora esse seja um tópico razoavelmente avançado, mostramos para os alunos que eles tinham plenas condições de entender o que estava acontecendo e se aprofundarem no assunto caso quisessem. Mostramos que existe e deixamos por conta da curiosidade de cada um.</p>
<h3>A moda</h3>
<p style="text-align: justify;">Na sexta feira trouxemos um questionamento sobre a humanidade das pessoas que operam as máquinas e sobre como a tecnologia pode ser prejudicial para elas. Tentamos fazer os alunos questionarem-se sobre o porquê de terem escolhido essa carreira.</p>
<p style="text-align: justify;">A esse bate papo seguiu-se uma sessão de perguntas sobre mercado onde foi perguntado quais tecnologias deveriam ser aprendidas para se destacar no mercado. Foi levantada a questão do conhecimento motivado pelo produto, sendo que a visão do mercado é que devemos buscar o conhecimento somente se motivados por um problema ou criação de produtos.</p>
<p style="text-align: justify;">Infelizmente, não tivemos tempo suficiente para uma discussão mais abrangente, mas neste ponto, a opinião dos instrutores diverge da opinião do mercado.</p>
<p style="text-align: justify;">Todos sabemos que a necessidade motiva. Não discordamos disto. O que não aceitamos é que a busca pelo conhecimento seja podada pela existência ou não de uma determinada necessidade.</p>
<p style="text-align: justify;">Quando estamos sujeitos às modas do mercado estamos sempre um passo atrás do que está acontecendo. Alguém determinou que a tecnologia X é o estado da arte da computação e só nos resta correr feito loucos para continuar fazendo parte do rebanho. Nós nos tornamos escravos. Seres passivos, reativos.</p>
<p style="text-align: justify;">E sem liberdade de pensamento, sem sentimentos, sem criatividade, nós perdemos aquilo que nos faz humanos. Nós nos tornamos máquinas.</p>
<p style="text-align: justify;">Querem um exemplo?</p>
<p style="text-align: justify;">Na década de 90, a moda do mercado era Delphi. Toda vez que um aluno perguntava o que deveria aprender para entrar no mercado, a resposta era: Delphi. Porque Delphi era utilizado em muitas empresas, porque a maioria das vagas em aberto eram para programadores Delphi, etc. Assim, uma massa enorme de pessoas foi estimulada a aprender uma ferramenta, sem se preocupar com base algorítmica, lógica, estrutura ou estilo. Grande parte tornou-se mão de obra barata e dispensável.</p>
<p style="text-align: justify;">Quando os ventos do mercado sopraram em uma outra direção, quem não estava realmente preparado foi varrido do mapa.</p>
<p style="text-align: justify;">Depois vieram o Java, o .NET, o Ruby, entre outros.</p>
<p style="text-align: justify;">Então você está dizendo que essas linguagens são ruins? Definitivamente não, e esse nem é o foco. A sacada é que mesmo nessas linguagens da moda, poucas pessoas estão realmente preparadas e bem posicionadas, enquanto a maioria é só mão de obra substituível e barata.</p>
<p style="text-align: justify;">O que faz um profissional ser bem sucedido é sua capacidade de resolver problemas, e não quantas ferramentas ele sabe manipular.</p>
<p style="text-align: justify;">É claro que quanto mais ferramentas à sua disposição, mais fácil tende a ser o seu trabalho, mas isso só é verdade se você possuir base o suficiente para escolher qual ferramenta se aplica e qual não se aplica. Essa talvez seja a melhor medida de competência.</p>
<p style="text-align: justify;">Voltando ao questionamento anterior, se você só buscar o conhecimento quando houver uma necessidade, você provavelmente não terá à sua disposição conteúdo suficiente para fazer uma boa escolha quando precisar. Na verdade a escolha já terá sido feita por outra pessoa e só te restará a opção de acatar e seguir, depois é claro de correr atrás para aprender o que outra pessoa decidiu que é melhor para você.</p>
<h3>Non Dvcor Dvco</h3>
<p style="text-align: justify;">Quando alguém me pergunta o que deve aprender para entrar no mercado de trabalho, em sempre me lembro da frase que está na bandeira da cidade de São Paulo: Não sou conduzido, conduzo.</p>
<p style="text-align: justify;">Então eu digo que a pergunta está invertida. Está tudo errado e essa falácia é vendida com pompa e circunstância. Você não tem que aprender nada para agradar ao mercado, na verdade o que você tem que fazer é deixar o mercado querendo ter você, te desejando.</p>
<p style="text-align: justify;">Se você fica sempre preocupado com o que os outros querem que você faça, você estará sempre um passo atrás, buscando algo que não é o que você deseja, e que assim que o vento mudar pode se tornar inútil.</p>
<p style="text-align: justify;">Pergunte ao invés disso <strong>quais as características que você precisa desenvolver para se tornar um profissional desejado</strong>. A resposta é simples. Seja excelente. Escolha aquilo que mais lhe dá prazer e dedique-se com afinco. Prepare-se, busque embasamento, não se prenda a ferramentas e comandos, procure conhecer o que está em torno do que você está fazendo. Seja curioso, <a href="http://www.istf.com.br/?page=perguntas">pergunte</a>. Aprenda a ser um <a href="http://www.linux.ime.usp.br/~rcaetano/docs/hacker-howto-pt.html">hacker</a> no verdadeiro sentido da palavra.</p>
<p style="text-align: justify;">Quando você parar de se preocupar com o que está na moda você vai perceber que há vagas que não conseguem ser preenchidas por empurradores de rato.</p>
<p style="text-align: justify;">Busque sempre o conhecimento, mesmo que sem uma aplicação óbvia, pois as grandes invenções da humanidade só foram possíveis depois de integrar idéias muitas vezes não relacionadas. Há sempre mais de uma ciência por trás de tudo que você toca.</p>
<p style="text-align: justify;">Explore com paixão o máximo de suas habilidades, que o sucesso será uma mera cosequência.</p>
<h3>Apêndice</h3>
<p style="text-align: justify;">Especialmente mas não exclusivamente para os alunos do curso, deixo alguns links interessantes:</p>
<ul>
<li><a href="http://catb.org/esr/faqs/hacker-howto.html">How To Become A Hacker</a></li>
<li><a href="http://catb.org/esr/faqs/smart-questions.html">How To Ask Questions The Smart Way</a></li>
<li><a href="http://www.unix.org/">The UNIX System</a></li>
<li><a href="http://www.gnu.org/">GNU Operating System</a></li>
<li><a href="http://www.minix3.org/">The MINIX 3 Operating System</a></li>
<li><a href="http://www.freebsd.org/">Free BSD</a></li>
<li><a href="http://kernel.org/">Linux Kernel</a></li>
<li><a href="http://www.gnu.org/software/bash/">Bash</a></li>
<li><a href="http://kornshell.com/">KornShell</a></li>
<li><a href="http://tldp.org/">The Linux Documentation Project</a></li>
<li><a href="http://tldp.org/LDP/abs/html/">Advanced Bash-Scripting Guide</a></li>
<li><a href="http://tldp.org/HOWTO/Program-Library-HOWTO/">Program Library HOWTO</a></li>
<li><a href="http://focalinux.cipsga.org.br/">Guia Foca GNU/Linux</a></li>
<li><a href="http://www.projetofedora.org/">Fedora Brasil</a></li>
<li><a href="http://www.ubuntu-br.org/">Ubuntu-BR</a></li>
<li><a href="http://www.slackware.com/">Slackware</a></li>
<li><a href="http://gcc.gnu.org/">GCC</a></li>
<li><a href="http://www.perl.org/">Perl</a></li>
<li><a href="http://www.xfree86.org/">XFree86</a></li>
<li><a href="http://www.x.org/">Xorg</a></li>
<li><a href="http://www.compiz.org/">Compiz</a></li>
<li><a href="http://git-scm.com/">Git</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.blabos.org/2010/07/o-caos-a-moda-e-o-hacker/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Criando um mini-mirror do cpan com o CPAN::Mini</title>
		<link>http://blog.blabos.org/2010/02/criando-um-mini-mirror-do-cpan-com-o-cpanmini/</link>
		<comments>http://blog.blabos.org/2010/02/criando-um-mini-mirror-do-cpan-com-o-cpanmini/#comments</comments>
		<pubDate>Fri, 05 Feb 2010 08:35:54 +0000</pubDate>
		<dc:creator>blabos</dc:creator>
				<category><![CDATA[Perl]]></category>

		<guid isPermaLink="false">http://blog.blabos.org/?p=708</guid>
		<description><![CDATA[DEPRECATED: Este texto foi tornado obsoleto pelo texto Perl cada vez mais f&#225;cil. Online desde 26/10/1995, com 17365 módulos escritos por 7930 autores (até o momento da escrita deste post), o CPAN é o repositório oficial de módulos Perl. Nele podemos encontrar muitas vezes, centenas de módulos prontos para várias tarefas. Essa é uma das [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;"><strong>DEPRECATED:</strong> Este texto foi tornado obsoleto pelo texto <a href="http://blog.blabos.org/2011/01/perl-cada-vez-mais-facil/">Perl cada vez mais f&aacute;cil</a>.</p>
<p style="text-align: justify;">Online desde 26/10/1995, com 17365 módulos escritos por 7930 autores (até o momento da escrita deste post), o <a href="http://www.cpan.org">CPAN</a> é o repositório oficial de módulos Perl. Nele podemos encontrar muitas vezes, centenas de módulos prontos para várias tarefas. Essa é uma das facilidades que fazem os programadores Perl serem tão eficientes.</p>
<p style="text-align: justify;">No entanto, a dependência de uma conexão à internet para a instalação de novos módulos, é por vezes um empecilho para a utilização desta poderosa ferramenta. Mas como em Perl sempre há mais de uma forma de se fazer, neste post mostraremos como criar um mini-mirror do cpan para ser utilizado em ambientes onde uma conexão com a internet nem sempre é possível.</p>
<p><span id="more-708"></span></p>
<p style="text-align: justify;">Depois de configurar o aplicativo cpan para instalar <a href="http://blog.blabos.org/2009/08/instalando-modulos-do-cpan-via-locallib/">módulos localmente com a local::lib</a>, o primeiro passo para configurar o mirror é instalar e configurar o módulo CPAN::Mini e seus aplicativos.</p>
<p style="text-align: justify;">Existem várias formas de se configurar o minicpan. A que eu mais uso é a que é feita através de um arquivo de configuração chamado .minicpanrc que deve ser criado no diretório home do usuário. Ele possui somente duas linhas conforme abaixo:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="text" style="font-family:monospace;">local: ~/minicpan
remote: http://www.cpan.org</pre></td></tr></table></div>

<p style="text-align: justify;">A primeira linha indica em qual diretório ficarão os arquivos do mirror, enquanto a segunda indica de onde as informações sobre os pacotes serão baixadas.</p>
<p style="text-align: justify;">Feito isso, podemos instalar o módulo CPAN::Mini com o comando:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="text" style="font-family:monospace;">user@host:~$ cpan CPAN::Mini</pre></td></tr></table></div>

<p style="text-align: justify;">Depois de instalar o módulo, executamos o comando minicpan que vai sincronizar o repositório indicado no &#8216;remote&#8217; do .minicpanrc com o repositório na internet. Esta parte pode demorar entre alguns minutos e várias horas, dependendo da velocidade do seu link.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="text" style="font-family:monospace;">user@host-perl:~$ minicpan
authors/01mailrc.txt.gz ... updated
modules/02packages.details.txt.gz ... updated
modules/03modlist.data.gz ... updated
authors/id/A/AA/AAYARS/Devel-Ladybug-0.406.tar.gz ... updated
authors/id/A/AA/AAYARS/CHECKSUMS ... updated
...</pre></td></tr></table></div>

<p style="text-align: justify;">A última etapa é configurar o aplicativo cpan para utilizar o nosso mirror local como primeira opção de download. Isso é feito pelo próprio prompt do cpan:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="text" style="font-family:monospace;">cpan&gt; o conf urllist unshift file:///home/blabos/minicpan</pre></td></tr></table></div>

<p style="text-align: justify;">Onde /home/blabos é o diretório home do usuário, no meu caso, blabos; e minicpan é o diretório que configuramos na opção &#8216;local&#8217; do .minicpanrc.</p>
<p style="text-align: justify;">Com esses passo simples, conseguimos construir um mini-mirror do cpan para ser utilizado em ambientes com pouco ou nenhum acesso à internet. Adicionalmente, para replicar o mirror em outras máquinas, basta copiar o diretório minicpan e adicioná-lo como opção de download para o comando cpan (última etapa descrita anteriormente).</p>
<p style="text-align: justify;">Meus sinceros agradecimentos ao edenc que primeiro me falou a respeito do minicpan, ao Randal Schwartz que escreveu o script original do minicpan e ao Ricardo SIGNES que transformou o script do Randal em um módulo.</p>
<p style="text-align: justify;">Se quiser saber mais a respeito, dê uma olhada no <a href="http://www.stonehenge.com/merlyn/LinuxMag/col42.html">artigo original</a> do Randal ou na <a href="http://search.cpan.org/~rjbs/CPAN-Mini-0.576/lib/CPAN/Mini.pm">documentação online do módulo</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.blabos.org/2010/02/criando-um-mini-mirror-do-cpan-com-o-cpanmini/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Instalando módulos do CPAN via local::lib</title>
		<link>http://blog.blabos.org/2009/08/instalando-modulos-do-cpan-via-locallib/</link>
		<comments>http://blog.blabos.org/2009/08/instalando-modulos-do-cpan-via-locallib/#comments</comments>
		<pubDate>Mon, 31 Aug 2009 00:52:57 +0000</pubDate>
		<dc:creator>blabos</dc:creator>
				<category><![CDATA[Perl]]></category>

		<guid isPermaLink="false">http://blog.blabos.org/?p=647</guid>
		<description><![CDATA[DEPRECATED: Este texto foi tornado obsoleto pelo texto Perl cada vez mais f&#225;cil. Instalar módulos do CPAN em máquinas onde você não tem permissão de root é muito simples. Utilizando o módulo local::lib do próprio CPAN, você pode criar uma instalação local na qual os módulos são instalados no seu próprio home. Configurando o cpan [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;"><strong>DEPRECATED:</strong> Este texto foi tornado obsoleto pelo texto <a href="http://blog.blabos.org/2011/01/perl-cada-vez-mais-facil/">Perl cada vez mais f&aacute;cil</a>.</p>
<p style="text-align: justify;">Instalar módulos do CPAN em máquinas onde você não tem permissão de root é muito simples. Utilizando o módulo local::lib do próprio CPAN, você pode criar uma instalação local na qual os módulos são instalados no seu próprio home.</p>
<p><span id="more-647"></span></p>
<h2>Configurando o cpan</h2>
<p style="text-align: justify;">Para isso, basta chamar um terminal e digitar o comando cpan. Ele vai mostrar uma pequena mensagem de apresentação e perguntar se você gostaria de deixá-lo configurar tudo automaticamente. Para a maioria dos casos a configuração automática é suficiente, no entanto eu vou configurar algumas opções por mim mesmo, então vou responder &#8216;no&#8217;.</p>

<div class="wp_syntax"><div class="code"><pre class="cpan" style="font-family:monospace;">Would you like me to configure as much as possible automatically? [yes] no</pre></div></div>

<p style="text-align: justify;">A primeira opção que eu vou responder diferente da default é a que define a política de pré-requisitos (<strong>&lt;prerequisites_policy&gt;</strong>). Ela define o que o cpan deve fazer ao se deparar com um módulo que possui um dependência. O default é &#8216;ask&#8217; (perguntar).</p>

<div class="wp_syntax"><div class="code"><pre class="cpan" style="font-family:monospace;">Policy on building prerequisites (follow, ask or ignore)? [ask] follow</pre></div></div>

<p style="text-align: justify;">Eu vou modificar para &#8216;follow&#8217; (seguir). Assim, quando o cpan encontrar um módulo que possui alguma dependência, ao invés de me perguntar, ele vai tentar instalá-la automaticamente. Isso é extremamente útil durante instalações longas com uma árvore de dependências grande como a do Catalyst.</p>

<div class="wp_syntax"><div class="code"><pre class="cpan" style="font-family:monospace;">Policy on installing 'build_requires' modules (yes, no, ask/yes,
ask/no)? [ask/yes] yes</pre></div></div>

<p style="text-align: justify;">Na sequência vem a pergunta sobre a instalação de dependências de build dos módulos. Eu vou alterar de &#8216;ask/yes&#8217; para &#8216;yes&#8217; para que as dependências de build também sejam instaladas. O default era perguntar e sugerir sim como resposta.</p>
<p style="text-align: justify;">A seguir vem uma sequência de perguntas sobre ferramentas que o cpan normalmente usa. Eu aproveito esse momento para checar se alguma está faltando e então instalá-la.</p>

<div class="wp_syntax"><div class="code"><pre class="cpan" style="font-family:monospace;">Where is your bzip2 program? [/bin/bzip2]
&nbsp;
Where is your gzip program? [/bin/gzip]</pre></div></div>

<p style="text-align: justify;">Várias opções depois, a próxima que eu modifico é o charset default de ISO-8859-1 para UTF-8.</p>

<div class="wp_syntax"><div class="code"><pre class="cpan" style="font-family:monospace;">The next option deals with the charset (aka character set) your
terminal supports. In general, CPAN is English speaking territory, so
the charset does not matter much but some CPAN have names that are
outside the ASCII range. If your terminal supports UTF-8, you should
say no to the next question. If it expects ISO-8859-1 (also known as
LATIN1) then you should say yes. If it supports neither, your answer
does not matter because you will not be able to read the names of some
authors anyway. If you answer no, names will be output in UTF-8.
&nbsp;
Your terminal expects ISO-8859-1 (yes/no)? [yes] no</pre></div></div>

<p style="text-align: justify;">O cpan vai te perguntar se ele pode se conectar à internet para baixar a lista de repositórios. Ele é bem educado quanto às coisas que ele precisa fazer, por isso estamos configurando opções que o deixem mais independente. Responda yes e aguarde ele baixar a lista de servidores.</p>
<p style="text-align: justify;">Depois de se comunicar com os servidores default, ele te pergunta sobre quais repositórios você quer configurar em três etapas. Primeiro pergunta o continente, depois o país e por último o próprio repositório. É possível escolher mais de uma opção simultaneamente. Eu escolhi para continentes América do Sul e América do Norte, para países Brasil, Chile e Estados Unidos e por último alguns repositórios em cada país. Fique à vontade para escolher quantos e quais quiser.</p>
<p style="text-align: justify;">Pronto. Agora você está no shell do cpan.</p>
<h2>Instalando o módulo local::lib</h2>
<p style="text-align: justify;">O próximo passo é instalar e configurar o módulo local::lib. Para isso digite no shell do cpan o comando:</p>

<div class="wp_syntax"><div class="code"><pre class="cpan" style="font-family:monospace;">cpan[1]&amp;gt; look local::lib</pre></div></div>

<p style="text-align: justify;">Isso vai fazer com o que o cpan baixe o módulo mas não instale-o automaticamente. Ao invés disso ele vai abrir um novo shell no diretório local onde ele desempacotou o módulo local::lib.</p>
<p style="text-align: justify;">Neste shell, faça o bootstrap com os seguintes comandos:</p>

<div class="wp_syntax"><div class="code"><pre class="cpan" style="font-family:monospace;">catalyst@spectro:~/.cpan/build/local-lib-1.004003-UyX2wf$ perl Makefile.PL \
--bootstrap &amp;amp;&amp;amp; make test &amp;amp;&amp;amp; make install</pre></div></div>

<p style="text-align: justify;">Por último mas não menos importante é preciso exportar algumas variáveis de ambiente. Para isso saia do shell atual (Ctrl+D), saia do shell do cpan (bye ou quit) e execute no bash o seguinte comando:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">'eval $(perl -I$HOME/perl5/lib/perl5 -Mlocal::lib)'</span> <span style="color: #000000; font-weight: bold;">&amp;</span>gt;<span style="color: #000000; font-weight: bold;">&amp;</span>gt;~<span style="color: #000000; font-weight: bold;">/</span>.bashrc</pre></div></div>

<p style="text-align: justify;">Isso vai adicionar os comandos que exportam as variáveis de ambiente ao final do seu arquivo .bashrc, e então a cada login elas serão automaticamente exportadas.</p>
<p style="text-align: justify;">Force a re-execução do seu bashrc ou faça logout e login novamente</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">catalyst<span style="color: #000000; font-weight: bold;">@</span>spectro:~$ . ~<span style="color: #000000; font-weight: bold;">/</span>.bashrc</pre></div></div>

<p style="text-align: justify;">Certifique-se que as variáveis de ambiente foram configuradas ou coisas estranhas podem acontecer. Entenda por &#8220;coisas estranhas&#8221; qualquer coisa diferente do funcionamento correto. Algumas podem ser realmente bizarras. <img src='http://blog.blabos.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">catalyst<span style="color: #000000; font-weight: bold;">@</span>spectro:~$ <span style="color: #c20cb9; font-weight: bold;">env</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">grep</span> <span style="color: #c20cb9; font-weight: bold;">perl</span>
<span style="color: #007800;">PERL5LIB</span>=<span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>catalyst<span style="color: #000000; font-weight: bold;">/</span>perl5<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>perl5:<span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>catalyst<span style="color: #000000; font-weight: bold;">/</span>perl5<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>perl5...
<span style="color: #007800;">MODULEBUILDRC</span>=<span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>catalyst<span style="color: #000000; font-weight: bold;">/</span>perl5<span style="color: #000000; font-weight: bold;">/</span>.modulebuildrc
<span style="color: #007800;">PATH</span>=<span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>catalyst<span style="color: #000000; font-weight: bold;">/</span>perl5<span style="color: #000000; font-weight: bold;">/</span>bin:<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>bin:<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin:<span style="color: #000000; font-weight: bold;">/</span>bin:<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>games
<span style="color: #007800;">PERL_MM_OPT</span>=<span style="color: #007800;">INSTALL_BASE</span>=<span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>catalyst<span style="color: #000000; font-weight: bold;">/</span>perl5
catalyst<span style="color: #000000; font-weight: bold;">@</span>spectro:~$</pre></div></div>

<h2>Retocando a maquiagem</h2>
<p style="text-align: justify;">Agora, antes de começar a instalar módulos, é uma boa atualizar o próprio módulo CPAN.pm. Atente para as maiúsculas e minúsculas.</p>

<div class="wp_syntax"><div class="code"><pre class="cpan" style="font-family:monospace;">catalyst@spectro:~$ cpan CPAN
...
Installing /home/catalyst/perl5/bin/cpan
Writing /home/catalyst/perl5/lib/perl5/i486-linux-gnu-thread-multi/auto...
Appending installation info to /home/catalyst/perl5/lib/perl5/i486-linux...
  ANDK/CPAN-1.9402.tar.gz
  /usr/bin/make install  -- OK
Warning (usually harmless): 'YAML' not installed, will not store persist...
catalyst@spectro:~$</pre></div></div>

<p style="text-align: justify;">Depois da instalação da nova versão do CPAN.pm, note que ele está avisando que o módulo YAML não está instalado. Para deixar tudo redondinho vamos intalá-lo também.</p>

<div class="wp_syntax"><div class="code"><pre class="cpan" style="font-family:monospace;">catalyst@spectro:~$ cpan YAML
...
Writing /home/catalyst/perl5/lib/perl5/i486-linux-gnu-thread-multi/auto/Y...
Appending installation info to /home/catalyst/perl5/lib/perl5/i486-linux...
  INGY/YAML-0.68.tar.gz
  /usr/bin/make install  -- OK
CPAN: YAML loaded ok (v0.68)
Going to read 1 yaml file from /home/catalyst/.cpan/build/
DONE
Restored the state of none (in 0.0265 secs)
catalyst@spectro:~$</pre></div></div>

<p style="text-align: justify;">Agora sim. Vamos dar uma conferida onde foi parar o módulo YAML recém instalado:</p>

<div class="wp_syntax"><div class="code"><pre class="cpan" style="font-family:monospace;">catalyst@spectro:~$ ls ~/perl5/lib/perl5
CPAN  CPAN.pm  i486-linux-gnu-thread-multi  local  Test  YAML  YAML.pm
catalyst@spectro:~$</pre></div></div>

<p style="text-align: justify;">Ele foi instalado dentro de uma árvore de diretórios criada no home do usuário corrente. Tudo isso sem pedir a senha de root uma única vez.</p>
<h2>Conclusão</h2>
<p style="text-align: justify;">Instalar módulos do CPAN localmente sem precisar de senha de root é muito fácil. Isso é extremamente útil em máquinas onde você tem apenas permissão de usuário comum, como em servidores de hospedagem.</p>
<p style="text-align: justify;">Uma outra vantagem é que para levar os mesmos módulos para outra máquina (com a mesma arquitetura) basta copiar o diretório perl5 que você acabou de criar, já que todos os módulos estão instalados dentro dele, bem como adicionar o comando que exporta as variáveis de ambiente na máquina destino. Isso também é bastante útil quando você tem um servidor de hospedagem que não te dá acesso a um shell.</p>
<h2>Links (in)úteis</h2>
<p style="text-align: justify;">
<ul><a href="http://github.com/blabos/Catalyst-Installation-local-lib/blob/master/lib/Catalyst/Installation/local/lib.pod"> </a></p>
<li><a href="http://search.cpan.org/~apeiron/local-lib-1.004006/lib/local/lib.pm">Módulo local::lib</a></li>
<li><a href="http://search.cpan.org/~andk/CPAN-1.9402/lib/CPAN.pm">Módulo CPAN.pm</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.blabos.org/2009/08/instalando-modulos-do-cpan-via-locallib/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Instalando e integrando Eclipse, CDT, Qt, Subversion, Perl, Vim e Web Tools somente com o mouse</title>
		<link>http://blog.blabos.org/2009/02/instalando-e-integrando-eclipse-cdt-qt-subversion-perl-vim-e-web-tools-somente-com-o-mouse/</link>
		<comments>http://blog.blabos.org/2009/02/instalando-e-integrando-eclipse-cdt-qt-subversion-perl-vim-e-web-tools-somente-com-o-mouse/#comments</comments>
		<pubDate>Sat, 21 Feb 2009 03:00:05 +0000</pubDate>
		<dc:creator>blabos</dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Eee]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[Qt]]></category>
		<category><![CDATA[Subversion]]></category>
		<category><![CDATA[VIM]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://blog.blabos.org/?p=391</guid>
		<description><![CDATA[Há muito tempo atrás em um post nem tão longe daqui, nós mostramos como instalar o eclipse com plugins para desenvolvimento em Qt e integrando com o Subversion. Mas o tempo passa, as versões mudam e tudo fica diferente, e desta vez vamos mostrar como fazer isso apenas com cliques e num Eee Pc. É [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Há muito tempo atrás em um <a href="http://blog.blabos.org/2008/05/eclipseqtsvn/">post</a> nem tão longe daqui, nós mostramos como instalar o eclipse com plugins para desenvolvimento em Qt e integrando com o Subversion. Mas o tempo passa, as versões mudam e tudo fica diferente, e desta vez vamos mostrar como fazer isso apenas com cliques e num Eee Pc.</p>
<p><span id="more-391"></span></p>
<p style="text-align: justify;">É claro que não é o tipo de coisa que deve ser usada para torturar um netbook, pois ele não foi desenhado para ser uma estação de desenvolvimento. Tanto é que ao final da instalação acabou o espaço disponível em disco, que já não era muito. Em termos de desempenho também não fica lá essas coisas, afinal é um NETbook, não un NOTEbook.</p>
<h2>Passo #0: Instalação do Java</h2>
<p style="text-align: justify;">Desta vesta vez ao invés de instalar a JRE na mão, utilizamos o synaptic, onde é só mandar procurar, clicar e instalar. Eu me contento com as versões disponíveis do java. Para maiores detalhes, seguem os links habituais: <a href="http://java.sun.com/javase/downloads/index.jsp">Download do Java</a> e <a href="http://java.sun.com/javase/6/webnotes/install/index.html">Dicas de Instalação</a>.</p>
<p style="text-align: center;"><a href="http://img.blabos.org/blog/posts/2009/02/eclipse/synaptic-java.png"><img border="1" src="http://img.blabos.org/blog/posts/2009/02/eclipse/thumb_synaptic-java.png" /></a></p>
<h2>Passo #1: Instalação do Eclipse</h2>
<p style="text-align: justify;">Eu vou continuar baixando e instalando o eclipse diretamente do seu <a href="http://www.eclipse.org/downloads">site</a>, pois a versão disponibilizada via synaptic é velha demais para mim <img src='http://blog.blabos.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> . Eu preferi o eclipse SDK, aquele que vem com o Java ao invés do CDT. Mas você pode escolher qualquer um.</p>
<p style="text-align: center;"><a href="http://img.blabos.org/blog/posts/2009/02/eclipse/eclipse.org.png"><img border="1" src="http://img.blabos.org/blog/posts/2009/02/eclipse/thumb_eclipse.org.png" /></a></p>
<p style="text-align: justify;">Feito o download, um duplo clique no arquivo abre o descompactador. Daí é só mandar extrair em algum diretório à sua escolha. Eu preferi deixar no ~/local, já que ficando no meu home, não vou precisar de permissão de administrador para instalar.</p>
<p style="text-align: center;"><a href="http://img.blabos.org/blog/posts/2009/02/eclipse/03-install.png"><img border="1" src="http://img.blabos.org/blog/posts/2009/02/eclipse/thumb_03-install.png" /></a></p>
<p style="text-align: justify;">Eu também precisei <a href="http://gnome-look.org/content/show.php/Eclipse+IDE+icon?content=20398">baixar o ícone</a>, pois ou no pacote não tem, ou está escondido demais para mim.</p>
<p style="text-align: center;"><a href="http://img.blabos.org/blog/posts/2009/02/eclipse/05-install.png"><img border="1" src="http://img.blabos.org/blog/posts/2009/02/eclipse/thumb_05-install.png" /></a></p>
<h2>Passo #2: Instalando o CDT</h2>
<p style="text-align: justify;">Para isso bastar abrir o eclipse e ir em Help&gt;Softwares Updates procurar po cdt e mandar ver na instalação. Ao terminar, o eclipse pede para ser reiniciado. Como pessoa bondosa que sou eu respondo sim cada vez que ele me pergunta.</p>
<p style="text-align: center;"><a href="http://img.blabos.org/blog/posts/2009/02/eclipse/06-cdt.png"><img border="1" src="http://img.blabos.org/blog/posts/2009/02/eclipse/thumb_06-cdt.png" /></a></p>
<h2>Passo #3: Integração com o Subversion</h2>
<p style="text-align: justify;">Esse é um pouco menos fácil. Vá em Help&gt;Softwares Updates e procure por, advinhe? mylyn. Pra começar a brincadeira isso vai ser necessário para a instalação da integração com Subversion. Daí o de sempre, next, nex, install. Depois, Help&gt;Softwares Updates procure por svn e mais uma vez, next, next, install. O problema é que isso vai instalar somente a integração (???), ainda faltam os conectores (???), ou seja, integra, mas não integra tanto assim&#8230;</p>
<p style="text-align: center;"><a href="http://img.blabos.org/blog/posts/2009/02/eclipse/08-mylyn.png"><img border="1" src="http://img.blabos.org/blog/posts/2009/02/eclipse/thumb_08-mylyn.png" /></a></p>
<p style="text-align: center;"><a href="http://img.blabos.org/blog/posts/2009/02/eclipse/07-subversive.png"><img border="1" src="http://img.blabos.org/blog/posts/2009/02/eclipse/thumb_07-subversive.png" /></a></p>
<p style="text-align: justify;">A instalação dos conectores é feita via um <a href="http://www.polarion.org/index.php?page=installation&#038;project=subversive#install">site próprio</a>. Mas cuidado agora, a menos que você esteja no windows, evite os pacores win32, óbvio. Isso vai te poupar muitas dores de cabeça, pois o eclipse é meio tímido quando o assunto é sobre os erros. Feito isso, next, next, install, e reiniciar o eclipse denovo&#8230;</p>
<p style="text-align: center;"><a href="http://img.blabos.org/blog/posts/2009/02/eclipse/10-connector.png"><img border="1" src="http://img.blabos.org/blog/posts/2009/02/eclipse/thumb_10-connector.png" /></a></p>
<h2>Passo #4: Integração com Perl</h2>
<p style="text-align: justify;">A integração com Perl é bem simples de ser instalada, bastando adicionar o <a href="http://www.epic-ide.org">site do EPIC</a> e mandar ver no next, next, install&#8230;</p>
<p style="text-align: center;"><a href="http://img.blabos.org/blog/posts/2009/02/eclipse/13-epic.png"><img border="1" src="http://img.blabos.org/blog/posts/2009/02/eclipse/thumb_13-epic.png" /></a></p>
<h2>Passo #5: Qt Eclipse Integration</h2>
<p style="text-align: justify;">Pra variar, nada de next, next, intall. Desta vez, é baixar do site da <del>TrollTech</del> <a href="http://www.qtsoftware.com/developer/eclipse-integration">Qt Software</a>, duplo clique e mandar descompactar no mesmo diretório que o eclipse foi descompactado, no meu caso ~/local. Nâo é dentro do diretório do eclipse, é fora, no mesmo nível, pois o arquivo da integração com o Qt vai criar um diretório eclipse/ onde for descompactado e esse diretório precisa combinar com o diretório do eclipse.</p>
<p style="text-align: center;"><a href="http://img.blabos.org/blog/posts/2009/02/eclipse/14-qt-eclipse-integration.png"><img border="1" src="http://img.blabos.org/blog/posts/2009/02/eclipse/thumb_14-qt-eclipse-integration.png" /></a></p>
<h2>Passo #6: Web Tools</h2>
<p style="text-align: justify;">Ultimamente eu ando me arriscando denovo no mundo do desenvolvimento web com o Catalyst. Por isso algumas ferramentas como um editor de html ajudam muito. Eu usava o kate, mas agora descobri os plugins do próprio eclipse. Então, mãos à obra, pra variar, Help&gt;Softwares Updates, procurar por web e então next, next, install.</p>
<p style="text-align: center;"><a href="http://img.blabos.org/blog/posts/2009/02/eclipse/17-web.png"><img border="1" src="http://img.blabos.org/blog/posts/2009/02/eclipse/thumb_17-web.png" /></a></p>
<h2>Passo #7: Vim Plugin</h2>
<p style="text-align: justify;">Por último e não menos importante não dá pra deixar o Eclipse completo, sem integrá-lo com o mais importante IDE de todos os tempos, <strong>o VIM</strong>.</p>
<p style="text-align: justify;">Por ser o Vim uma ferramenta de &#8220;modo texto&#8221;, a instalação do <a href="http://vimplugin.org/installation">Vim Plugin</a> não tem screen shots <img src='http://blog.blabos.org/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' />  . Mas não se preocupem, basta acessar o site dele e seguir as poucas intruções. Não se esqueçam de marcar no eclipse a opção &#8216;Embed Vim&#8217; pois senão ao abrir os arquivos ele vai abrir uma janela nova.</p>
<h2>Considerações Finais</h2>
<p style="text-align: justify;">A nova versão do Eclipse, Ganymede, está bem mais produtiva e fácil de instalar. Já é até possível instalar a maioria dos plugins sem muita dor de cabeça. A integração com o Qt e Subversion, por exemplo, são duas mãos na roda principalmente para os desenvolvedores independentes. As ferramentas de edição de HTML, apesar de deixarem um pouco a desejar, também estão muito boas.</p>
<p style="text-align: justify;">Para o meu workspace ser perfeito só faltava o Eclipse ser bonito como o <a href="http://labs.trolltech.com/blogs/category/qtcreator/">QtCreator</a>, o EPIC funcionar como a parte do <a href="http://padre.perlide.org/">Padre</a> que funciona e o plugin do VIM ser um pouco mais decente, mas afinal não dá pra copiar o VIM, né&#8230;</p>
<h2>Links Interessantes</h2>
<p style="text-align: justify;">
<ul>
<li><a href="http://www.eclipse.org">Eclipse.org</a></li>
<li><a href="http://www.qtsoftware.com/">Qt Software</a></li>
<li><a href="http://labs.trolltech.com/blogs/category/qtcreator/">QtCreator</a></li>
<li><a href="http://www.polarion.org/index.php?page=overview&#038;project=subversive">Polarion Community</a></li>
<li><a href="http://svnbook.red-bean.com/">SVN Redbook</a></li>
<li><a href="http://www.epic-ide.org/">EPIC &#8211; Eclipse Perl Integration</a></li>
<li><a href="http://padre.perlide.org/">Padre &#8211; Perl IDE</a></li>
<li><a href="http://vimplugin.org/">VIM Plugin</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.blabos.org/2009/02/instalando-e-integrando-eclipse-cdt-qt-subversion-perl-vim-e-web-tools-somente-com-o-mouse/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>O monge e o macaco</title>
		<link>http://blog.blabos.org/2009/02/o-monge-e-o-macaco/</link>
		<comments>http://blog.blabos.org/2009/02/o-monge-e-o-macaco/#comments</comments>
		<pubDate>Sun, 15 Feb 2009 18:46:38 +0000</pubDate>
		<dc:creator>blabos</dc:creator>
				<category><![CDATA[Contos]]></category>
		<category><![CDATA[Perl]]></category>

		<guid isPermaLink="false">http://blog.blabos.org/?p=380</guid>
		<description><![CDATA[Era uma vez um rapaz que gostava de programar. Ele descobriu a programação por acaso e se encantou com a idéia de transformar as idéias na sua cabeça em software para que outras pessoas pudessem usar. Então ele começou uma jornada em busca da linguagem que fosse capaz de expressar exatamente o que ele pensava. [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Era uma vez um rapaz que gostava de programar. Ele descobriu a programação por acaso e se encantou com a idéia de transformar as idéias na sua cabeça em software para que outras pessoas pudessem usar. Então ele começou uma jornada em busca da linguagem que fosse capaz de expressar exatamente o que ele pensava.</p>
<p><span id="more-380"></span></p>
<p style="text-align: justify;">Ele começou com Pascal e aprendeu que com ela poderia iterar e recursar, modularizar e estruturar. E viu que isso era bom, e estudou mais e mais, e naquela época ele foi feliz. Porém o excesso de restrições começou a travar o seu pensamento e nessa época ele foi infeliz.</p>
<p style="text-align: justify;">Então ele decidiu que queria algo que melhor e procurou Java. E então ele aprendeu que poderia orientar a objeto sem se preocupar com a coleta de lixo. E viu que isso era bom e nessa época ele foi feliz. Mas chegou um dia que o excesso de camadas começou a travar o seu pensamento e nessa época ele foi infeliz.</p>
<p style="text-align: justify;">Então ele decidiu que se quisesse ser um programador de vedade teria que aprender C e Assembly. Ele estudou e estudou, e descobriu que podia fazer tudo que sua mente imaginava, inclusive besteiras. E nessa época ele foi feliz. Ele tinha para si todo o controle da máquina e assumiu a responsabilidade sobre esse poder. Ele percebeu que poderia ter o que tinha em Pascal, com C e ele foi feliz. Ele percebeu que poderia ter o que tinha em Java, com C++ e ele foi feliz. E ele percebeu que poderia ter o que quisesse se estivesse disposto a pagar o preço em Assembly, e ele foi muito feliz.</p>
<p style="text-align: justify;">Mas algo faltava que ainda o incomodava e ele não sabia explicar o porquê. Tentou escrever um programa que explicasse o que faltava, mas não conseguiu resolver. Então, nessa época, ele foi infeliz. Ele se desesperou, e procurou apender todas as linguagens do mundo, mas nenhuma era suficiente para explicar o que estava faltando. Tentou VB, C#, Python, Lisp e nada. Nem mesmo Brainfuck conseguia explicar o que faltava. E ele era infeliz, e até a sua infelicidade era incompleta. Ele pensou em desistir, mas até esse pensamento era incompleto.</p>
<p style="text-align: justify;">Então um dia ele conheceu um monge e esse monge lhe apresentou uma nova linguagem não muito conhecida. Ele viu mas não ficou interessado, pois nenhuma linguagem até ali havia mostrado o que lhe faltava. Mas o monge insistiu e ele aceitou, e então ele começou a estudar Perl.</p>
<p style="text-align: justify;">Então ele viu que a linguagem era cheia de símbolos e construções estranhas e aquilo não era bom. Era feio e esquisito, e ele continuava sem saber o que lhe faltava. Sua mente já estava cansada e seus pensamentos minguavam, mas algo o impelia a continuar e estudar.</p>
<p style="text-align: justify;">Um dia, ele não sabe qual, aconteceu algo e ele não soube o quê. Veio um estalo e tudo se tornou claro. Seu mundo de sombras teve luz. E ele não sabia explicar o que era, mas isso era bom e ele foi feliz.</p>
<p style="text-align: justify;">Então ele procurou fazer um retrospecto de seu caminho até ali para descobrir o que lhe acontecera. Ele olhou para si e descobriu que podia ver coisas que não via antes. Ele olhou para Pascal e resolveu problemas que não tinham solução naquela época. Ele olhou para Java e entendeu quais eram as camadas necessárias e quais eram as barreiras. Ele olhou para C e percebeu que a linguagem era tão poderosa que ele deixou-a amarrar suas mãos e prender sua mente, e ele entendeu como utilizar por completo esse poder a seu favor. Ele olhou para VB, C# e todo o .NET e aceitou que era melhor mesmo deixar pra lá&#8230; Então ele olhou para Lisp e viu como realmente eram escritas as linhas de código do universo, e que tinha Perl colando as coisas.</p>
<p style="text-align: justify;">Então ele olhou para Perl, e notou que os símbolos estranhos eram só atalhos para abstrações e que a linguagem era muito mais que isso. Era grande, poderosa, flexível e bela, muito bela.</p>
<p style="text-align: justify;">E foi aí que ele descobriu o que lhe faltava, e isso não era uma linguagem de programação. Perl lhe trouxe uma nova forma de olhar para o mundo e perceber coisas que antes ele não percebia. Perl o iluminou e libertou sua mente, e ele entendeu que até ali tinha sido apenas um macaco, repetindo comandos e algoritmos sem entender o seu real significado. Não importava qual era a linguagem, ele era somente um macaco, e antes desse estalo, mesmo com Perl ele não compreendia. Mesmo com Perl ele continuava a ser um macaco, e teria sido assim se ele não tivesse compreendido. Não importaria qual a nova linguagem, ele continuaria a ser um macaco.</p>
<p style="text-align: justify;">Ele percebeu que sua mente estava escravizada por mecanismos que a obrigavam a não pensar, e quanto mais linguagens ele aprendia, mais e mais mecanismos apareciam para oprimir e degradar seu pensamento.</p>
<p style="text-align: justify;">Então agora finalmente ele havia descoberto que o que lhe faltava não era uma tecnologia, mas sim era libertar a sua mente. Ele tornou-se um monge. E ele se libertou dos mecanismos de opressão, e todas as linguagens que ele conhecia passaram a se completar e fazer sentido. Ele não mais programava, mas falava Perl, então ele foi capaz de expressar completamente seus pensamentos em qualquer linguagem, e assim ele foi finalmente feliz.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.blabos.org/2009/02/o-monge-e-o-macaco/feed/</wfw:commentRss>
		<slash:comments>102</slash:comments>
		</item>
		<item>
		<title>Escrevendo na tela</title>
		<link>http://blog.blabos.org/2009/02/escrevendo-na-tela/</link>
		<comments>http://blog.blabos.org/2009/02/escrevendo-na-tela/#comments</comments>
		<pubDate>Wed, 11 Feb 2009 13:46:09 +0000</pubDate>
		<dc:creator>SmokeMachine</dc:creator>
				<category><![CDATA[Perl]]></category>
		<category><![CDATA[Escrito por SmokeMachine]]></category>

		<guid isPermaLink="false">http://blog.blabos.org/?p=340</guid>
		<description><![CDATA[Pois é, mais um post da série &#8220;Como programar em perl&#8221; que provavelmente se tornará semanal, com toda quarta-feira um post novinho pra vocês. Tentarei ser regular como os encontros sociais da rio.pm, que já a alguns anos ocorrem toda segunda quinta-feira do mês. Mas voltando ao mini-tutorial&#8230; Hoje falaremos de como imprimir coisas na [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Pois é, mais um post da série &#8220;Como programar em perl&#8221; que provavelmente se tornará semanal, com toda quarta-feira um post novinho pra vocês. Tentarei ser regular como os encontros sociais da <a href="http://rio.pm.org">rio.pm</a>, que já a alguns anos ocorrem <strong>toda</strong> segunda quinta-feira do mês. Mas voltando ao mini-tutorial&#8230; Hoje falaremos de como imprimir coisas na tela usando perl.</p>
<p><span id="more-340"></span></p>
<p style="text-align: justify;">Uma das formas mais fáceis de imprimir algo na tela é usando o comando <strong>print</strong>, vejamos o exemplo mais clássico do uso desse comando:</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;Olá Mundo&quot;</span><span style="color: #339933;">;</span></pre></div></div>

<p style="text-align: justify;">E o que será que esse troço aí faz?! Não parece meio óbvio? Isso imprime <strong>Olá Mundo</strong>.</p>
<blockquote style="text-align: justify;"><p>Não é que esse negócio é fácil mesmo?!!</p></blockquote>
<p style="text-align: justify;">Pois é, não existe coisa mais simples, se você quer que ele <em>imprima Olá Mundo</em>, você só precisa mandar: <strong>imprima Olá Mundo.</strong></p>
<blockquote style="text-align: justify;"><p>Tá, tudo bem&#8230; Isso eu entendi&#8230; Mas porque as aspas (&#8220;)?</p></blockquote>
<p style="text-align: justify;">Bem, isso diz ao <strong>perl</strong> que o <strong>Olá Mundo</strong> é uma string, um texto. Se eu não botasse as aspas, o <strong>perl</strong> acharia que <strong>Olá</strong> e<strong> Mundo</strong> são comandos (funções). Mas como não exitem essas funções, esse código daria erro.</p>
<p style="text-align: justify;">O <strong>print</strong> não aceita só strings&#8230; ele aceita uma lista de &#8220;coisas&#8221;:</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;Olá&quot;</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot; &quot;</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;números: &quot;</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">4</span><span style="color: #339933;">;</span></pre></div></div>

<p style="text-align: justify;">O que isso faz?! Isso imprime: a string <strong>Olá</strong>, em seguida <em><strong>espaço</strong></em>, depois a string <strong>números:</strong><strong> (com <em>espaço</em> no final)</strong>, e então, <strong>1</strong>, <strong>2</strong>, <strong>3</strong>, <strong>4</strong>. Como fica isso impresso? Assim:</p>
<p style="text-align: justify;"><strong>Olá numeros: 1234</strong></p>
<p style="text-align: justify;">Ele imprime cada um dos itens da lista sem separadores. Vamos ver outro exemplo?</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;Números de 1 a 10: &quot;</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">1</span> <span style="color: #339933;">...</span> <span style="color: #cc66cc;">10</span><span style="color: #339933;">;</span></pre></div></div>

<p style="text-align: justify;">Isso imprime:</p>
<p style="text-align: justify;"><strong>Números de 1 a 10: 12345678910</strong></p>
<p style="text-align: justify;">Mais um exemplo:</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #0000ff;">$numero</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">15</span><span style="color: #339933;">;</span>
<span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;Meu número é igual a &quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$numero</span><span style="color: #339933;">;</span></pre></div></div>

<p style="text-align: justify;">Que imprime:</p>
<p style="text-align: justify;"><strong>Meu número é igual a 15</strong></p>
<p style="text-align: justify;">E isso imprime a mesma coisa:</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #0000ff;">$numero</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">15</span><span style="color: #339933;">;</span>
<span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;Meu número é igual a $numero&quot;</span><span style="color: #339933;">;</span></pre></div></div>

<p style="text-align: justify;">Certo? Então acabamos de ver que se eu botar uma variável <strong>escalar</strong> entre as aspas, o print vai imprimir o valor dessa variável. Interessante&#8230; Mas e se eu não quiser imprimir o valor?! Se, por exemplo eu quiser imprimir: <strong>Eu tenho uma variável chamada $numero</strong> ?</p>
<p style="text-align: justify;">Uma forma de fazer isso seria ao invés de usar as aspas duplas (&#8220;) usar aspas simples (&#8216;):</p>
<p style="text-align: justify;"><strong>É importante notar, que estamos falando das aspas verticais (conforme aparece nos trechos de código) e não das aspas francesas (que aparecem no restante do texto). Essa diferença se deve ao fato do html do blog dar uma &#8220;ajeitada&#8221; ao seu modo, mesmo utilizando os <a href="http://www.w3schools.com/tags/ref_ascii.asp">códigos de entidade</a>.</strong></p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #000066;">print</span> <span style="color: #ff0000;">'Eu tenho uma variável chamada $numero'</span></pre></div></div>

<p style="text-align: justify;">Hum&#8230; Então quer dizer que quando se usa aspas simples (&#8216;) ele não interpreta o valor da variável, mas sim exatamente o que está escrito. Beleza! Mas e se eu quiser imprimir isso?</p>
<p style="text-align: justify;"><strong>O valor da variável $numero é 15</strong></p>
<p style="text-align: justify;">Bom então talvez fosse melhor fazer assim:</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;O valor da variável <span style="color: #000099; font-weight: bold;">\$</span>numero é $numero&quot;</span><span style="color: #339933;">;</span></pre></div></div>

<blockquote style="text-align: justify;"><p>De onde veio essa barra invertida (\)?!?! O que isso significa?</p></blockquote>
<p style="text-align: justify;">Bem&#8230; A barra invertida (contra-barra ou backslash, para os íntimos) tem uma função muito especial: Ela torna especial as coisas que não são especiais, e torna não-especial as coisas especiais.</p>
<blockquote style="text-align: justify;"><p>???</p></blockquote>
<p style="text-align: justify;">Calma! Eu explico!</p>
<p style="text-align: justify;">O caracter &#8220;<strong>$</strong>&#8221; é um caracter especial dentro das aspas duplas, ele diz que o que está por vir é uma variável escalar (como já vimos no <a href="http://blog.blabos.org/2009/02/o-que-isso-significa/">post passado</a>) então se usarmos a barra invertida (<strong>\</strong>) antes desse caracter, ele perde toda a especialidade dele, e passa a ser um caracter simples, passa a significar simplesmente &#8220;<strong>$</strong>&#8220;. Outro exemplo é o caracter <strong>&#8220;</strong> (aspas duplas) que depois de outra aspa dupla significa o fechamento da primeira. Bom, um exemplo vale mais que mil palavras:</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;O valor da variável <span style="color: #000099; font-weight: bold;">\$</span>numero é <span style="color: #000099; font-weight: bold;">\&quot;</span>$numero<span style="color: #000099; font-weight: bold;">\&quot;</span>&quot;</span><span style="color: #339933;">;</span></pre></div></div>

<p style="text-align: justify;">Complexo? Vamos ver:</p>
<p style="text-align: justify;">Estamos mandando imprimir uma <strong>string</strong> (sabemos que é uma string pois está entre <strong>aspas</strong>).</p>
<p style="text-align: justify;">Abrimos <strong>aspas</strong>, e escrevemos:</p>
<p style="text-align: justify;"><strong>O valor da variável</strong></p>
<p style="text-align: justify;">Em seguida usamos uma <strong>contra-barra</strong> (<strong>\</strong>) e um <strong>$</strong>, o <strong>contra-barra</strong> tirou a especialidade do <strong>$</strong>, logo aquilo <strong>não</strong> é uma variavel.</p>
<p style="text-align: justify;">Logo escrevemos <strong>é</strong> seguido de <strong>contra-barra</strong> (<strong>\</strong>) e <strong>aspa dupla</strong> (<strong>&#8220;</strong>), como a <strong>aspa</strong> deixou de ser especial (por causa da contra-barra) ela <strong>não</strong> está fechando a primeira <strong>aspa</strong>&#8230; é apenas mais um caracter a ser impresso.</p>
<p style="text-align: justify;">Depois disso vem a variável <strong>$numero</strong> e outra <strong>aspa</strong> sem especialidade e a <strong>aspa especial</strong>, que fecha a primeira.</p>
<p style="text-align: justify;">Até que não é tão complicado, concorda?</p>
<p style="text-align: justify;">Mas e o caso contrário, o dos caracteres <strong>não-especiais</strong> precedidos por <strong>contra-barra</strong>(<strong>\</strong>)? Vamos ver alguns exemplos:</p>
<p style="text-align: justify;">O caracter &#8220;<strong>t</strong>&#8221; não tem nada de especial, é apenas um <strong>t</strong>&#8230; Agora, quando botando uma <strong>contra-barra</strong> na frente, ele muda completamente de significado. &#8220;<strong>\t</strong>&#8221; significa <strong>tab</strong>, tabulação horizontal. Interessante, né?</p>
<p style="text-align: justify;">Outro exemplo interessante é o &#8220;<strong>n</strong>&#8220;. Se você está executando esses <strong>print</strong>s no seu computador, você está percebendo que <strong>nenhum deles mudou de linha</strong>. Pois é, até agora não imprimimos nenhum caracter de <strong>quebra de linha</strong>. Esse caracter é o &#8220;<strong>\n</strong>&#8220;. Então podemos escrever:</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\t</span>O valor da variável <span style="color: #000099; font-weight: bold;">\$</span>numero é <span style="color: #000099; font-weight: bold;">\&quot;</span>$numero<span style="color: #000099; font-weight: bold;">\&quot;</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span></pre></div></div>

<p style="text-align: justify;">O que vai imprimir:</p>
<p style="text-align: justify;"><span style="color: #c0c0c0;">tab</span> <strong>O valor da variável $numero é &#8220;15&#8243;</strong> <span style="color: #c0c0c0;">quebra_de_linha</span></p>
<p style="text-align: justify;">Certo&#8230; Acho que já está bom para essa quarta feira&#8230; Eu tenho que ir dormir, pois amanhã vou ficar acordado até tarde&#8230; Amanhã é o <strong>Encontro Social</strong> do <a href="http://rio.pm.org">rio.pm</a>.</p>
<p style="text-align: justify;">Lembre-se, caso queira algo mais avançado, caso queira ver alguns dos meus projetos ou queira brincar de <a href="http://en.wikipedia.org/wiki/Perl#Perl_golf">golf</a>, visite o <a href="http://perl-e.org">perl-e</a> e divirta-se. Espero vocês lá, e para a próxima 4a feira com mais um post sobre iniciação em perl!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.blabos.org/2009/02/escrevendo-na-tela/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>$ @ % &#8211; O que isso significa?!</title>
		<link>http://blog.blabos.org/2009/02/o-que-isso-significa/</link>
		<comments>http://blog.blabos.org/2009/02/o-que-isso-significa/#comments</comments>
		<pubDate>Wed, 04 Feb 2009 05:21:53 +0000</pubDate>
		<dc:creator>SmokeMachine</dc:creator>
				<category><![CDATA[Perl]]></category>
		<category><![CDATA[Escrito por SmokeMachine]]></category>

		<guid isPermaLink="false">http://blog.blabos.org/?p=259</guid>
		<description><![CDATA[Antes de qualquer coisa, gostaria de agradecer ao Blabos o convite e a introdução tão exagerada&#8230; Bom, mas eu estou aqui pra falar de perl, então vamos começar. Variáveis, como o nome diz, elas são usadas para armazenar valores variáveis. Em perl existem 3 tipos básicos de variáveis (preste atenção, eu disse básicos). Esses são: [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Antes de qualquer coisa, gostaria de agradecer ao <strong>Blabos</strong> o convite e a <a href="http://blog.blabos.org/2009/02/boas-vindas/">introdução tão exagerada</a>&#8230; <img src='http://blog.blabos.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p style="text-align: justify;">Bom, mas eu estou aqui pra falar de perl, então vamos começar.</p>
<p style="text-align: justify;">Variáveis, como o nome diz, elas são usadas para armazenar valores variáveis. Em perl existem 3 tipos básicos de variáveis (preste atenção, eu disse <strong>básicos</strong>). Esses são:</p>
<ul style="text-align: justify;">
<li>Scalar</li>
<li>Array</li>
<li>Hash</li>
</ul>
<p style="text-align: justify;">Elas servem p/ armazenar valores. Cada um desses &#8220;tipos&#8221; são representados com um símbolo. Quando você se refere a um valor escalar, você deve usar o símbolo &#8220;<strong>$</strong>&#8220;, para array &#8220;<strong>@</strong>&#8221; e para hash &#8220;<strong>%</strong>&#8220;.</p>
<p style="text-align: justify;">Vamos ver isso na prática:</p>
<p><span id="more-259"></span></p>
<h2>Escalares</h2>
<p style="text-align: justify;">Para criar uma variável scalar chamada &#8220;<strong>var_scalar</strong>&#8220;, basta você usá-la:</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #0000ff;">$var_scalar</span><span style="color: #339933;">;</span></pre></div></div>

<p style="text-align: justify;">Bem simples, não?! Agora, e como eu ponho um valor dentro dessa variável? Ainda mais fácil:</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #0000ff;">$var_scalar</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span></pre></div></div>

<p style="text-align: justify;">Nada mais lógico, certo? Só de você usar essa variável, o perl já a cria p/ você&#8230; Legal né?! Então é assim que eu seto um valor numérico para uma variável scalar em perl, mas e se eu quiser usar uma string? Bom, p/ isso basta:</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #0000ff;">$var_scalar</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">&quot;String setada dentro da variável&quot;</span><span style="color: #339933;">;</span></pre></div></div>

<p style="text-align: justify;">Sim, você entendeu certo! Você não precisa dizer se vai ser número ou texto! Para o perl é &#8220;indiferente&#8221;!</p>
<p style="text-align: justify;">Isso tá muito fácil, né?! Vamos passar para o próximo caso, <strong>Array</strong>.</p>
<h2>Arrays</h2>
<p style="text-align: justify;">O símbolo para array é o &#8220;<strong>@</strong>&#8220;. Então como seria um nome válido para um array? Que tal esse?</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #0000ff;">@var_array</span><span style="color: #339933;">;</span></pre></div></div>

<p style="text-align: justify;">Isso! Mas o que exatamente é um array? Array &#8216;uma variável que contém uma lista de valores. Por exemplo:</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #0000ff;">@array_numerico</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">5</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #0000ff;">@array_de_strings</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;lalala&quot;</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;lelele&quot;</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;lilili&quot;</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;lololo&quot;</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;lululu&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #0000ff;">@array_misturado</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;lalala&quot;</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;lelele&quot;</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;lilili&quot;</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">4</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p style="text-align: justify;">Bom&#8230; Mas no caso do primeiro, o <strong>@array_numerico</strong>, se eu quisesse popular o array com os números de 1 a 100, eu teria que escrever os numeros de um a um? Não, existe forma mais fácil:</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #0000ff;">@array_numerico</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span> <span style="color: #339933;">...</span> <span style="color: #cc66cc;">100</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p style="text-align: justify;">Bem simples de entender, e bem menor que escrever os números de 1 a 100&#8230;</p>
<p style="text-align: justify;">Bom, já entendemos como setar um array inteiro de uma única vez&#8230; Mas e se eu quiser criar valor por valor?! É possível? Claro!</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #0000ff;">$meu_array</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">&quot;Posição 0...&quot;</span><span style="color: #339933;">;</span>
<span style="color: #0000ff;">$meu_array</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">&quot;Posição 1...&quot;</span><span style="color: #339933;">;</span>
<span style="color: #0000ff;">$meu_array</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">&quot;Posição 2...&quot;</span><span style="color: #339933;">;</span>
<span style="color: #0000ff;">$meu_array</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">3</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">&quot;Posição 3...&quot;</span><span style="color: #339933;">;</span>
<span style="color: #0000ff;">$meu_array</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">4</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">&quot;Posição 4...&quot;</span><span style="color: #339933;">;</span></pre></div></div>

<blockquote style="text-align: justify;"><p>Pera aí que eu agora me confundi!!! Você não disse que o símbolo do array era o &#8220;<strong>@</strong>&#8220;?! Porque vc tá usando &#8220;<strong>$</strong>&#8220;?!</p></blockquote>
<p style="text-align: justify;">Bem, os colchetes (&#8220;<strong>[]</strong>&#8220;) indicam que estamos procurando uma posição de um array, e dentro dessa posição nada mais temos que um valor escalar! Por isso usamos o &#8220;<strong>$</strong>&#8220;. Caso estivessemos usando mais de uma posição do array (uma lista de valores), usariamos o &#8220;<strong>@</strong>&#8220;.</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #0000ff;">@meu_array</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">4</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Posição 0...&quot;</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;Posição 2...&quot;</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;Posição 4...&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p style="text-align: justify;">Isso sim, agora estamos tratando de uma lista de valores, logo usamos o &#8220;<strong>@</strong>&#8220;&#8230;</p>
<h3>Array &#8211; Conjunto de Funções</h3>
<p style="text-align: justify;">Arrays em perl tem um conjunto de funções bem especificas pra eles, vamos ver algumas:</p>
<ul style="text-align: justify;">
<li>push</li>
<li>shift</li>
<li>pop</li>
<li>unshift</li>
<li>splice</li>
</ul>
<p style="text-align: justify;">Vamos do começo, o <strong>push</strong> inclui um (ou mais) valor(es) num array, por exemplo:</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #000066;">push</span> <span style="color: #0000ff;">@array_exemplo</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;posição 0&quot;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;"># agora o array contém &quot;posição 0&quot;.</span>
<span style="color: #000066;">push</span> <span style="color: #0000ff;">@array_exemplo</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">3</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;"># agora é (&quot;posição 0&quot;, 1, 2, 3)</span>
<span style="color: #000066;">push</span> <span style="color: #0000ff;">@array_exemplo</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;pos 4&quot;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;"># e agora (&quot;posição 0&quot;, 1, 2, 3, &quot;pos 4&quot;)</span></pre></div></div>

<p style="text-align: justify;">Entendeu?</p>
<p style="text-align: justify;">O <strong>shift</strong> remove e retorna o primeiro elemento do array, vamos ver como ele funciona:</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #000066;">shift</span> <span style="color: #0000ff;">@array_exemplo</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;"># o array agora tem (1, 2, 3, &quot;pos 4&quot;)</span>
<span style="color: #0000ff;">$meu_scalar</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span> <span style="color: #0000ff;">@array_exemplo</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;"># array:(2, 3, &quot;pos 4&quot;), scalar: 1</span>
<span style="color: #0000ff;">$meu_scalar</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span> <span style="color: #0000ff;">@array_exemplo</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;"># array:(3, &quot;pos 4&quot;), scalar: 2</span></pre></div></div>

<p style="text-align: justify;">Certo? O <strong>pop</strong> remove, e retorna o último elemento o array, e o <strong>unshift</strong> incui um ou mais elementos no inicio do array.</p>
<p style="text-align: justify;">A sintaxe do <strong>splice</strong> é a seginte:</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #000066;">splice</span> <span style="color: #0000ff;">@array</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$posicao</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$quantidade</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;lista&quot;</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;de&quot;</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;elementos&quot;</span><span style="color: #339933;">;</span></pre></div></div>

<p style="text-align: justify;">Bom, vamos ver alguns exemplos:</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #0000ff;">@array</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span> <span style="color: #339933;">...</span> <span style="color: #cc66cc;">10</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;"># (1 ,2, 3, 4, 5, 6, 7, 8, 9, 10)</span>
<span style="color: #000066;">splice</span> <span style="color: #0000ff;">@array</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">5</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">2</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;"># (1, 2, 3, 4, 5, 8, 9, 10)</span>
<span style="color: #666666; font-style: italic;"># Eu não passei uma lista p/ botar no lugar, então</span>
<span style="color: #666666; font-style: italic;"># ele foi na posição 5 do array (no valor 6) e subs-</span>
<span style="color: #666666; font-style: italic;"># tituiu os 2 elementos apartir daquela posição (5 e 6)</span>
<span style="color: #666666; font-style: italic;"># pelos elementos da lista (nada)</span>
<span style="color: #000066;">splice</span> <span style="color: #0000ff;">@array</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;lalala&quot;</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;lelele&quot;</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;"># (1, 2, &quot;lalala&quot;, &quot;lelele&quot;, 4, 5, 8, 9, 10)</span>
<span style="color: #666666; font-style: italic;"># ele foi na posição 2, e substituiu 1 elemento apartir</span>
<span style="color: #666666; font-style: italic;"># dessa posição pelos elementos da lista (&quot;lalala&quot;, &quot;lelele&quot;)</span>
<span style="color: #000066;">splice</span> <span style="color: #0000ff;">@array</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">6</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;teste&quot;</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;"># (1, 2, &quot;lalala&quot;, &quot;lelele&quot;, 4, 5, &quot;teste&quot;, 8, 9, 10)</span>
<span style="color: #666666; font-style: italic;"># vai na posição 6, subistitua nenhum elemento pela lista</span></pre></div></div>

<p style="text-align: justify;">Além dessas funções, os arrays tem algumas outras coisas interessantes&#8230;</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #0000ff;">@array</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span> <span style="color: #339933;">...</span> <span style="color: #cc66cc;">5</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000066;">print</span> <span style="color: #000066;">scalar</span> <span style="color: #0000ff;">@array</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;"># imprime 5</span>
<span style="color: #000066;">print</span> <span style="color: #0000ff;">$#array</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;"># imprime 4</span></pre></div></div>

<blockquote style="text-align: justify;"><p>Como assim?! <strong>scalar</strong>?! isso é uma variável?! mas tá sem o &#8220;<strong>$</strong>&#8220;!!! <strong>$#array</strong>?! o que significa isso?!</p></blockquote>
<p style="text-align: justify;">Calma&#8230; eu explico! Não, o <strong>scalar</strong> não é uma variável, o <strong>scalar</strong> muda o contexto da expressão p/ contexto scalar (como o nome diz&#8230;) e um array num contexto scalar retorna o numero de elementos desse. No caso, o array contendo 1 &#8230; 5 quer dizer que ele contem 5 elementos. E o <strong>$#array</strong>? Bom, todo array que você cria, cria essa &#8220;variável&#8221;. Se o nome do seu array é <strong>@array</strong>, a variável vai ser <strong>$#array</strong>, se o nome é <strong>@lista</strong>, vai ser <strong>$#lista</strong> e se for <strong>@estou_sem_criatividade_pra_inventar_nome_de_array</strong>, ela será <strong>$#estou_sem_criatividade_pra_inventar_nome_de_array</strong>. E o que isso faz? Isso retorna a última posição do array. Se um array tem 5 elementos, e os indices começam de 0, logo a última posição do array será 4.</p>
<h2>Hashs</h2>
<p style="text-align: justify;"><strong>Basta de array</strong>! Vamos ver os <strong>hashs</strong>. O símbolo p/ hash é o &#8220;<strong>%</strong>&#8220;. Hash é uma lista de valores, que diferente dos arrays não são indexados por números, mas sim por nomes, e não são ordenados.</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #0000ff;">%hash_exemplo</span><span style="color: #339933;">;</span>
<span style="color: #0000ff;">%meu_hash</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Janeiro&quot;</span> <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;Fevereiro&quot;</span> <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;Março&quot;</span> <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">3</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p style="text-align: justify;">O <strong>%meu_hash</strong> possui 3 posições, a posição &#8220;<strong>Janeiro</strong>&#8220;, a &#8220;<strong>Fevereiro</strong>&#8221; e a &#8220;<strong>Março</strong>&#8220;. A posição &#8220;<strong>Janeiro</strong>&#8221; contém o valor <strong>1</strong>, a &#8220;<strong>Fevereiro</strong>&#8221; contém <strong>2</strong> e a &#8220;<strong>Março</strong>&#8221; contém <strong>3</strong>.</p>
<p style="text-align: justify;">Se você quiser escrever posição por posição, você também pode:</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #0000ff;">$meu_hash</span><span style="color: #009900;">&#123;</span><span style="color: #ff0000;">&quot;Abril&quot;</span><span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">4</span><span style="color: #339933;">;</span>
<span style="color: #0000ff;">$meu_hash</span><span style="color: #009900;">&#123;</span><span style="color: #ff0000;">&quot;Maio&quot;</span><span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">5</span><span style="color: #339933;">;</span>
<span style="color: #0000ff;">$meu_hash</span><span style="color: #009900;">&#123;</span><span style="color: #ff0000;">&quot;Junho&quot;</span><span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">6</span><span style="color: #339933;">;</span>
<span style="color: #0000ff;">$meu_hash</span><span style="color: #009900;">&#123;</span><span style="color: #ff0000;">&quot;Julho&quot;</span><span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">7</span><span style="color: #339933;">;</span></pre></div></div>

<p style="text-align: justify;">As chaves (&#8220;<strong>{}</strong>&#8220;) indicam que é uma posição de hash, e o &#8220;<strong>$</strong>&#8221; indica que essa posição é um valor escalar.</p>
<h3>Hashs &#8211; Funções</h3>
<p style="text-align: justify;">Os Hashs também tem funções interessantes:</p>
<ul style="text-align: justify;">
<li>keys</li>
<li>values</li>
<li>delete</li>
</ul>
<p style="text-align: justify;">O <strong>keys</strong> retorna todas as chaves (nome de posições) do hash:</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #0000ff;">@chaves</span> <span style="color: #339933;">=</span> <span style="color: #000066;">keys</span> <span style="color: #0000ff;">%meu_hash</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;"># @chaves contem (&quot;Janeiro&quot;, &quot;Fevereiro&quot;,</span>
<span style="color: #666666; font-style: italic;"># &quot;Março&quot;, &quot;Abril&quot;, &quot;Maio&quot;, &quot;Junho&quot;, &quot;Julho&quot;)</span></pre></div></div>

<p style="text-align: justify;">O <strong>values</strong> retorna o valor de todas as posições:</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #0000ff;">@valores</span> <span style="color: #339933;">=</span> <span style="color: #000066;">values</span> <span style="color: #0000ff;">%meu_hash</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;"># @valores contém (1, 2, 3, 4, 5, 6, 7)</span></pre></div></div>

<p style="text-align: justify;">E o <strong>delete</strong> apaga uma posição do hash e retorna o valor daquela posição:</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #0000ff;">$maio</span> <span style="color: #339933;">=</span> <span style="color: #000066;">delete</span> <span style="color: #0000ff;">$meu_hash</span><span style="color: #009900;">&#123;</span><span style="color: #ff0000;">&quot;Maio&quot;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;"># o hash não tem mais  posição maio</span>
<span style="color: #666666; font-style: italic;"># e $maio contem 5.</span></pre></div></div>

<p style="text-align: justify;">Bom, é melhor eu ir parando por aqui&#8230; Acho que acabei me empolgando e isso ficou muito grande&#8230;</p>
<p style="text-align: justify;">Obrigado pela leitura. Se isso tiver muito fácil p/ você, talvez fosse interessante uma olhada no <a href="http://perl-e.org">perl-e.org</a>, onde o material é para os programadores avançados.</p>
<p style="text-align: justify;">Ficou interessado? quer saber mais?</p>
<ul style="text-align: justify;">
<li><a href="http://www.perl.org">The Perl Directory</a></li>
<li><a href="http://www.perl.org.br">Perl Brasil</a></li>
<li><a href="http://rio.pm.org">Monges Perl do Rio de Janeiro</a></li>
<li><a href="http://sao-paulo.pm.org/">Monges Perl de São Paulo</a></li>
</ul>
<p style="text-align: justify;">Mais uma vez <strong>Blabos</strong>, obrigado pelo espaço, e até a próxima!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.blabos.org/2009/02/o-que-isso-significa/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Boas Vindas</title>
		<link>http://blog.blabos.org/2009/02/boas-vindas/</link>
		<comments>http://blog.blabos.org/2009/02/boas-vindas/#comments</comments>
		<pubDate>Tue, 03 Feb 2009 10:43:40 +0000</pubDate>
		<dc:creator>blabos</dc:creator>
				<category><![CDATA[Perl]]></category>

		<guid isPermaLink="false">http://blog.blabos.org/?p=256</guid>
		<description><![CDATA[Pessoal, é com grande prazer que eu dou as boas vindas ao nosso mais novo editor: SmokeMachine, do perl-e.org. Ele é um dos grandes nomes do Perl no Brasil e agora estará aqui com a gente trazendo artigos e tirando dúvidas mais focadas aos iniciantes na linguagem Perl. Seja Bem Vindo, e muito sucesso!]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Pessoal, é com grande prazer que eu dou as boas vindas ao nosso mais novo editor: SmokeMachine, do <a href="http://perl-e.org">perl-e.org</a>.</p>
<p style="text-align: justify;">Ele é um dos grandes nomes do Perl no Brasil e agora estará aqui com a gente trazendo artigos e tirando dúvidas mais focadas aos iniciantes na linguagem Perl.</p>
<p style="text-align: justify;">Seja Bem Vindo, e muito sucesso!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.blabos.org/2009/02/boas-vindas/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Perl Dirty Job</title>
		<link>http://blog.blabos.org/2009/01/perl-dirty-job/</link>
		<comments>http://blog.blabos.org/2009/01/perl-dirty-job/#comments</comments>
		<pubDate>Fri, 16 Jan 2009 02:59:31 +0000</pubDate>
		<dc:creator>blabos</dc:creator>
				<category><![CDATA[Bla Bla Bla]]></category>
		<category><![CDATA[Perl]]></category>

		<guid isPermaLink="false">http://blog.blabos.org/?p=193</guid>
		<description><![CDATA[A piada não é minha, os trocadilhos que vem dela também não, mas vejam mais um exemplo da São Paulo Perl Mongers trabalhando pela cidade&#8230; Ok, ok, eu sei que foi um pouco forçada, mas como eu disse, a piada não é minha mesmo&#8230;]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">A piada não é minha, os trocadilhos que vem dela também não, mas vejam mais um exemplo da São Paulo Perl Mongers trabalhando pela cidade&#8230;</p>
<p><span id="more-193"></span></p>
<p style="text-align: center;"><a href="http://img.blabos.org/blog/posts/2009/01/dirty-job/dirty-job-01.jpg"><img src="http://img.blabos.org/blog/posts/2009/01/dirty-job/dirty-job-01.jpg" alt="Perl Dirty Job" width="250" border="2" hspace="5" vspace="5" /></a><a href="http://img.blabos.org/blog/posts/2009/01/dirty-job/dirty-job-02.jpg"><img src="http://img.blabos.org/blog/posts/2009/01/dirty-job/dirty-job-02.jpg" alt="Perl Dirty Job" width="250" border="2" hspace="5" vspace="5"  /></a></p>
<p style="text-align: justify;">Ok, ok, eu sei que foi um pouco forçada, mas como eu disse, a piada não é minha mesmo&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.blabos.org/2009/01/perl-dirty-job/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

