• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

bytemania

Dúvidas de perl

3 mensagens neste tópico

Alguem me explica o q esta errado aqui? penso que seja a passagem da regexp como parametro

#!/usr/bin/perl

use strict;
use warnings;


sub bisplit {
if(length($_)==2){
	my @lista = split($_[0],$_[1]);

	print (join(":",@lista)),"\n";
}
}

bisplit(/\,/,"12,13,14,15,16");

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

mmmm...

tás a confundir o array @_ com o escalar $_

O array @_ contem os escalares $_[0],$_[1], $_[2] ...

mas não é o mesmo que o escalar especial $_

lê o perlintro para mais detalhes, valem a pena os minutos investidos.

http://perldoc.perl.org/perlintro.html#Perl-variable-types

Assim olhando para esse código acho que queres pôr antes @_ onde tens $_ na primeia vez que aparece.

Mas le o perlintro, para perceberes melhor, a sintaxe do perl é diferente de por exemplo o php no que toca as variáveis.

Não sei se esse código tem mais bugs, mas vamos um de cada vez.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
penso que seja a passagem da regexp como parametro

O que estás a passar como parâmtero é (devia ser) um separador (,) e não uma expressão regular.

Ficam dois exemplos:

#!/usr/bin/perl 
use strict;
use warnings;

my $str = q|12,13,14,15,16|;

print bisplit_0($str), qq|\n|, bisplit_1( ',', $str ), qq|\n|;

sub bisplit_0 {
    my $string = shift;
    $string =~ s/,/:/gmx;
    return $string;
}

sub bisplit_1 {
    return join ':', split shift, shift;
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora