Jump to content
Fórum Script Brasil
  • 0

Problema com o laço while


Carlos Rodrigues

Question

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 to comment
Share on other sites

1 answer to this question

Recommended Posts

  • 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.1k
    • Total Posts
      651.8k
×
×
  • Create New...