Scalar and List Context Exercises

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