Ir para conteúdo
Fórum Script Brasil
  • 0

Problema com o laço while


Carlos Rodrigues

Pergunta

Estou aprendendo perl e fiz uma espécie de programa que abre arquivos, eu coloquei num laço while para que o diretório pudesse sempre ser escrito e pensei que em quando se digitasse 'sair' o laço parava. Porém não está dando certo. Aqui o código:

#!/usr/bin/perl

sub abrir{

my ($x) = @_;

open(INFO, $x);

@arquivo = <INFO>;

close(INFO);

print @arquivo

}

$c = 1;

while($c == 1){

print ':';

$a = <STDIN>;

if($a == 'sair'){

$c = 2;

}

else{

abrir($a);

}

}

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Bom vamos lá, primeiro para comparar strings não usamos o operador "==".

Relational Operators

Binary "<" returns true if the left argument is numerically less than the right argument.

Binary ">" returns true if the left argument is numerically greater than the right argument.

Binary "<=" returns true if the left argument is numerically less than or equal to the right argument.

Binary ">=" returns true if the left argument is numerically greater than or equal to the right argument.

Binary "lt" returns true if the left argument is stringwise less than the right argument.

Binary "gt" returns true if the left argument is stringwise greater than the right argument.

Binary "le" returns true if the left argument is stringwise less than or equal to the right argument.

Binary "ge" returns true if the left argument is stringwise greater than or equal to the right argument.

Depois, após a pessoa digitar "sair", terá um "\n" nova linha na string. Então $c eq "sair" nunca será verdadeiro.

Para isso você precisará usar a função chomp() que retira o "\n" do final da string.

Aqui segue um programa que eu escrevi rápido sem testar,

#!/usr/bin/perl

use strict;
use warnings;

sub abrir {
    my $x = shift;
    open my $fh, '>', $x or die $!;
    while ( my $line = <$fh> ) {
        print $line;
    }
    return 1;
}

{
    while (1) {
        chomp(my $a = <STDIN>);

        if ( $a eq 'sair' ) {
            print "Você está saindo do programa";
            last;
        }
        else {
            if ( -e $a ) {
                print "Você está abrindo o arquivo: $a";
                abrir($a);
            }
            else {
                print "O arquivo: $a não existe\n";
            }
        }
    }
}

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,2k
×
×
  • Criar Novo...