<div>Breno muito obrigado pela resposta, é que como já programo em PHP, achei que podia pular alguns materiais basicos, ;-), Mas to vendo que Perl tem algumas particularidades.</div>
<div> </div>
<div>Só para deixar claro, não sou programador, sou administrador de redes, uso liguagens só para criar scipts e alguns sistemas simples. Nada profissional.</div>
<div> </div>
<div>Mas vou reler essa sua mensagem com calma, e vou reler o material introdutorio.</div>
<div> </div>
<div>Quanto mais a gente estuda mais a gente tem duvidas, entao me aguardem, rsrsrs</div>
<div> </div>
<div>Abraço <br><br> </div>
<div><span class="gmail_quote">Em 09/04/09, <b class="gmail_sendername">breno</b> <<a href="mailto:breno@rio.pm.org">breno@rio.pm.org</a>> escreveu:</span>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">Oi Pedro, bem vindo!<br><br>Recomendo vivamente que vc siga a recomendação do Daniel e aprenda um<br>pouco mais sobre o básico da linguagem com a excelente documentação do<br>
Perl.<br><br>Sobre suas dúvidas, bom, como vc deve ter percebido pela resposta do<br>Otávio, em Perl existe sempre mais de uma maneira de se fazer as<br>coisas! A grande questão é que, enquanto uma ou outra forma são<br>simples diferenças de "sotaque", outras são realmente mais<br>
recomendadas, por diversos motivos.<br><br>A primeira coisa que vc deveria se acostumar a fazer é formular<br>perguntas que nos ajudem a te ajudar. Por exemplo, vc disse:<br><br>"to tentando criar um script que leia um arquivo PHP que tenho no servidor"<br>
<br>, e isso levou o Otávio a crer que o arquivo era local, e não remoto.<br>Depois, vc disse:<br><br>"Porem o codigo nao exibe o conteudo do arquivo PHP"<br><br>, nesse ponto o melhor a fazer é dizer algo como: "estava esperando X<br>
e aconteceu Y". Dizer "não funcionou" não nos diz muita coisa =)<br><br>Por exemplo, se você ativa o pragma strict ("use strict"), então todas<br>as suas variáveis precisam ser pré-declaradas! Como? Colocando "my" na<br>
frente delas antes de usá-las pela primeira vez (e lá se foi uma das<br>suas dúvidas, espero! :)<br><br>Aí seguem duas dicas importantes:<br><br>1) Seus programas devem *sempre* começar com:<br>use strict;<br>use warnings;<br>
<br>exatamente como o Otávio respondeu. (alguns desenvolvedores gostam de<br>tirar o "warnings" qdo o sistema entra em produção, mas não faça isso<br>:-)<br><br>2) Pra vc que está começando, o Perl oferece um outro pragma muito<br>
interessante, e recomendo que use:<br>use diagnostics;<br><br>coloque esse pragma logo abaixo do "use warnings", e o Perl te dará<br>dicas sobre o que ele acha que está acontecendo e como solucionar o<br>problema. Por exemplo, rodando o seu programa com esses três pragmas<br>
ativos, obtemos a saida:<br><br>-----------------------------8<-----------------------------<br>Global symbol "$file" requires explicit package name at pedro.pl line 6.<br>Global symbol "$file" requires explicit package name at pedro.pl line 7.<br>
Global symbol "@lines" requires explicit package name pedro ex.pl line 8.<br>Global symbol "@lines" requires explicit package name at pedro.pl line 11.<br>Execution of pedro.pl aborted due to compilation errors (#1)<br>
(F) You've said "use strict" or "use strict vars", which indicates<br> that all variables must either be lexically scoped (using "my" or "state"),<br> declared beforehand using "our", or explicitly qualified to say<br>
which package the global variable is in (using "::").<br><br>Uncaught exception from user code:<br> Global symbol "$file" requires explicit package name at pedro.pl line 6.<br>Global symbol "$file" requires explicit package name at pedro.pl line 7.<br>
Global symbol "@lines" requires explicit package name at pedro.pl line 8.<br>Global symbol "@lines" requires explicit package name at pedro.pl line 11.<br>Execution of pedro.pl aborted due to compilation errors.<br>
at ex.pl line 11<br>----------------------------->8-----------------------------<br><br>Viu a dica ali no meio? Pois é :-)<br><br><br>Outra coisa que você reparou foi que o Otávio usou o comando "open"<br>com 3 argumentos, em vez de dois. Essa é a forma recomendada de usar o<br>
open, pois nela vc diz explicitamente qual o modo de abertura<br>(leitura, escrita, etc), e evita código potencialmente inseguro. Isso<br>porque, usando o open com dois argumentos apenas, você não consegue<br>forçar o modo desejado. Afinal, o open aceita nessa forma que você<br>
especifique o modo DENTRO da variável, como $file =<br>'>meu_arquivo.txt'. Se alguém conseguir editar o conteúdo da variável,<br>pode causar muitos problemas!<br><br>Mas ele fez mais do que isso... se vc reparar, ele usou como handle de<br>
arquivo uma variável, e não uma palavra em maiúsculas (bareword). Esse<br>é o procedimento recomendado também, especialmente pq barewords são<br>globais do pacote (em vez de léxicas, como as variáveis declaradas com<br>"my") e podem causar muitos problemas inesperados (especialmente se vc<br>
acidentalmente usar a mesma bareword para abrir diferentes arquivos).<br><br>Para mais informações: perldoc -f open<br><br>Outra coisa que ele fez foi usar operadores "quote-like" em vez dos<br>quotes em si. Em Perl, você pode especificar um bloco entre aspas<br>
simples como q{}, entre aspas duplas como qq{}. Isso é particularmente<br>útil para evitar precisar escapar caracteres especiais. Por exemplo,<br>suponha que vc queira armazenar em $var o conteúdo:<br><br> %_@'''0283',z''''''..'.'<br>
<br>Você teria que fazer algo como:<br><br>my $var = '%_@\'\'\'0283\',z\'\'\'\'\'\'..\'.\'';<br><br>o que é no mínimo confuso. Que tal assim:<br><br>my $var = q{%_@'''0283',z''''''..'.'};<br>
<br>Bem mais fácil, né? O perl faz o que vc quer e não deixa os "pliques"<br>internos interferirem no seu comando :-)<br><br>Usar q{} e qq{} é especialmente útil ao fazer one-liners, evitando que<br>os quotes sejam interpolados pela shell. Dentro do código, a menos que<br>
você tenha um bom motivo como o acima, é só uma questão de preferência<br>mesmo - então fazer '>' ou q{>} não importa. Existe um outro operador,<br>o qw(), que separa elementos de listas, de modo que em vez de vc<br>
escrever assim:<br><br> my @herculoids = ( 'igoo', 'tundro', 'zok', 'gloop', 'gleep' );<br><br>pode escrever assim:<br><br> my @herculoids = qw( igoo tundro zok gloop gleep );<br>
<br>que costuma ser muito mais fácil de escrever, e de ler.<br><br>Outra coisa que ele fez diferente foi ler o arquivo uma linha por vez,<br>que é mais eficiente do que ler tudo de uma vez pra dentro de um<br>array, e é o procedimento recomendado - especialmente para arquivos<br>
grandes. Ele usou a variável de contexto $_, mas vamos deixar isso pra<br>depois que você tiver se acostumado com o Perl :-)<br><br>Finalmente, como nota pessoal, em Perl a maioria dos parêntesis são<br>opcionais e devem ser usados apenas para evitar ambiguidade. Assim, em<br>
vez de fazer:<br><br> open (my $FH, '<', $filename) or die $!;<br> ...<br> print ($linha);<br> ...<br> close($FH);<br><br>você pode fazer:<br><br> open my $FH, '<', $filename or die $!;<br> ...<br>
print $linha;<br> ...<br> close $FH;<br><br>No caso do open, muita gente (inclusive eu) gosta de colocar o "or" na<br>linha de baixo, com uma leve identação. Assim:<br><br> open my $FH, '<', $filename<br>
or die "erro abrindo arquivo: $!\n";<br><br>Ou você pode usar o pragma "autodie", mas isso também é outra história :-)<br><br><br>Enfim, já me alonguei muito. A moral da história é:<br><br>Experimente as coisas do jeito que o Otávio disse (otavio++)<br>
<br>Leia a documentação indicada pelo Daniel (mantovani++)<br><br><br>E qq coisa, é só perguntar!<br><br>[]s<br><br>-b<br><br>2009/4/8 Pedro César <<a href="mailto:pedrocesar@tecdom.com.br">pedrocesar@tecdom.com.br</a>>:<br>
> Puxa, e eu tava achando massa meu código, rsrsrs, é um de meus primeiros.<br>><br>> Vê só, já que você me deu a "brecha" vou pedir duas coisas, a primeira é<br>> comentar o código que você me fez, basicamente não entendi por exemplo o<br>
> "my" na frente do $file e o q{<} no open.<br>><br>> A segunda é que gostaria que me mostrasse como usar o modulo sugerido, pois<br>> o acesso é remoto mesmo, se puder fazer o código e comentar, me ajuda muito.<br>
><br>> Muitíssimo obrigado desde ja.<br>><br>> 2009/4/8 Otávio Fernandes <<a href="mailto:otaviof@gmail.com">otaviof@gmail.com</a>><br>>><br>>> Olá Pedro,<br>>><br>>> Estou vendo, realmente, que você está começando com Perl. Bom,<br>
>> primeira coisa, você está passando uma URI para acessar o arquivo...<br>>> acredito que você está rodando o script no mesmo servidor onde este<br>>> arquivo se encontra, então, você tem que passar path para acessar<br>
>> diretamente, exemplo: "my $file = q{/var/tmp/arquivo.php};". O script<br>>> ficaria assim (com algumas melhorias):<br>>><br>>> #!/usr/bin/env perl<br>>><br>>> use strict;<br>
>> use warnings;<br>>><br>>> my $file = q{/var/tmp/arquivo.php};<br>>><br>>> open( my $FH, q{<}, $file ) or die $!;<br>>> while( <$FH> ) {<br>>> print;<br>>> }<br>
>> close( $FH );<br>>><br>>> __END__<br>>><br>>> Caso você queria acessar este arquivo remoto, via protocolo HTTP, você<br>>> pode usar o módulo LWP (por exemplo).<br>>><br>>> Dúvidas? Pergunta ai.<br>
>><br>>> um abraço,<br>>><br>>> --<br>>> Otávio Fernandes <otaviof at <a href="http://gmail.com">gmail.com</a>><br>>> <a href="http://otaviof.blogspot.com/">http://otaviof.blogspot.com/</a><br>
>> _______________________________________________<br>>> Cascavel-pm mailing list<br>>> <a href="mailto:Cascavel-pm@pm.org">Cascavel-pm@pm.org</a><br>>> <a href="http://mail.pm.org/mailman/listinfo/cascavel-pm">http://mail.pm.org/mailman/listinfo/cascavel-pm</a><br>
><br>><br>><br>> --<br>> Pedro César<br>> Analista de Suporte<br>> Microsoft Certified Professional - MCP<br>> Blog: <a href="http://www.tecdom.com.br/blog">www.tecdom.com.br/blog</a><br>> Fone: 82-9317-8802<br>
> msn: <a href="mailto:pedrocesar@tecdom.com.br">pedrocesar@tecdom.com.br</a><br>> Registered Linux User #282860<br>><br>><br>> "Autoridades são alguns,<br>> e só por algun tempo.<br>> Enquanto cidadãos somos todos nós,<br>
> e durante toda a vida".<br>> Prof. Hugo de Britto Machado<br>><br>><br>><br>> _______________________________________________<br>> Cascavel-pm mailing list<br>> <a href="mailto:Cascavel-pm@pm.org">Cascavel-pm@pm.org</a><br>
> <a href="http://mail.pm.org/mailman/listinfo/cascavel-pm">http://mail.pm.org/mailman/listinfo/cascavel-pm</a><br>><br>_______________________________________________<br>Cascavel-pm mailing list<br><a href="mailto:Cascavel-pm@pm.org">Cascavel-pm@pm.org</a><br>
<a href="http://mail.pm.org/mailman/listinfo/cascavel-pm">http://mail.pm.org/mailman/listinfo/cascavel-pm</a><br></blockquote></div><br><br clear="all"><br>-- <br>Pedro César<br>Analista de Suporte<br>Microsoft Certified Professional - MCP<br>
Blog: <a href="http://www.tecdom.com.br/blog">www.tecdom.com.br/blog</a><br>Fone: 82-9317-8802<br>msn: <a href="mailto:pedrocesar@tecdom.com.br">pedrocesar@tecdom.com.br</a> <br>Registered Linux User #282860<br><br><br>"Autoridades são alguns, <br>
e só por algun tempo.<br>Enquanto cidadãos somos todos nós,<br>e durante toda a vida".<br>Prof. Hugo de Britto Machado<br><br>