Logo Hardware.com.br
FlyMaker
FlyMaker Novo Membro Registrado
4 Mensagens 0 Curtidas

Ajuda em Script Perl

#1 Por FlyMaker 25/01/2014 - 01:10
E ai galera tudo bem?

Sou meio leigo em perl e to tentando entender um programa meio complexo aqui. Se alguém puder me ajudar agradeço muito.

To com dificuldade em saber quais os valores de $1 e $2

O programa lê em um arquivo as informações e comparar para dar o resultado.
Nesta parte o programa analisa a seguinte linha:
# SEC-Q04,sector--Q04,165000,35000,30,1:1

Segue as linhas:

if ($RED_ATTK_TACTIC==1){ $redchf++;
$tank_dead_limit=7; # default: matan 8 taques y no se gana el sector


seek GEO_OBJ, 0, 0;
while() {
# SEC-Q04,sector--Q04,165000,35000,30,1:1
if ($_ =~ m/[^,]+,$red_target,[^,]+,[^,]+,([^,]+),([01]):2/){ # sector atacado azul
if ($2==1 || $1>=$TTL_SUPPLYED) { # CON suministro
$tank_dead_limit=4; # matan 5 taques y no se gana el sector
}
last;
}
}


Vlw pessoal
Gokuro
Gokuro Veterano Registrado
704 Mensagens 76 Curtidas
#2 Por Gokuro
27/01/2014 - 21:51
Valor indefinido para $1 e $2 pois não sabemos o valor da variável $red_target (componente variável da expressão regular) e se seu valor for desprezado, ainda assim os valores de $1 e $2 serão indefinidos pois a sequência testada não termina com o dígito 2, conforme expressão regular.

Supondo $red_target é igual a sector--Q04 e que a sequência testada fosse:

# SEC-Q04,sector--Q04,165000,35000,30,1:2

então $1 é 30 e $2 é 1

[
]'s
FlyMaker
FlyMaker Novo Membro Registrado
4 Mensagens 0 Curtidas
#3 Por FlyMaker
28/01/2014 - 12:32
Deixa eu ver se entendi.

No caso então ele pega os valores que estão entre () e atribuem a estas variáveis? Eu queria conseguir entender qual o delimitador é usado para definir a variável.

O Exemplo ai é só uma pequena parte do programa. O programa é gigantesco.

Sobre o RedTarget achei o seguinte:

if ($_ =~ m/red_target=([-A-Za-z0-9]+)/) {$red_target=$1;}


Mas a explicação que você deu parece estar correta. Rodando o programa eu vejo que provavelmente os valores atribuídos a variável são estes que você falou.

Outra duvida minha é na comparação que eles faz em ($2==1 || $1>=$TTL_SUPPLYED). Eu não achei essa $ttl_supplyed em nenhum local, para uma comparação ela tem que ter um valor né?!

Obrigado pela resposta isso esta me ajudando muito
Gokuro
Gokuro Veterano Registrado
704 Mensagens 76 Curtidas
#4 Por Gokuro
28/01/2014 - 14:19
imGray">No caso então ele pega os valores que estão entre () e atribuem a estas variáveis? Eu queria conseguir entender qual o delimitador é usado para definir a variável.

Sim, as subexpressões entre ( ) são denominados "grupos de captura" e na expressão regular testada:

([^,]+) captura sequência de um ou mais caracteres que não sejam ","

([01]) captura sequência de único caractere dentre os caracteres do conjunto contendo "0" e "1"

Leia/consulte expressões regulares no Perl: http://perldoc.perl.org/perlre.html

if ($_ =~ m/red_target=([-A-Za-z0-9]+)/) {$red_target=$1;}
Confirmado: $red_target é sequência de um ou mais caracteres alfanuméricos e o "-", que segue a frase "red_target=" e assim sector--Q04 é um valor possível para $red_target .

Outra duvida minha é na comparação que eles faz em ($2==1 || $1>=$TTL_SUPPLYED). Eu não achei essa $ttl_supplyed em nenhum local, para uma comparação ela tem que ter um valor né?!

Para a comparação ter sentido lógico: sim.

Sugestão Perl Debug: http://perldoc.perl.org/perldebug.html

[
]'s
© 1999-2025 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal