Subrotinas

Apresentação

aula09.pdf

Exemplos

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#exemplo01
# Descobrir a funcao da subrotina abaixo
# A funcao rand(EXPR) retorna um numero real entre 0 e o valor de EXPR
# A funcao int(EXPR) retorna a parte inteira do valor real EXPR (nao arredonda)

sub exemplo01 {
    for ($i = 0; $i < 40; $i++) {
        $base = int(rand(4));
        if ($base == 0) { 
            print "A"; 
            next;
        }
        if ($base == 1) {
            print "T";
            next;
        }
        if ($base == 2) {
            print "C";
            next;
        }
        if ($base == 3) {
            print "G";
            next;
        }
    }
    print "\n"; 
}

========

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#exemplo02
#!/usr/bin/perl/

seqAleatoria(200);
exit;

sub seqAleatoria {
    $tamanho = shift || 40;
    for ($i = 0; $i < $tamanho; $i++) {
        unless ($i%70) { print "\n" };
        $base = int(rand(4));
        if ($base == 0) { print "A"; next; }
        if ($base == 1) { print "T"; next; }
        if ($base == 2) { print "C"; next; }
        if ($base == 3) { print "G"; next; }
    }
    print "\n"; 
}

========

1
2
3
4
5
6
7
8
9
10
11
#exemplo03
#!/usr/bin/perl/

soma(12, 20);
exit;

sub soma {
    ($n1, $n2) = @_;
    $res = $n1 + $n2;
    print $res;
}

========

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#exemplo04
#!/usr/bin/perl/

# corpo do script

# gerar sequencia aleatoria com a subrotina seqAleatoria
$tamanho = 200;
$sequencia = seqAleatoria($tamanho);

# inverter a sequencia
$revSeq = reverse($sequencia);

# gerar o complemento reverso
$revSeq =~ tr/ATCG/atcg/;

# imprimir (fasta)
print "\>seq\n";
for ($i = 0; $i < $tamanho; $i+=70) { 
    print substr($revSeq,$i,70), "\n"; 
}

exit;

sub seqAleatoria {
    # alterar a subrotina para retornar a sequencia gerada
}

========

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#exemplo05
#!/usr/bin/perl/

# $valor como variavel global

$valor = 0;
print "Antes da subrotina, valor \= $valor.\n";

soma(12, 20);

print "Antes da subrotina, valor \= $valor.\n";
exit;

sub soma {
    ($n1, $n2) = @_;
    $valor = $n1 + $n2;
}

========

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#exemplo06
#!/usr/bin/perl/

## --------------------------------------------------------------------- ##
##                                                                       ##
##  SCRIPT: seqAleatoria.pl                                 04.11.2016   ##
##                                                                       ##
##  DESCRIPTION: script para exemplificar subrotinas                     ##
##                                                                       ##
##  USAGE: perl seqAleatoria.pl                                          ##
##                                                                       ##
##  AUTHOR: Tatiana Torres    tttorres at ib.usp.br                      ##
##                                                                       ##
## --------------------------------------------------------------------- ##

use strict; 

## Declaracao de variaveis

my $tamanho;
my $sequencia;
my $revSeq;

## MAIN ##

# criar a sequencia aleatoria
$tamanho = 200;
$sequencia = seqAleatoria($tamanho);

# inverter a sequencia
$revSeq = reverse($sequencia);

# gerar o complemento reverso
$revSeq =~ tr/ATCG/atcg/;

# imprimir (fasta)
print "\>seq\n";
for (my $i = 0; $i < $tamanho; $i+=70) { print substr($revSeq,$i,70), "\n"; }

exit;


## SUBROTINAS ##

## subrotina para gerar sequencias aleatorias de nucleotideos
## argumento: tamanho da sequencia (numero de nucleotideos) 
## retorna: string com uma sequencia aleatoria

sub seqAleatoria {
    my $seq = "";
    my $tamanho = shift || 40;                 # default: $tamanho = 40
    for (my $i = 0; $i < $tamanho; $i++) {
        my $base = int(rand(4));
        if ($base == 0) { $seq .= "A"; next; }
        if ($base == 1) { $seq .= "T"; next; }
        if ($base == 2) { $seq .= "C"; next; }
        if ($base == 3) { $seq .= "G"; next; }
    }
    return $seq; 
}

========

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#exemplo07
#!/usr/bin/perl/

## script para testar subrotinas

use strict;

# declaracao e inicializacao de variaveis
my $sequencia;
my @nome = ("EcoRI", "HaeII", "HindIII"); 
my @sitio = ("GAATTC", "GGCC", "AAGCTT"); 

## MAIN ##

$sequencia = restricao($#nome, @nome, $#sitio, @sitio);
exit;

## SUBROTINAS ##

sub restricao {
    my @nome;
    my @sitio;

    my $lastindex = shift;
    for (my $i = 0; $i <= $lastindex; $i++) {
        $nome[$i] = shift;
    }
    $lastindex = shift;
    for (my $i = 0; $i <= $lastindex; $i++) {
        $sitio[$i] = shift; 
    }
    # bloco de comandos para usar os arrays
    print "@nome\n";
    print "@sitio\n";
}

========

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#exemplo08
#!/usr/bin/perl/

## script para testar subrotinas

use strict;

# declaracao e inicializacao de variaveis
my $sequencia;
my @nome = ("EcoRI", "HaeII", "HindIII"); 
my @sitio = ("GAATTC", "GGCC", "AAGCTT"); 

## MAIN ##

$sequencia = restricao(\@nome, \@sitio);
exit;

## SUBROTINAS ##

sub restricao {
    my ($ref1, $ref2) = @_;
    my @a1 = @{$ref1};
    my @a2 = @{$ref2};

# bloco de comandos para usar os arrays
    print "@nome\n";
    print "@sitio\n";
}

========

Exercício

Exercício para entrega via e-mail. O exercício deverá ser entregue como um script completo, em um arquivo .pl, com o nome NomeSobrenomeE08.pl (substituir NomeSobrenome pelo próprio nome, por exemplo, TatianaTorresE08.pl). Prazo: 26/11/2018

1.Ler sequências (e qualidades) no formato FASTA e armazenar em dois hashes: %seq e %qual (subrotina numero 1)

2.Buscar UM sítio de enzima de restrição indicado pelo usuário em todas as sequências (subrotina numero 2). Armazenar o nome das sequências que possuem o sitio de reconhecimento e sua posição na sequências.

3.Para as sequências COM o sítio indicado, converter sequências e qualidades no formato FASTA (amazenadas nos hashs %seq e %qual) para formato FASTQ (subrotina numero 3). Gerar um novo arquivo de saída, indicando a posição do sítio na DESCRIÇÃO da sequência. Não deixem de aproveitar o trabalho que foi feito no exercício 6.

ENTRADA: arquivoSequencias.fasta e arquivoQualidades.fasta
SAIDA: arquivoSequenciasComSitio.fastq