[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