[Cascavel-pm] Escopo: Dúvida
Fabiano
fabiano em cascavel.pm.org
Domingo Janeiro 5 19:55:08 CST 2003
On Sun, 5 Jan 2003 21:24:50 -0200, Ednardo Lobo wrote
> Em perl o escopo de uma variável, é sempre o bloco em que a mesma
> foi declarada, por exemplo:
>
> ------------------------------------------------------------
> use strict;
>
> {
> my $a = 10
> my $f = 0;
>
> while (not $f) {
> my $a = 20;
>
> $f = 1;
>
> print $a # imprime 20
> }
>
> print $a # imprime 10
> print $f # imprime 1
> }
>
> print $f; # com 'use strict', variável indefinida
> ------------------------------------------------------------
>
> Minha dúvida: File Handles, também possuem escopo?
>
> Por exemplo:
>
> ------------------------------------------------------------
> use strict;
>
> open FH,">>/etc/passwd";
>
> my ($login,$password) = &get();
>
> ...
>
> print FH "$login:$password:$UID:$GID::$HOME:$SHELL\n"
>
> close FH;
>
> #
> ## Obtem `login' e `password'
> #
> sub get {
> open FH,"/var/tmp/user.tmp";
>
> my ($login,$passwd) = split / /,<FH>;
>
> close FH;
>
> return($login,$password);
> }
> ------------------------------------------------------------
>
> O que acontecerá com `FH' após `&get' ter sido executada?
>
>
> --
> Ednardo Lobo - www.elobo.cjb.net
>
> --
"...(A referência pode ser uma referência simbólica ao nome do handle de
arquivos ou uma referência fixa a qualquer objeto que possa ser interpretado
como um handle de arquivos. Isso é chamado de handle de arquivos indireto, e
qualquer função que use um HANDLEARQUIVOS como seu primeiro argumento pode
tratar de handles de arquivos diretos e indiretos...
...
{
my $fh; # (não inicializado)
open($fh, ">arqlog") # $fh é autovivificado
or die "Impossível criar arqlog: $!;
... # faz algo com $fh
} # $fh fechado aqui
A declaração my $fh pode ser inforporada de modo confiável ao open:
open my $fh, ">arqlog" or die...
" (O'REILLY, Pragramming Perl 3ª Ed., pag. 761)
Ola', Ednardo
Espero que este pequeno paragrafo que retirei do livro citado acima tenha
ajudado.
Exemplo:
------------------------------------------------------------
use strict;
open my $FH,">>/etc/passwd";
my ($login,$password) = &get();
...
print $FH "$login:$password:$UID:$GID::$HOME:$SHELL\n"
close $FH;
#
## Obtem `login' e `password'
#
sub get {
open my $FH,"/var/tmp/user.tmp";
my ($login,$passwd) = split / /,<$FH>;
close $FH;
return($login,$password);
}
[]'s
--Fabiano Reese Righetti (fabiano em cascavel.pm.org)
Mais detalhes sobre a lista de discussão Cascavel-pm