Subrotinas
Apresentação
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