1=head1 NAME 2 3perlintro -- a brief introduction and overview of Perl 4 5=head1 DESCRIPTION 6 7This document is intended to give you a quick overview of the Perl 8programming language, along with pointers to further documentation. It 9is intended as a "bootstrap" guide for those who are new to the 10language, and provides just enough information for you to be able to 11read other peoples' Perl and understand roughly what it's doing, or 12write your own simple scripts. 13 14This introductory document does not aim to be complete. It does not 15even aim to be entirely accurate. In some cases perfection has been 16sacrificed in the goal of getting the general idea across. You are 17I<strongly> advised to follow this introduction with more information 18from the full Perl manual, the table of contents to which can be found 19in L<perltoc>. 20 21Throughout this document you'll see references to other parts of the 22Perl documentation. You can read that documentation using the C<perldoc> 23command or whatever method you're using to read this document. 24 25Throughout Perl's documentation, you'll find numerous examples intended 26to help explain the discussed features. Please keep in mind that many 27of them are code fragments rather than complete programs. 28 29These examples often reflect the style and preference of the author of 30that piece of the documentation, and may be briefer than a corresponding 31line of code in a real program. Except where otherwise noted, you 32should assume that C<use strict> and C<use warnings> statements 33appear earlier in the "program", and that any variables used have 34already been declared, even if those declarations have been omitted 35to make the example easier to read. 36 37Do note that the examples have been written by many different authors over 38a period of several decades. Styles and techniques will therefore differ, 39although some effort has been made to not vary styles too widely in the 40same sections. Do not consider one style to be better than others - "There's 41More Than One Way To Do It" is one of Perl's mottos. After all, in your 42journey as a programmer, you are likely to encounter different styles. 43 44=head2 What is Perl? 45 46Perl is a general-purpose programming language originally developed for 47text manipulation and now used for a wide range of tasks including 48system administration, web development, network programming, GUI 49development, and more. 50 51The language is intended to be practical (easy to use, efficient, 52complete) rather than beautiful (tiny, elegant, minimal). Its major 53features are that it's easy to use, supports both procedural and 54object-oriented (OO) programming, has powerful built-in support for text 55processing, and has one of the world's most impressive collections of 56third-party modules. 57 58Different definitions of Perl are given in L<perl>, L<perlfaq1> and 59no doubt other places. From this we can determine that Perl is different 60things to different people, but that lots of people think it's at least 61worth writing about. 62 63=head2 Running Perl programs 64 65To run a Perl program from the Unix command line: 66 67 perl progname.pl 68 69Alternatively, put this as the first line of your script: 70 71 #!/usr/bin/env perl 72 73... and run the script as F</path/to/script.pl>. Of course, it'll need 74to be executable first, so C<chmod 755 script.pl> (under Unix). 75 76(This start line assumes you have the B<env> program. You can also put 77directly the path to your perl executable, like in C<#!/usr/bin/perl>). 78 79For more information, including instructions for other platforms such as 80Windows and Mac OS, read L<perlrun>. 81 82=head2 Safety net 83 84Perl by default is very forgiving. In order to make it more robust 85it is recommended to start every program with the following lines: 86 87 #!/usr/bin/perl 88 use strict; 89 use warnings; 90 91The two additional lines request from perl to catch various common 92problems in your code. They check different things so you need both. A 93potential problem caught by C<use strict;> will cause your code to stop 94immediately when it is encountered, while C<use warnings;> will merely 95give a warning (like the command-line switch B<-w>) and let your code run. 96To read more about them check their respective manual pages at L<strict> 97and L<warnings>. 98 99=head2 Basic syntax overview 100 101A Perl script or program consists of one or more statements. These 102statements are simply written in the script in a straightforward 103fashion. There is no need to have a C<main()> function or anything of 104that kind. 105 106Perl statements end in a semi-colon: 107 108 print "Hello, world"; 109 110Comments start with a hash symbol and run to the end of the line 111 112 # This is a comment 113 114Whitespace is irrelevant: 115 116 print 117 "Hello, world" 118 ; 119 120... except inside quoted strings: 121 122 # this would print with a linebreak in the middle 123 print "Hello 124 world"; 125 126Double quotes or single quotes may be used around literal strings: 127 128 print "Hello, world"; 129 print 'Hello, world'; 130 131However, only double quotes "interpolate" variables and special 132characters such as newlines (C<\n>): 133 134 print "Hello, $name\n"; # works fine 135 print 'Hello, $name\n'; # prints $name\n literally 136 137Numbers don't need quotes around them: 138 139 print 42; 140 141You can use parentheses for functions' arguments or omit them 142according to your personal taste. They are only required 143occasionally to clarify issues of precedence. 144 145 print("Hello, world\n"); 146 print "Hello, world\n"; 147 148More detailed information about Perl syntax can be found in L<perlsyn>. 149 150=head2 Perl variable types 151 152Perl has three main variable types: scalars, arrays, and hashes. 153 154=over 4 155 156=item Scalars 157 158A scalar represents a single value: 159 160 my $animal = "camel"; 161 my $answer = 42; 162 163Scalar values can be strings, integers or floating point numbers, and Perl 164will automatically convert between them as required. There is no need 165to pre-declare your variable types, but you have to declare them using 166the C<my> keyword the first time you use them. (This is one of the 167requirements of C<use strict;>.) 168 169Scalar values can be used in various ways: 170 171 print $animal; 172 print "The animal is $animal\n"; 173 print "The square of $answer is ", $answer * $answer, "\n"; 174 175There are a number of "magic" scalars with names that look like 176punctuation or line noise. These special variables are used for all 177kinds of purposes, and are documented in L<perlvar>. The only one you 178need to know about for now is C<$_> which is the "default variable". 179It's used as the default argument to a number of functions in Perl, and 180it's set implicitly by certain looping constructs. 181 182 print; # prints contents of $_ by default 183 184=item Arrays 185 186An array represents a list of values: 187 188 my @animals = ("camel", "llama", "owl"); 189 my @numbers = (23, 42, 69); 190 my @mixed = ("camel", 42, 1.23); 191 192Arrays are zero-indexed. Here's how you get at elements in an array: 193 194 print $animals[0]; # prints "camel" 195 print $animals[1]; # prints "llama" 196 197The special variable C<$#array> tells you the index of the last element 198of an array: 199 200 print $mixed[$#mixed]; # last element, prints 1.23 201 202You might be tempted to use C<$#array + 1> to tell you how many items there 203are in an array. Don't bother. As it happens, using C<@array> where Perl 204expects to find a scalar value ("in scalar context") will give you the number 205of elements in the array: 206 207 if (@animals < 5) { ... } 208 209The elements we're getting from the array start with a C<$> because 210we're getting just a single value out of the array; you ask for a scalar, 211you get a scalar. 212 213To get multiple values from an array: 214 215 @animals[0,1]; # gives ("camel", "llama"); 216 @animals[0..2]; # gives ("camel", "llama", "owl"); 217 @animals[1..$#animals]; # gives all except the first element 218 219This is called an "array slice". 220 221You can do various useful things to lists: 222 223 my @sorted = sort @animals; 224 my @backwards = reverse @numbers; 225 226There are a couple of special arrays too, such as C<@ARGV> (the command 227line arguments to your script) and C<@_> (the arguments passed to a 228subroutine). These are documented in L<perlvar>. 229 230=item Hashes 231 232A hash represents a set of key/value pairs: 233 234 my %fruit_color = ("apple", "red", "banana", "yellow"); 235 236You can use whitespace and the C<< => >> operator to lay them out more 237nicely: 238 239 my %fruit_color = ( 240 apple => "red", 241 banana => "yellow", 242 ); 243 244To get at hash elements: 245 246 $fruit_color{"apple"}; # gives "red" 247 248You can get at lists of keys and values with C<keys()> and 249C<values()>. 250 251 my @fruits = keys %fruit_color; 252 my @colors = values %fruit_color; 253 254Hashes have no particular internal order, though you can sort the keys 255and loop through them. 256 257Just like special scalars and arrays, there are also special hashes. 258The most well known of these is C<%ENV> which contains environment 259variables. Read all about it (and other special variables) in 260L<perlvar>. 261 262=back 263 264Scalars, arrays and hashes are documented more fully in L<perldata>. 265 266More complex data types can be constructed using references, which allow 267you to build lists and hashes within lists and hashes. 268 269A reference is a scalar value and can refer to any other Perl data 270type. So by storing a reference as the value of an array or hash 271element, you can easily create lists and hashes within lists and 272hashes. The following example shows a 2 level hash of hash 273structure using anonymous hash references. 274 275 my $variables = { 276 scalar => { 277 description => "single item", 278 sigil => '$', 279 }, 280 array => { 281 description => "ordered list of items", 282 sigil => '@', 283 }, 284 hash => { 285 description => "key/value pairs", 286 sigil => '%', 287 }, 288 }; 289 290 print "Scalars begin with a $variables->{'scalar'}->{'sigil'}\n"; 291 292Exhaustive information on the topic of references can be found in 293L<perlreftut>, L<perllol>, L<perlref> and L<perldsc>. 294 295=head2 Variable scoping 296 297Throughout the previous section all the examples have used the syntax: 298 299 my $var = "value"; 300 301The C<my> is actually not required; you could just use: 302 303 $var = "value"; 304 305However, the above usage will create global variables throughout your 306program, which is bad programming practice. C<my> creates lexically 307scoped variables instead. The variables are scoped to the block 308(i.e. a bunch of statements surrounded by curly-braces) in which they 309are defined. 310 311 my $x = "foo"; 312 my $some_condition = 1; 313 if ($some_condition) { 314 my $y = "bar"; 315 print $x; # prints "foo" 316 print $y; # prints "bar" 317 } 318 print $x; # prints "foo" 319 print $y; # prints nothing; $y has fallen out of scope 320 321Using C<my> in combination with a C<use strict;> at the top of 322your Perl scripts means that the interpreter will pick up certain common 323programming errors. For instance, in the example above, the final 324C<print $y> would cause a compile-time error and prevent you from 325running the program. Using C<strict> is highly recommended. 326 327=head2 Conditional and looping constructs 328 329Perl has most of the usual conditional and looping constructs. As of Perl 3305.10, it even has a case/switch statement (spelled C<given>/C<when>). See 331L<perlsyn/"Switch Statements"> for more details. 332 333The conditions can be any Perl expression. See the list of operators in 334the next section for information on comparison and boolean logic operators, 335which are commonly used in conditional statements. 336 337=over 4 338 339=item if 340 341 if ( condition ) { 342 ... 343 } elsif ( other condition ) { 344 ... 345 } else { 346 ... 347 } 348 349There's also a negated version of it: 350 351 unless ( condition ) { 352 ... 353 } 354 355This is provided as a more readable version of C<if (!I<condition>)>. 356 357Note that the braces are required in Perl, even if you've only got one 358line in the block. However, there is a clever way of making your one-line 359conditional blocks more English like: 360 361 # the traditional way 362 if ($zippy) { 363 print "Yow!"; 364 } 365 366 # the Perlish post-condition way 367 print "Yow!" if $zippy; 368 print "We have no bananas" unless $bananas; 369 370=item while 371 372 while ( condition ) { 373 ... 374 } 375 376There's also a negated version, for the same reason we have C<unless>: 377 378 until ( condition ) { 379 ... 380 } 381 382You can also use C<while> in a post-condition: 383 384 print "LA LA LA\n" while 1; # loops forever 385 386=item for 387 388Exactly like C: 389 390 for ($i = 0; $i <= $max; $i++) { 391 ... 392 } 393 394The C style for loop is rarely needed in Perl since Perl provides 395the more friendly list scanning C<foreach> loop. 396 397=item foreach 398 399 foreach (@array) { 400 print "This element is $_\n"; 401 } 402 403 print $list[$_] foreach 0 .. $max; 404 405 # you don't have to use the default $_ either... 406 foreach my $key (keys %hash) { 407 print "The value of $key is $hash{$key}\n"; 408 } 409 410The C<foreach> keyword is actually a synonym for the C<for> 411keyword. See C<L<perlsyn/"Foreach Loops">>. 412 413=back 414 415For more detail on looping constructs (and some that weren't mentioned in 416this overview) see L<perlsyn>. 417 418=head2 Builtin operators and functions 419 420Perl comes with a wide selection of builtin functions. Some of the ones 421we've already seen include C<print>, C<sort> and C<reverse>. A list of 422them is given at the start of L<perlfunc> and you can easily read 423about any given function by using C<perldoc -f I<functionname>>. 424 425Perl operators are documented in full in L<perlop>, but here are a few 426of the most common ones: 427 428=over 4 429 430=item Arithmetic 431 432 + addition 433 - subtraction 434 * multiplication 435 / division 436 437=item Numeric comparison 438 439 == equality 440 != inequality 441 < less than 442 > greater than 443 <= less than or equal 444 >= greater than or equal 445 446=item String comparison 447 448 eq equality 449 ne inequality 450 lt less than 451 gt greater than 452 le less than or equal 453 ge greater than or equal 454 455(Why do we have separate numeric and string comparisons? Because we don't 456have special variable types, and Perl needs to know whether to sort 457numerically (where 99 is less than 100) or alphabetically (where 100 comes 458before 99). 459 460=item Boolean logic 461 462 && and 463 || or 464 ! not 465 466(C<and>, C<or> and C<not> aren't just in the above table as descriptions 467of the operators. They're also supported as operators in their own 468right. They're more readable than the C-style operators, but have 469different precedence to C<&&> and friends. Check L<perlop> for more 470detail.) 471 472=item Miscellaneous 473 474 = assignment 475 . string concatenation 476 x string multiplication (repeats strings) 477 .. range operator (creates a list of numbers or strings) 478 479=back 480 481Many operators can be combined with a C<=> as follows: 482 483 $a += 1; # same as $a = $a + 1 484 $a -= 1; # same as $a = $a - 1 485 $a .= "\n"; # same as $a = $a . "\n"; 486 487=head2 Files and I/O 488 489You can open a file for input or output using the C<open()> function. 490It's documented in extravagant detail in L<perlfunc> and L<perlopentut>, 491but in short: 492 493 open(my $in, "<", "input.txt") or die "Can't open input.txt: $!"; 494 open(my $out, ">", "output.txt") or die "Can't open output.txt: $!"; 495 open(my $log, ">>", "my.log") or die "Can't open my.log: $!"; 496 497You can read from an open filehandle using the C<< <> >> operator. In 498scalar context it reads a single line from the filehandle, and in list 499context it reads the whole file in, assigning each line to an element of 500the list: 501 502 my $line = <$in>; 503 my @lines = <$in>; 504 505Reading in the whole file at one time is called slurping. It can 506be useful but it may be a memory hog. Most text file processing 507can be done a line at a time with Perl's looping constructs. 508 509The C<< <> >> operator is most often seen in a C<while> loop: 510 511 while (<$in>) { # assigns each line in turn to $_ 512 print "Just read in this line: $_"; 513 } 514 515We've already seen how to print to standard output using C<print()>. 516However, C<print()> can also take an optional first argument specifying 517which filehandle to print to: 518 519 print STDERR "This is your final warning.\n"; 520 print $out $record; 521 print $log $logmessage; 522 523When you're done with your filehandles, you should C<close()> them 524(though to be honest, Perl will clean up after you if you forget): 525 526 close $in or die "$in: $!"; 527 528=head2 Regular expressions 529 530Perl's regular expression support is both broad and deep, and is the 531subject of lengthy documentation in L<perlrequick>, L<perlretut>, and 532elsewhere. However, in short: 533 534=over 4 535 536=item Simple matching 537 538 if (/foo/) { ... } # true if $_ contains "foo" 539 if ($a =~ /foo/) { ... } # true if $a contains "foo" 540 541The C<//> matching operator is documented in L<perlop>. It operates on 542C<$_> by default, or can be bound to another variable using the C<=~> 543binding operator (also documented in L<perlop>). 544 545=item Simple substitution 546 547 s/foo/bar/; # replaces foo with bar in $_ 548 $a =~ s/foo/bar/; # replaces foo with bar in $a 549 $a =~ s/foo/bar/g; # replaces ALL INSTANCES of foo with bar 550 # in $a 551 552The C<s///> substitution operator is documented in L<perlop>. 553 554=item More complex regular expressions 555 556You don't just have to match on fixed strings. In fact, you can match 557on just about anything you could dream of by using more complex regular 558expressions. These are documented at great length in L<perlre>, but for 559the meantime, here's a quick cheat sheet: 560 561 . a single character 562 \s a whitespace character (space, tab, newline, 563 ...) 564 \S non-whitespace character 565 \d a digit (0-9) 566 \D a non-digit 567 \w a word character (a-z, A-Z, 0-9, _) 568 \W a non-word character 569 [aeiou] matches a single character in the given set 570 [^aeiou] matches a single character outside the given 571 set 572 (foo|bar|baz) matches any of the alternatives specified 573 574 ^ start of string 575 $ end of string 576 577Quantifiers can be used to specify how many of the previous thing you 578want to match on, where "thing" means either a literal character, one 579of the metacharacters listed above, or a group of characters or 580metacharacters in parentheses. 581 582 * zero or more of the previous thing 583 + one or more of the previous thing 584 ? zero or one of the previous thing 585 {3} matches exactly 3 of the previous thing 586 {3,6} matches between 3 and 6 of the previous thing 587 {3,} matches 3 or more of the previous thing 588 589Some brief examples: 590 591 /^\d+/ string starts with one or more digits 592 /^$/ nothing in the string (start and end are 593 adjacent) 594 /(\d\s){3}/ three digits, each followed by a whitespace 595 character (eg "3 4 5 ") 596 /(a.)+/ matches a string in which every odd-numbered 597 letter is a (eg "abacadaf") 598 599 # This loop reads from STDIN, and prints non-blank lines: 600 while (<>) { 601 next if /^$/; 602 print; 603 } 604 605=item Parentheses for capturing 606 607As well as grouping, parentheses serve a second purpose. They can be 608used to capture the results of parts of the regexp match for later use. 609The results end up in C<$1>, C<$2> and so on. 610 611 # a cheap and nasty way to break an email address up into parts 612 613 if ($email =~ /([^@]+)@(.+)/) { 614 print "Username is $1\n"; 615 print "Hostname is $2\n"; 616 } 617 618=item Other regexp features 619 620Perl regexps also support backreferences, lookaheads, and all kinds of 621other complex details. Read all about them in L<perlrequick>, 622L<perlretut>, and L<perlre>. 623 624=back 625 626=head2 Writing subroutines 627 628Writing subroutines is easy: 629 630 sub logger { 631 my $logmessage = shift; 632 open my $logfile, ">>", "my.log" or die "Could not open my.log: $!"; 633 print $logfile $logmessage; 634 } 635 636Now we can use the subroutine just as any other built-in function: 637 638 logger("We have a logger subroutine!"); 639 640What's that C<shift>? Well, the arguments to a subroutine are available 641to us as a special array called C<@_> (see L<perlvar> for more on that). 642The default argument to the C<shift> function just happens to be C<@_>. 643So C<my $logmessage = shift;> shifts the first item off the list of 644arguments and assigns it to C<$logmessage>. 645 646We can manipulate C<@_> in other ways too: 647 648 my ($logmessage, $priority) = @_; # common 649 my $logmessage = $_[0]; # uncommon, and ugly 650 651Subroutines can also return values: 652 653 sub square { 654 my $num = shift; 655 my $result = $num * $num; 656 return $result; 657 } 658 659Then use it like: 660 661 $sq = square(8); 662 663For more information on writing subroutines, see L<perlsub>. 664 665=head2 OO Perl 666 667OO Perl is relatively simple and is implemented using references which 668know what sort of object they are based on Perl's concept of packages. 669However, OO Perl is largely beyond the scope of this document. 670Read L<perlootut> and L<perlobj>. 671 672As a beginning Perl programmer, your most common use of OO Perl will be 673in using third-party modules, which are documented below. 674 675=head2 Using Perl modules 676 677Perl modules provide a range of features to help you avoid reinventing 678the wheel, and can be downloaded from CPAN ( L<http://www.cpan.org/> ). A 679number of popular modules are included with the Perl distribution 680itself. 681 682Categories of modules range from text manipulation to network protocols 683to database integration to graphics. A categorized list of modules is 684also available from CPAN. 685 686To learn how to install modules you download from CPAN, read 687L<perlmodinstall>. 688 689To learn how to use a particular module, use C<perldoc I<Module::Name>>. 690Typically you will want to C<use I<Module::Name>>, which will then give 691you access to exported functions or an OO interface to the module. 692 693L<perlfaq> contains questions and answers related to many common 694tasks, and often provides suggestions for good CPAN modules to use. 695 696L<perlmod> describes Perl modules in general. L<perlmodlib> lists the 697modules which came with your Perl installation. 698 699If you feel the urge to write Perl modules, L<perlnewmod> will give you 700good advice. 701 702=head1 AUTHOR 703 704Kirrily "Skud" Robert <skud@cpan.org> 705