-
Notifications
You must be signed in to change notification settings - Fork 0
/
tutorials-perl.html
377 lines (288 loc) · 21.5 KB
/
tutorials-perl.html
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="">
<meta name="author" content="">
<title>PrograMix</title>
<!-- Bootstrap Core CSS -->
<link href="css/bootstrap.min.css" rel="stylesheet">
<!-- Custom CSS -->
<style>
body {
padding-top: 70px;
/* Required padding for .navbar-fixed-top. Remove if using .navbar-static-top. Change if height of navigation changes. */
font-size: 15px;
font-style: verdana;
}
li{
color: #33AAFF;
}
</style>
</head>
<body>
<!-- Navigation -->
<nav class="navbar navbar-inverse navbar-fixed-top" role="navigation">
<div class="container">
<!-- Brand and toggle get grouped for better mobile display -->
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="index.html"><img src="images/logo-trans-134px.png" style="margin-top: -10px"></a>
</div>
<!-- Collect the nav links, forms, and other content for toggling -->
<div class="collapse navbar-collapse " id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav">
<!-- languages nav and dropdown-->
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdownMenuLink" data-toggle="dropdown" aria-haspopup="false" aria-expanded="false">Programming Languages<span class="caret"></span></a>
<!-- languages dropdown menu -->
<div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
<ul>
<li><a class="dropdown-item" href="programming-language-java.html">Java</a></li>
<li><a class="dropdown-item" href="programming-language-python.html">Python</a></li>
<li><a class="dropdown-item" href="programming-language-haskell.html">Haskell</a></li>
<li><a class="dropdown-item" href="programming-language-php.html">PHP</a></li>
<li><a class="dropdown-item" href="programming-language-c++.html">C++</a></li>
<li><a class="dropdown-item" href="programming-language-c_sharp.html">C#</a></li>
<li><a class="dropdown-item" href="programming-language-ios.html">IOS - Objective-C</a></li>
<li><a class="dropdown-item" href="programming-language-SQL.html">SQL</a></li>
<li><a class="dropdown-item" href="programming-language-Perl.html">Perl</a></li>
<li><a class="dropdown-item" href="programming-language-JavaScript.html">JavaScript</a></li>
</ul>
</div>
</li><!--end of languages dropdown-->
<!--tutorials in nav and dropdown-->
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdownMenuLink" data-toggle="dropdown" aria-haspopup="false" aria-expanded="false">Tutorials<span class="caret"></span></a>
<!-- Tutorials dropdown menu -->
<div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
<ul>
<li><a class="dropdown-item" href="tutorials-java.html">Java</a></li>
<li><a class="dropdown-item" href="tutorials-python.html">Python</a></li>
<li><a class="dropdown-item" href="tutorials-haskell.html">Haskell</a></li>
<li><a class="dropdown-item" href="tutorials-php.html">PHP</a></li>
<li><a class="dropdown-item" href="tutorials-c++.html">C++</a></li>
<li><a class="dropdown-item" href="tutorials-c_shar.html">C#</a></li>
<li><a class="dropdown-item" href="tutorials-ios.html">IOS - Objective-C</a></li>
<li><a class="dropdown-item" href="tutorials-sql.html">SQL</a></li>
<li><a class="dropdown-item" href="tutorials-perl.html">Perl</a></li>
<li><a class="dropdown-item" href="tutorials-js.html">JavaScript</a></li>
</ul>
</div>
</li><!-- end of tutorials -->
<!--programming software in navbar with dropdown-->
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdownMenuLink" data-toggle="dropdown" aria-haspopup="false" aria-expanded="false">Programming Softwares<span class="caret"></span></a>
<!-- languages dropdown menu -->
<div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
<ul>
<li><a class="dropdown-item" href="prosoft-nb.html">NetBeans</a></li>
<li><a class="dropdown-item" href="prosoft-jc.html">JCreator</a></li>
<li><a class="dropdown-item" href="prosoft-st.html">Sublime Text</a></li>
<li><a class="dropdown-item" href="prosoft-eclipse.html">Eclipse</a></li>
<li><a class="dropdown-item" href="prosoft-xcode.html">Xcode</a></li>
</ul>
</div>
</li><!-- end of programming softwares -->
<!-- search bar icon w/ dropdown searchbox-->
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdownMenuLink" data-toggle="dropdown" aria-haspopup="false" aria-expanded="false"><img src="images/search-icon.png"></a>
<!-- languages dropdown menu -->
<div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
<form method="get" action="/search" id="search">
<input name="q" type="text" size="40" placeholder="Search..." />
</form>
</div>
</li><!-- end of search bar-->
</ul>
</div>
<!-- /.navbar-collapse -->
</div>
<!-- /.container -->
</nav>
<!-- Page Content w/ container-->
<div class="container">
<div class="row">
<div class="col-lg-12 text-left">
<div class="jumbotron jumbotron-fluid">
<div class="container" style="text-align: center">
<h1 class="display-3">Perl</h1>
</div>
</div>
<p class="lead">
<h1>Your First Perl Program</h1>
<p style="text-indent: 40px">Take the following text and put it into a file called first.pl:</p>
<div class="alert alert-info" role="alert">
#!/usr/local/bin/perl<br>
print "Hello World!\n";
</div>
<p style="text-indent: 40px">Now, run it with your Perl interpreter. From a command line, go to the directory with this file and type perl first.pl. You should see:</p>
<div class="alert alert-info" role="alert">
Hello World!
</div>
<p style="text-indent: 40px">The \n indicates the ``newline'' character; without it, Perl doesn't skip to a new line of text on its own.</p>
<h3>Functions and Statements</h3>
<p style="text-indent: 40px">Perl has a rich library of functions. They're the verbs of Perl, the commands that the interpreter runs. You can see a list of all the built-in functions on the perlfunc main page. Almost all functions can be given a list of parameters, which are separated by commas.</p>
<p style="text-indent: 40px">The print function is one of the most frequently used parts of Perl. You use it to display things on the screen or to send information to a file (which we'll discuss in the next article). It takes a list of things to output as its parameters.</p>
<div class="alert alert-info" role="alert">
print "This is a single statement.";<br>
print "Look, ", "a ", "list!";
</div>
<p style="text-indent: 40px">A Perl program consists of statements, each of which ends with a semicolon. Statements don't need to be on separate lines; there may be multiple statements on one line or a single statement can be split across multiple lines.</p>
<div class="alert alert-info" role="alert">
print "This is "; print "two statements.\n"; print "But this ",<br>
"is only one statement.\n";
</div>
<h3>Numbers, Strings and Quotes</h3>
<p style="text-indent: 40px">There are two basic data types in Perl: numbers and strings.</p>
<p style="text-indent: 40px">Numbers are easy; we've all dealt with them. The only thing you need to know is that you never insert commas or spaces into numbers in Perl. always write 10000, not 10,000 or 10 000.</p>
<p style="text-indent: 40px">Strings are a bit more complex. A string is a collection of characters in either single or double quotes:</p>
<div class="alert alert-info" role="alert">
'This is a test.'<br>
"Hi there!\n"
</div>
<p style="text-indent: 40px">The difference between single quotes and double quotes is that single quotes mean that their contents should be taken literally, while double quotes mean that their contents should be interpreted. For example, the character sequence \n is a newline character when it appears in a string with double quotes, but is literally the two characters, backslash and n, when it appears in single quotes.</p>
<div class="alert alert-info" role="alert">
print "This string\nshows up on two lines.";<br>
print 'This string \n shows up on only one.';
</div>
<p style="text-indent: 40px">(Two other useful backslash sequences are \t to insert a tab character, and \\ to insert a backslash into a double-quoted string.)</p>
<h3>Variables</h3>
<p style="text-indent: 40px">If functions are Perl's verbs, then variables are its nouns. Perl has three types of variables: scalars, arrays and hashes. Think of them as ``things,'' ``lists,'' and ``dictionaries.'' In Perl, all variable names are a punctuation character, a letter or underscore, and one or more alphanumeric characters or underscores.</p>
<p style="text-indent: 40px">Scalars are single things. This might be a number or a string. The name of a scalar begins with a dollar sign, such as $i or $abacus. You assign a value to a scalar by telling Perl what it equals, like so:</p>
<div class="alert alert-info" role="alert">
$i = 5;<br>
$pie_flavor = 'apple';<br>
$constitution1776 = "We the People, etc.";
</div>
<p style="text-indent: 40px">You don't need to specify whether a scalar is a number or a string. It doesn't matter, because when Perl needs to treat a scalar as a string, it does; when it needs to treat it as a number, it does. The conversion happens automatically. (This is different from many other languages, where strings and numbers are two separate data types.)</p>
<p style="text-indent: 40px">If you use a double-quoted string, Perl will insert the value of any scalar variables you name in the string. This is often used to fill in strings on the fly:</p>
<div class="alert alert-info" role="alert">
$apple_count = 5; <br>
$count_report = "There are $apple_count apples.";<br>
print "The report is: $count_report\n";
</div>
<p style="text-indent: 40px">The final output from this code is The report is: There are 5 apples..</p>
<p style="text-indent: 40px">Numbers in Perl can be manipulated with the usual mathematical operations: addition, multiplication, division and subtraction. (Multiplication and division are indicated in Perl with the * and / symbols, by the way.)</p>
<div class="alert alert-info" role="alert">
$a = 5;<br>
$b = $a + 10; # $b is now equal to 15.<br>
$c = $b * 10; # $c is now equal to 150.<br>
$a = $a - 1; # $a is now 4, and algebra teachers are cringing.
</div>
<p style="text-indent: 40px">You can also use special operators like ++, --, +=, -=, /= and *=. These manipulate a scalar's value without needing two elements in an equation. Some people like them, some don't. I like the fact that they can make code clearer.</p><br>
<div class="alert alert-info" role="alert">
$a = 5;<br>
$a++; # $a is now 6; we added 1 to it.<br>
$a += 10; # Now it's 16; we added 10.<br>
$a /= 2; # And divided it by 2, so it's 8.
</div>
<p style="text-indent: 40px">Strings in Perl don't have quite as much flexibility. About the only basic operator that you can use on strings is concatenation, which is a $10 way of saying ``put together.'' The concatenation operator is the period. Concatenation and addition are two different things:</p>
<div class="alert alert-info" role="alert">
$a = "8"; # Note the quotes. $a is a string.<br>
$b = $a + "1"; # "1" is a string too.<br>
$c = $a . "1"; # But $b and $c have different values!
</div>
<p style="text-indent: 40px">Remember that Perl converts strings to numbers transparently whenever it's needed, so to get the value of $b, the Perl interpreter converted the two strings "8" and "1" to numbers, then added them. The value of $b is the number 9. However, $c used concatenation, so its value is the string "81".</p>
<p style="text-indent: 40px">Just remember, the plus sign adds numbers and the period puts strings together.</p>
<p style="text-indent: 40px">Arrays are lists of scalars. Array names begin with @. You define arrays by listing their contents in parentheses, separated by commas:</p>
<div class="alert alert-info" role="alert">
@lotto_numbers = (1, 2, 3, 4, 5, 6); # Hey, it could happen.<br>
@months = ("July", "August", "September");
</div>
<p style="text-indent: 40px">The contents of an array are indexed beginning with 0. (Why not 1? Because. It's a computer thing.) To retrieve the elements of an array, you replace the @ sign with a $ sign, and follow that with the index position of the element you want. (It begins with a dollar sign because you're getting a scalar value.) You can also modify it in place, just like any other scalar.</p>
<div class="alert alert-info" role="alert">
@months = ("July", "August", "September");<br>
print $months[0]; # This prints "July".<br>
$months[2] = "Smarch"; # We just renamed September!
</div>
<p style="text-indent: 40px">If an array doesn't exist, by the way, you'll create it when you try to assign a value to one of its elements.</p>
<div class="alert alert-info" role="alert">
$winter_months[0] = "December"; # This implicitly creates @winter_months.
</div>
<p style="text-indent: 40px">Arrays always return their contents in the same order; if you go through @months from beginning to end, no matter how many times you do it, you'll get back July, August and September in that order. If you want to find the length of an array, use the value $#array_name. This is one less than the number of elements in the array. If the array just doesn't exist or is empty, $#array_name is -1. If you want to resize an array, just change the value of $#array_name.</p>
<div class="alert alert-info" role="alert">
@months = ("July", "August", "September");<br>
print $#months; # This prints 2.<br>
$a1 = $#autumn_months; # We don't have an @autumn_months, so this is -1.<br>
$#months = 0; # Now @months only contains "July".
</div>
<p style="text-indent: 40px">Hashes are called ``dictionaries'' in some programming languages, and that's what they are: a term and a definition, or in more correct language a key and a value. Each key in a hash has one and only one corresponding value. The name of a hash begins with a percentage sign, like %parents. You define hashes by comma-separated pairs of key and value, like so:</p>
<div class="alert alert-info" role="alert">
%days_in_summer = ( "July" => 31, "August" => 31, "September" => 30 );
</div>
<p style="text-indent: 40px">You can fetch any value from a hash by referring to $hashname{key}, or modify it in place just like any other scalar.</p>
<div class="alert alert-info" role="alert">
print $days_in_summer{"September"}; # 30, of course.<br>
$days_in_summer{"February"} = 29; # It's a leap year.
</div>
<p style="text-indent: 40px">If you want to see what keys are in a hash, you can use the keys function with the name of the hash. This returns a list containing all of the keys in the hash. The list isn't always in the same order, though; while we could count on @months to always return July, August, September in that order, keys %days_in_summer might return them in any order whatsoever.</p>
<div class="alert alert-info" role="alert">
@month_list = keys %days_in_summer;<br>
# @month_list is now ('July', 'September', 'August') !
</div>
<p style="text-indent: 40px">The three types of variables have three separate namespaces. That means that $abacus and @abacus are two different variables, and $abacus[0] (the first element of @abacus) is not the same as $abacus{0} (the value in abacus that has the key 0).</p>
<h3>Comments</h3>
<p style="text-indent: 40px">Notice that in some of the code samples from the previous section, I've used code comments. These are useful for explaining what a particular piece of code does, and vital for any piece of code you plan to modify, enhance, fix, or just look at again. (That is to say, comments are vital for all code.)</p>
<p style="text-indent: 40px">Anything in a line of Perl code that follows a # sign is a comment. (Except, of course, if the # sign appears in a string.)</p>
<div class="alert alert-info" role="alert">
print "Hello world!\n"; # That's more like it.<br>
# This entire line is a comment.
</div>
<h3>Loops</h3>
<p style="text-indent: 40px">Almost every time you write a program, you'll need to use a loop. Loops allow you run a particular piece of code over and over again. This is part of a general concept in programming called flow control.</p>
<p style="text-indent: 40px">Perl has several different functions that are useful for flow control, the most basic of which is for. When you use the for function, you specify a variable that will be used for the loop index, and a list of values to loop over. Inside a pair of curly brackets, you put any code you want to run during the loop:</p>
<div class="alert alert-info" role="alert">
for $i (1, 2, 3, 4, 5) {<br>
print "$i\n";<br>
}
</div>
<p style="text-indent: 40px">This loop prints the numbers 1 through 5, each on a separate line.</p>
<p style="text-indent: 40px">A handy shortcut for defining loops is using .. to specify a range of numbers. You can write (1, 2, 3, 4, 5) as (1 .. 5). You can also use arrays and scalars in your loop list. Try this code and see what happens:</p>
<div class="alert alert-info" role="alert">
@one_to_ten = (1 .. 10);<br>
$top_limit = 25;<br>
for $i (@one_to_ten, 15, 20 .. $top_limit) {<br>
print "$i\n";<br>
}
</div>
<p style="text-indent: 40px">The items in your loop list don't have to be numbers; you can use strings just as easily. If the hash %month_has contains names of months and the number of days in each month, you can use the keys function to step through them.</p>
<div class="alert alert-info" role="alert">
for $i (keys %month_has) {<br>
print "$i has $month_has{$i} days.\n";<br>
}<br>
for $marx ('Groucho', 'Harpo', 'Zeppo', 'Karl') {<br>
<br>
print "$marx is my favorite Marx brother.\n";<br>
}
</div>
<h3>The Miracle of Compound Interest</h3>
<p style="text-indent: 40px">You now know enough about Perl - variables, print, and for() - to write a small, useful program. Everyone loves money, so the first sample program is a compound-interest calculator. It will print a (somewhat) nicely formatted table showing the value of an investment over a number of years. (You can see the program at compound_interest.pl)</p>
<p style="text-indent: 40px">The single most complex line in the program is this one:</p>
<div class="alert alert-info" role="alert">
$interest = int (($apr / 100) * $nest_egg * 100) / 100;
</div>
<p style="text-indent: 40px">$apr / 100 is the interest rate, and ($apr / 100) * $nest_egg is the amount of interest earned in one year. This line uses the int() function, which returns the integer value of a scalar (its value after any fractional part has been stripped off). We use int() here because when you multiply, for example, 10925 by 9.25%, the result is 1010.5625, which we must round off to 1010.56. To do this, we multiply by 100, yielding 101056.25, use int() to throw away the leftover fraction, yielding 101056, and then divide by 100 again, so that the final result is 1010.56. Try stepping through this statement yourself to see just how we end up with the correct result, rounded to cents.
</p>
<br>
<br>
<br>
<br>
</div>
</div>
<!-- /.row -->
</div>
<!-- end of content & container -->
<!-- jQuery Version 1.11.1 -->
<script src="js/jquery.js"></script>
<!-- Bootstrap Core JavaScript -->
<script src="js/bootstrap.min.js"></script>
</body>
</html>