IT-SC 66
You can get the length of an array: bases = A, C, G, T;
print Heres the length of the array: ; print scalar bases, \n;
which produces the output: Heres the length of the array: 4
Heres how to insert an element at an arbitrary place in an array using the Perl splice
function: bases = A, C, G, T;
splice bases, 2, 0, X; print Heres the array with an element inserted after the
2nd element: ; print bases\n;
which produces the output: Heres the array with an element inserted after the 2nd
element: A C X G T
4.10 Scalar and List Context
Many Perl operations behave differently depending on the context in which they are used. Perl has scalar context and list context; both are listed in
Example 4-8 .
Example 4-8. Scalar context and list context
usrbinperl -w Demonstration of scalar context and list context
bases = A, C, G, T; print bases\n;
a = bases; print a, \n;
a = bases; print a, \n;
exit;
Heres the output of Example 4-8
: A C G T
IT-SC 67
4 A
First, Example 4-8
declares an array of the four bases. Then the assignment statement tries to assign an array which is a kind of list to a scalar variable
a :
a = bases; In this kind of scalar context , an array evaluates to the size of the array, that is, the
number of elements in the array. The scalar context is supplied by the scalar variable on the left side of the statement.
Next, Example 4-8
tries to assign an array to repeat, a kind of list to another list, in this case, having just one variable,
a :
a = bases; In this kind of list context , an array evaluates to a list of its elements. The list context is
supplied by the list in parentheses on the left side of the statement. If there arent enough variables on the left side to assign to, only part of the array gets assigned to variables.
This behavior of Perl pops up in many situations; by design, many features of Perl behave differently depending on whether they are in scalar or list context. See
Appendix B for
more about scalar and list content. Now youve seen the use of strings and arrays to hold sequence and file data, and learned
the basic syntax of Perl, including variables, assignment, printing, and reading files. Youve transcribed DNA to RNA and calculated the reverse complement of a strand of
DNA. By the end of
Chapter 5 , youll have covered the essentials of Perl programming.
4.11 Exercises
Exercise 4.1 Explore the sensitivity of programming languages to errors of syntax. Try
removing the semicolon from the end of any statement of one of our working programs and examining the error messages that result, if any. Try changing other
syntactical items: add a parenthesis or a curly brace; misspell print or some other reserved word; just type in, or delete, anything. Programmers get used to
seeing such errors; even after getting to know the language well, it is still common to have some syntax errors as you gradually add code to a program.
Notice how one error can lead to many lines of error reporting. Is Perl accurately reporting the line where the error is?
Exercise 4.2 Write a program that stores an integer in a variable and then prints it out.
Exercise 4.3 Write a program that prints DNA which could be in upper- or lowercase
originally in lowercase acgt; write another that prints the DNA in uppercase
IT-SC 68
ACGT. Use the function tr. Exercise 4.4
Do the same thing as Exercise 4.3, but use the string directives \U
and \L
for upper- and lowercase. For instance,
print \UDNA
prints the data in DNA
in uppercase.
Exercise 4.5 Sometimes information flows from RNA to DNA. Write a program to reverse
transcribe RNA to DNA. Exercise 4.6
Read two files of data, and print the contents of the first followed by the contents of the second.
Exercise 4.7 This is a more difficult exercise. Write a program to read a file, and then print its
lines in reverse order, the last line first. Or you may want to look up the functions push, pop, shift, and unshift, and choose one or more of them to accomplish
this exercise. You may want to look ahead to
Chapter 5 so you can use a loop
in this program, but this may not be necessary depending on the approach you take. Or, you may want to use reverse on an array of lines.
IT-SC 69
Chapter 5. Motifs and Loops
This chapter continues demonstrating the basics of the Perl language begun in Chapter
4 . By the end of the chapter, you will know how to:
Search for motifs in DNA or protein Interact with users at the keyboard
Write data to files Use loops
Use basic regular expressions Take different actions depending on the outcome of conditional tests
Examine sequence data in detail by operating on strings and arrays These topics, in addition to what you learned in
Chapter 4 , will give you the skills
necessary to begin to write useful bioinformatics programs; in this chapter, you will learn to write a program that looks for motifs in sequence data.
5.1 Flow Control
Flow control is the order in which the statements of a program are executed. A program executes from the first statement at the top of the program to the last statement at the
bottom, in order, unless told to do otherwise. There are two ways to tell a program to do otherwise: conditional statements and loops. A conditional statement executes a group of
statements only if the conditional test succeeds; otherwise, it just skips the group of statements. A loop repeats a group of statements until an associated test fails.
5.1.1 Conditional Statements
Lets take another look at the open statement. Recall that if you try to open a nonexistent file, you get error messages. You can test for the existence of a file explicitly, before
trying to open it. In fact, such tests are among the most powerful features of computer languages. The if , if-else, and unless conditional statements are three such testing
mechanisms in Perl.
The main feature of these kinds of constructs is the testing for a conditional. A conditional evaluates to a
true or
false value. If the conditional is
true , the
statements following are executed; if the conditional is false
, they are skipped or vice versa.
However, What is truth? Its a question that programming languages may answer in