Chapter 28 Control structure
…. Perl is an iterative language in which control flows from the first statement in the program to the last statement unless something interrupts. Some of the things that can interrupt this linear flow are conditional branches and loop structures. Perl offers approximately a dozen such constructs, which are described below. The basic form will be shown for each followed by a partial example. ….
28.1 for
loop
my @gene_expr = (2,6,8, 9);
# This is an example of for loop
for(my $i=0; $i<@gene_expr; ++$i){
my $tem_var= $gene_expr[$i]/2;
print "At $i place, the number devided by 2 equals: $tem_var\n";
}
## At 0 place, the number devided by 2 equals: 1
## At 1 place, the number devided by 2 equals: 3
## At 2 place, the number devided by 2 equals: 4
## At 3 place, the number devided by 2 equals: 4.5
28.2 foreach
loop
my @gene_expr = (2,6,8, 9);
my $j = 0;
foreach(@gene_expr){
my $tem_var= $gene_expr[$j]/2;
print "At $j place, the number devided by 2 equals: $tem_var\n";
#$j = $j +1
$j;
++ }
## At 0 place, the number devided by 2 equals: 1
## At 1 place, the number devided by 2 equals: 3
## At 2 place, the number devided by 2 equals: 4
## At 3 place, the number devided by 2 equals: 4.5
28.3 while
loop
my @gene_expr = (2,6,8, 9);
my $k = 0;
while($k<@gene_expr){
my $tem_var= $gene_expr[$k]/2;
print "At $k place, the number devided by 2 equals: $tem_var\n";
$k;
++ }
## At 0 place, the number devided by 2 equals: 1
## At 1 place, the number devided by 2 equals: 3
## At 2 place, the number devided by 2 equals: 4
## At 3 place, the number devided by 2 equals: 4.5
28.4 Statement if-else
#!/usr/bin/perl
use warnings;
use strict;
my @gene_exp_lev = (1, 5, 3, 4, 9, 10);
# for (my $i = 0; $i < @gene_exp_lev; $i++) {
for (my $i = 0; $i < scalar @gene_exp_lev; $i++) {
if ($gene_exp_lev[$i] > 4) {
print "Index $i: $gene_exp_lev[$i]\n";
} }
Index 1: 5
Index 4: 9
Index 5: 10
28.5 Operator last
and next
28.6 Operator redo
Before we use redo
, first let’s see what is BLOCK
in Perl. In Perl, a BLOCK
by itself (labeled or not) is semantically equivalent to a loop that executes once. Thus you can use any of the loop control statements in it to leave or restart the block.
The redo command restarts the loop block without evaluating the conditional again.
Let’s say we have some postitions on the genome where a few
my @read_depth = (8, 9, 10, 7, 10, 7, 7);