[SP-pm] Dúvida
Wendel Scardua
wendelscardua at gmail.com
Thu Aug 7 14:38:57 PDT 2008
my($dna, $a, $c, $g, $t, $length, $ver);
opções:
$dna = $_[0]; # o primeiro/zeroésimo elemento de @_
ou
($dna) = @_;
ou
$dna = shift @_; # que arranca e devolve o primeiro cara de @_;
ou
$dna = shift; # que usa o array sub-entendido @_ ; ( "sublinhado" ,
"sub-entendido" ...)
etc...
$dna = @_; tá errado porque $dna é um "escalar". Atribuir @_ a ele
pede o valor escalar de @_. E o valor escalar de uma lista não é o
primeiro cara dela, mas sim o tamanho dela (então $dna == 1 )
[]s
Wendel
2008/8/7 Alexandre Tashima <aktashi em hotmail.com>:
> Pessoal,
>
> Estou com uma nova dúvida. Escrevi um programinha de exercício do livro
> "Beginning Perl for Bioinformatics", mas ele está com algum erro que eu
> estou quebrando a cabeça e não consigo achar. É um programa para contar a
> frequência de cada uma das bases em uma sequência de DNA. Sem subrotina ele
> funciona, mas agora eu criei uma subrotina e um programa principal e ele não
> está passando a variável corretamente. O código é o seguinte:
>
> #!usr\bin\perl -w
> #
> # Este programa calcula a % de cada nucleotideo em
> # uma sequencia de DNA
>
> use strict;
> use warnings;
>
> # Entrada da sequencia de DNA
> print "Entre com a sequencia de DNA:\n";
> my($dna);
> $dna = 'ACGTACGTACGT';
>
> print $dna, "\n";
>
> exercise($dna);
>
> exit;
>
> sub exercise {
>
> use strict;
> use warnings;
>
> my($dna, $a, $c, $g, $t, $length, $ver);
>
> $dna = @_;
>
> print "DNA = $dna\n";
>
> # Teste de pausa do programa
> $ver = <STDIN>;
>
> # Contagem da frequencia de cada nucleotideo
> $a = ($dna =~ tr/Aa//);
> $c = ($dna =~ tr/Cc//);
> $g = ($dna =~ tr/Gg//);
> $t = ($dna =~ tr/Tt//);
>
> # Calculo do tamanho do fragmento de DNA
> $length = length($dna);
>
> # Calculo da porcentagem de cada residuo
> $a = int(100*$a/$length);
> $c = int(100*$c/$length);
> $g = int(100*$g/$length);
> $t = int(100*$t/$length);
>
> print "A = $a %\n";
> print "C = $c %\n";
> print "G = $g %\n";
> print "T = $t %\n";
> print "DNA = $length\n";
>
> return $dna;
>
> }
>
> Ah, e estou usando o ConTEXT ao invés do notepad. É muito melhor.
>
> Abraços,
> Alexandre
>
>
More information about the SaoPaulo-pm
mailing list