SlideShare uma empresa Scribd logo
1 de 16
Baixar para ler offline
ACM Reflections Projections Perl Tutorial
                              Stephen Saville
                                14 Oct 2001


1     A Brief Introduction to Perl
Now, everybody’s solution to a system administration problem is not to write
a new scripting language, but that’s exactly what Larry Wall did back in 1987
when he found the news reader rn (which he also wrote) to be insufficient for
the task. In the years since then, Perl, the ”Practical Extraction and Report
Langauge,” or ”Pathologically Eclectic Rubbish Lister,” depending on who
you talk to, has grown from a one-person hack to a community supported
language with ports for almost every modern operating system available. In
many cases Perl has become THE tool of choice for system adminstration,
because it can actually do just about anything.
    With its powerful and well-developed module system, including tie-ins to
many useful C libraries, the possibilities with perl and endless. Nevertheless,
most of these uses are beyond the scope of this tutorial. The focus of this
tutorial is rather on the Perl language itself, and a few of its main strengths.
After working through this tutorial or attending the Reflections Projections
workshop, you should have a basic grasp of the fundamental aspects of the
Perl langauge, and enough knowledge to get something out of the references
listed at the end of this tutorial.

1.1    Starting Perl
The simplest way to start Perl is just by running the Perl program with
no arguments. In this tutorial, every line that begins with a ‘%’ should be
interpreted as a shell commmand. So type ‘perl’ on the command line and
press enter:

% perl


                                       1
1 A BRIEF INTRODUCTION TO PERL                                               2


    You have now invoked the Perl interpreter! Patienly the interpreter sits
there, waiting for you to type in some Perl code for it to compile. Let’s give
it some Perl to play with:

% perl
print "I like Perln";

   When you’re done, just type Ctrl-D to tell Perl you have finished writing
the program. Now, the interpreter can go to work executing your Perl code:

% perl
print "I like Perln";
I like Perl

   As you can see, once Perl finishes executing your code, it returns you
back to the command prompt so you can do whatever other work you might
want to accomplish. However, this is not the only way to use Perl, for by
the Perl motto: ”There’s more than one way to do it” (often abbreviated
TMTOWTDI). You could also have created a file called, say “script.pl”,
with some Perl code in it and then run it through the Perl interpreter with
the command:

% perl script.pl

   Alternatively, you could use the -e switch to have Perl run a small bit of
code. This method is called a Perl one-liner.

% perl -e ’print("I like Perl");’

    Finally (for our purposes), you could make the a file containing Perl code
(a script) executable by either setting its viewer to be the Perl program in
Windows or putting the following text on the first line of a script file in Unix:

#!/usr/bin/perl -w

   Under Unix, you would also have to make the program executable before
you could run it by setting the execute file permission with:

% chmod a+x script.pl

   Then, the perl program could be run with the command:

% ./script.pl
2 THE ESSENCE OF PERL                                                       3


2     The Essence of Perl
Perl takes inspiration from both scripting langauges and compiled languages
like C. Generally, whitespace is ignored and lines must be terminated with a
semicolon (;). However, comments are formatted as in shell scripts. Every
character on a line after a associative array (#) is a comment and ignored
by the compiler. Perl has no way to comment out blocks of code like C’s /*
...*/ sequence. In summary:

#!/usr/bin/perl -w
# this line is a comment
print "this is a statement, terminated by a semicolonn"; # comments here too
print "proper formatting",
           " is not",               " necessary",
   " but it is",
# comment in the middle of a statement
      " prefferedn";
#
# print "this statement will not be executedn";

2.1      Variables
Perl variables fall into just three different types: scalars, arrays, and asso-
ciative arrays. The simple type of a variable is indicated by the character
which begins the variable name (either The variable name, or ”identifier”
may contain letters, numbers, and the underscore ‘ ’. Identifiers, like all
of perl are case sensitive, so ‘$var’ is a different variable than ‘$VAR’. The
variables are summarized below and will be explored more completely in the
following sections.

scalar     • identifier begins with a dollar sign ($)

           • may contain an integer, floating-point number, or string
array      • identifier begins with the at sign (@)

           • contains an array of scalars referenced by integers.

           • use @array[<integer>] to access an array element
2 THE ESSENCE OF PERL                                                       4


associative array      • identifier begins with the percent sign (%)

                       • also called an “associative array”

                       • contains a collection of scalars referenced by scalars

                       • use %associative array{<scalar>} to access an associative ar-
                         ray element

2.2      Scalars and Literals
Unlike some other langauges, you don’t have to tell Perl what kind of type
a scalar will be — just assign it a value using the equals (=) sign:

$exclamation = "woohoo!";
$answer = 42;
$pi = 3.1415927;
$exclamation = 132; # perfectly legal

    For the most part, numerical literals are fairly straightforward in Perl.
Like in C, you can enter an integer in hex or octal by prepending ‘0x’ or
’0’ to the beggining of the number. Strings literals are nevertheless more
interesting animals.

2.2.1    Strings
Strings can be specified in actually a miriad of different ways (remember TM-
TOWTDI), but we’re only going to concentrate on the three most common.

single quotes (’) single quoted strings such as ’neato, a string’ are in-
     terpreted literally. This literally means that you can put anything be-
     tween single quotes, and Perl will include it in the string. To put an
     apostrophe (’) in the string you need to escape it with a backslash
     (’).

        $password = ’sor$h&lm’;
        # dollar sign is not interpolated
        $passphrase = ’I’ll need $10 for that’;
        # need to escape the apostrophe
2 THE ESSENCE OF PERL                                                      5


double quotes (") double quoted strings like "a string with a $string
    in it" have variable interpretation performed on them. This means
    that wherever a variable is included in the string, that variable will be
    replaced by its value in the final text.

     $price = 20;
     print "why does this fish cost $price dollars?n";
     # will print out "why does this fish cost 20 dollars?"

backticks (‘) the backticks operator performs variable interpretation on
    the string, but then the resulting string is executed as a shell command,
    and the output of the command is returned.

     # on unix kernels, the uname command returns selected
     # information about the system its running on. the -sr
     # switch prints out the system type and version
     $system = ‘uname -sr‘;
     print "$systemn";
     # will print "SunOS 5.8" on a machine running
     # Solaris version 5.8

   Next, we note the operators usable on strings in Table 1. Note that they
are listed in order of precedence.

                        Table 1: String Operators
               operator description
               .         string concatation
               .=        string concatation with assignment
2 THE ESSENCE OF PERL                                                       6


2.2.2   Numbers
As mentioned earlier, numbers are fairly straightforward in Perl. The literals
are the same as in C, and the operators are fairly equivalent. For complete-
ness, I’ve included table of arithmetic operators for completeness. Use Table
2 for reference. Operators are ordered by precedence.

                      Table   2: Arithmetic Operators
                   operator    description     example
                      -        unary negation -$a
                     --        incriment       $a- -
                      ++       decrement       $a++
                      **       exponentiation $a ** $b
                      **       multiplication $a * $b
                      /        division        $a / $b
                      %        modulus         $a % $b
                      +        addition        $a + $b
                      -        subtraction     $a - $b



2.3     Arrays
Arrays in Perl are a bit like arrays in C, but only a bit. For one thing,
arrays can contain any random assortment of scalars. For another, you don’t
actually have to fill up every element of an array, nor do you need to declare
the size of an array. All those technical details that made C programming
tedious are taken care of by Perl. As in C, array indexes start at 0. Here are
some examples of arrays:

# just put some values into an array
$a[0] = 12; $a[3] = "hi"; $a[0] = ’cool’;
#
# note that the @ sign is replaced by a $ sign when
# assigning to an element of an array. just think
# about a[0] as a scalar, not an array
#
#assigning arrays to arrays
@b = @a;
# using lists to initialize an arrays
@a = ("Pete", 23, ’Perl Monger’);
2 THE ESSENCE OF PERL                                                       7


@b = (555-2043);
@c = (@a, @b);
# @c now contains the elements in @a followed by the
# elements in @b
#
# and many more...
    As you can see, arrays in Perl are pretty easy to use and flexible. Note
the use of lists above. Lists are used many times in Perl, but the syntax is
so simple that the reader should be able to pick it up in the course of these
two sections.

2.4    Associative Arrays
The Perl associative array or ”hash” data type is probably one of Perl’s most
useful features. An associative array is an special kind of an array that is
indexed by strings. That’s a very simple definition for an extremely powerful
tool. Working with perl, you’ll probably find yourself using associative arrays
in many unique and creative ways simply because they are so simple. Here’s
just a few examples:
#
# use the dollar sign just like for arrays
$days{’December’} = 31;
#
# other scalar indices are implicitly translated into strings
$height{0} = 4;
$height{’0’} = 4;
# the above two assignments mean exactly the same thing
#
# a bunch of elements can be added to an associative array by
# assigning to it a list of key, value pairs.
%jobs = (’Andy’, ’Cook’, ’Denny’, ’Teacher’, ’Patrick’, ’Student’);
#
print "$jobs{’Andy’}n"
# prints ’Cook’
#
# or, with a little syntactic sugar
%authors = (’Kernignham and Richie’ => ’The C Programming Language’,
           ’Dubois’ => ’MySQL’,
           ’Stewart’ => ’Calculus: Early Transcendentals’);
3 CONTROLLING PERL                                                       8


2.5    Conditionals
Comparisons in Perl can be performed between any two scalars, provided
they are either both strings or both numbers. The comparison operators are
nevertheless different for strings and numbers.

                      Table 3: Comparison Operators
               strings numbers description
                 eq       ==     equality
                 ne       !=     inequality
                 gt        >     greater than
                 ge       >=     greater than or equal
                 lt        <     less than
                 le       <=     less than or equal
                 cmp      <=>    comparison, returns -1,0,1

   You can also use the boolean operators && (AND) and || (OR) to build
up more complicated conditionals.

    And now for the truths and the lies...

# values that evaluate to true
    1;         # duh!
    ("a","b"); # the list has elements
    " ";       # whitespace is true
    "false";   # so are strings
    "00";      # a string
# values that evaluate to false
    0;         # by convention
    ();        # list is empty
    "";        # string is zero-length
    "0";       # interpreted as zero


3     Controlling Perl
Perl has if statements to control execution and do/while as well as for and
foreach loops to repeat series of commands. Also, for reusing code, Perl
provides subroutines. The syntax for these constructs is much like C, but
not quite, so pay attention. Those fine points are the worst.
3 CONTROLLING PERL                                                         9


3.1    Conditional Statements
The if, else, elsif statements in Perl conditionally execute a piece of
code based on the value of a conditional expression. The basic form of the
if and elsif statements is if/elsif (<conditional>) {<code>}. The
curly braces are required. Perl will give you an error if you forget to put
them in. In general, a conditional statement is an if statement followed by
zero or more elsif statements and an optional else statement. The code
in the first if or elsif associated with a true conditional will be executed.
The code in the else statement will be executed if none of the coditionals
are true. Following is an example:
# remember, only the first if/else with a true
# conditional gets executed
#
if (1) {
    print("this message will always print");
}
elseif (1) {
    print("this message will never print");
}
#
# regular expressions can be used in conditionals too
#
$text = "words or words or words";
if ($text =~ /letters/) {
    print (""$text" includes the word "letters"n");
}
elsif ($text =~ /words/) {
    print (""$text" includes the word "words"n");
else {
    print (""$text" is most uninterestingn");
}

3.2    Loops
Sometimes you want to execute a piece of code many times in succession.
Instead of forcing you to retype the code, Perl has loops that allow for con-
trolled repetition of a piece of code. The most simple form of a loop is the
while loop that executes a piece of code as long as a conditional expression
is true. As before, the curly braces are not optional.
3 CONTROLLING PERL                                                          10


while (<conditional>) {
    <code>
}

    Also, Perl has a do...while statement that is like a while loop, but it
is executed at least once.

do {
    <code>
} while (<conditional>)

   In addition, Perl has the more complicated for loop. The for loop is
useful for doing something a specific number of times or possibly executing
some code for each member of an array.

for (<init>; <conditional>; <step>) {
    <code>
}

   and an example...

# print "Have a nice day" five times
#
for ($n = 0; $n < 5; $n++) {
   print "Have a nice dayn";
}
#
# print the string "123456789";
#
for ($num = 1; $num < 10; $num++) {
    print $num;
}
#

    Finally, perl has a very special loop for iterating over the contents of an
array. the foreach loop assigns in turn each member of an array to the given
scalar and then executes the block of code.

foreach <scalar> (<array>) {
    <code>
}
3 CONTROLLING PERL                                                         11


    To look at each key/value pair in associative array, use the keys function
like as follows.

%aug_birthdays = (’Robert’ => 10,
                ’Florence’ => 15,
                ’David’ => 25);
foreach $person (keys %aug_birthdays) {
    print "$person’s birthday is Aug $aug_birthdays{$person}";
}

3.2.1   Controlling Loops
Perl has two statements for controlling how a loop is executed. They are
summarized below.

next skip the rest of the code in this loop and go on to the next iteration.

last exit out of this loop.

3.3     Subroutines
Subroutines provide a convenient mechanism for packaging up code that you
want to execute in many different places. They can be given arguments and
may return values. In this case, subroutines can be used as functions. The
most simple subroutine takes no arguments and returns no values.

sub my_print
{
    print "hellon";
}

   To call a subroutine, either place an ampersand in front of the subroutine
name, or follow the name with a pair of parentheses. A bare word followed
by a semicolon may also be executed as a subroutine in some circumstances
(but avoid doing that).

# all of the following do the same thing
&my_print;
my_print();
my_print;
3 CONTROLLING PERL                                                        12


   To call a subroutine with arguments, put a list of arguments in the paren-
theses after the subroutine name.

my_print("hello");

   To get the arguments passed to a function, you must use the perl special
variable ‘ ’. As indicated by the prefix, this variable is an array of all the
arguments passed to the subroutine. To make the above code work, change
the my print subroutine thus:

sub my_print
{
    print "$_[0]n";
}

    The last thing you need to know is how to return a value from a function.
This is actually the most silly of them all. The programmer doesn’t have
to specifically tell Perl what to return from a subroutine. Perl just returns
the result of the last expression in the subroutine. For example, to write a
recursive factorial subroutine for perl, you could say:

sub factorial
{
    if ($_[0] == 0 {
        1;
    }
    else {
        $_[0] * factorial($_[0]-1);
    }
}
#
# and to use it...
$result = factorial(6);
print "$resultn";
#
# prints "720"

3.3.1   Localization and Declaration
Up to this point we’ve neglected to talk about variable declaration or scope
inside Perl. In Perl variables do not need to be declared, but they don’t
4 MONKEY READ, MONKEY WRITE                                                   13


have to be. (remember TMTOWTDI). The benefits of declaring variables
are increased code readability and also a little more control over scope. You
see, in Perl variables are global by default. Whether the variable is initialized
in a subroutine, loop, or elsewhere, it is visible to the entire rest of the
script. Sometimes this is useful, but often it may not be. Perl provides two
mechanisms for declaring/scoping variables, local, and my (we’ll pretend for
now that our doesn’t exist).

local performs dynamic scoping on a variable by giving a global variable a
     temporary value. In most cases, this is not what you want and therefore
     you should avoid local declarations.

my performs lexical scoping on a variable. This is almost always what you
     want, so use it!


4     Monkey Read, Monkey Write
5     Search and Destroy, etc.
One of the most useful parts of perl is probably its facility for using regular
expressions. Regular expressions are little bits of code that describe a piece
of text. Perl is not alone in its use of regular expressions. In fact they are
so useful that most computer langauges either have them build in or have
regular expression libraries build for them. What is presented here is only
a miniscule subset of what can be done with regular expressions, but whole
books could be written on them (in fact one has – see the references). You
will definitely want to learn more about regular expressions as you start to
use Perl.

5.1    Regular Expressions
Regular expressions describe a bit of text. In perl, we can perform three basic
operations with regular expressions: matching, capturing, and substitution.
Let’s see what Perl’s regular expressions can do with the string:

$log_line = ’208.190.213.12 - - [16/Aug/2001:07:49:29 -0500]’ .
            ’"GET /apache_pb.gif HTTP/1.1" 200 2326’;

which is a line from the access log of an Apache HTTP server.
5 SEARCH AND DESTROY, ETC.                                                 14


5.1.1   Matching
With matching, we can see if the the text conforms to a certain description.
In the most simple case, we can check if the text contains a certain sequence
of characters. In the following example, we check if the string $log line
contains the word “apache pb”, which it does. The ‘= ’ operator binds a
string to a regular expression and returns ‘true’ if the string matches the
expression.
# matching a string to a string
$log_line =~ /apache_pb/; # returns true
    Regular expressions also provide something called a “character class”
which can match a certain set of characters at the point it appears in the
regular expression. Regular expressions also include facilities for specifying
how many characters in the text being evaluated should match each char-
acter in the regular expression. Thirdly, a regular expression may specify
where a match should occur. The exact syntax for these facilities is beyond
the scope of this tutorial, but you can peruse the following examples for a
taste of regular expressions.
# a simple example
$log_line =~ /^[0-9]+.[0-9]+.[0-9]+.[0-9]+/;
#
# or, a much more convoluted example
$ipnum = qr/([0-1]?dd?|2[0-4]d|25[0-5])/;
$log_line =~ /^$ipnum.$ipnum.$ip_num.$ip_nums/;
#
# and finally, a decent compromise
$log_line =~ /^d{1,3}.d{1,3}.d{1,3}.d{1,3}s/;
    All these regular expressions will match the IP address at the beggin-
ing of $log line, but they aren’t all quite the same. The first will match
any sequence of four integers separated by periods (208.190.213.12 and
1.45.3.999 and 314156.2171828.1618.1412). The second will match only
valid ip addresses and 0.0.0.0 – not a valid ip address, but close. The third
one falls somewhere in the middle, and should be sufficient for our purposes.

5.1.2   Capturing
In perl, you can slurp up any text matched in a regular expression by putting
parentheses around it. The parenthesized parts of a successful regular expres-
sion match will be put in the variables $1, $2, $3, ... in order according
5 SEARCH AND DESTROY, ETC.                                                    15


to where the parenthesis are in the regular expression. For example, the
following regular expression will put the four parts of the ip address in $1,
$2, $3, and $4.

$log_line =~ /^(d+).(d+).(d+).(d+)s/;

   altrernatively, if we wanted to grab the whole ip address in one operation,
we could put the parentheses around the whole ip address expression.

$log_line = /^(d+.d+.d+.d+)s/;

5.1.3   Substitution
Finally, we take a brief look at the substitution capabilities of perl. Substitu-
tion is most simply described in the analogy to search and replace operation
in many text editors. The substitution operator (s/<find>/<replace>/)
has two parts. The first part specifies a regular expression to find, and the
second part specifies some text to replace it with. See if you can follow the
following example.

$text = "I built my house on the sand.";
$text =~ s/sand/rock/;
print "$textn";
# prints "I built my house on the rock."

   Basically, the regular expression stops when it matches the word “sand”
and then replaces that match with the word “rock”. If you wanted to, say,
change all the o’s to 0’s in a string, then you’d have to use the ‘
g” modifier to tell Perl to keep going after it finds one match.

$text = "more tomes roam rome";
$text =~ s/o/0/g;
print "$textn";
# prints "m0re t0mes r0am r0me"

5.2     Summary
The preceding discussion on regular expressions is really much too brief,
but it would really require a complete new tutorial to fully desctibe regular
expressions in Perl (or any other language, for that matter). Nevertheless,
there is much more information online about regular expressions, or you can
REFERENCES                                                                  16


check out some of the references to see what they have to say about them
(much more than I’ve said).
    Nevertheless, this section should have given you at least a glimpse of what
is possible with regular expressions.


References
 [1] Friedel, Jeffrey E. F.. Mastering Regular Expressions. Cambridge:
     O’Reilly, Dec 1998.

 [2] Srinivasan, Sriram. Advanced Perl Programming Cambridge: O’Reilly,
     August 1997.

 [3] Wall, Larry, Tom Christiansen & Jon Orwant. Programming Perl Cam-
     bridge: O’Reilly, July 2000.

Mais conteúdo relacionado

Mais procurados

Regular expressions in Perl
Regular expressions in PerlRegular expressions in Perl
Regular expressions in PerlGirish Manwani
 
P H P Part I, By Kian
P H P  Part  I,  By  KianP H P  Part  I,  By  Kian
P H P Part I, By Kianphelios
 
Perl 101 - The Basics of Perl Programming
Perl  101 - The Basics of Perl ProgrammingPerl  101 - The Basics of Perl Programming
Perl 101 - The Basics of Perl ProgrammingUtkarsh Sengar
 
Ruby from zero to hero
Ruby from zero to heroRuby from zero to hero
Ruby from zero to heroDiego Lemos
 
PHP7. Game Changer.
PHP7. Game Changer. PHP7. Game Changer.
PHP7. Game Changer. Haim Michael
 
Strings,patterns and regular expressions in perl
Strings,patterns and regular expressions in perlStrings,patterns and regular expressions in perl
Strings,patterns and regular expressions in perlsana mateen
 
Perl programming language
Perl programming languagePerl programming language
Perl programming languageElie Obeid
 
perl usage at database applications
perl usage at database applicationsperl usage at database applications
perl usage at database applicationsJoe Jiang
 
Unit 1-scalar expressions and control structures
Unit 1-scalar expressions and control structuresUnit 1-scalar expressions and control structures
Unit 1-scalar expressions and control structuressana mateen
 

Mais procurados (18)

Regular expressions in Perl
Regular expressions in PerlRegular expressions in Perl
Regular expressions in Perl
 
Perl slid
Perl slidPerl slid
Perl slid
 
C# slid
C# slidC# slid
C# slid
 
P H P Part I, By Kian
P H P  Part  I,  By  KianP H P  Part  I,  By  Kian
P H P Part I, By Kian
 
Perl 101 - The Basics of Perl Programming
Perl  101 - The Basics of Perl ProgrammingPerl  101 - The Basics of Perl Programming
Perl 101 - The Basics of Perl Programming
 
Ruby from zero to hero
Ruby from zero to heroRuby from zero to hero
Ruby from zero to hero
 
PHP7. Game Changer.
PHP7. Game Changer. PHP7. Game Changer.
PHP7. Game Changer.
 
Php Learning show
Php Learning showPhp Learning show
Php Learning show
 
Licão 13 functions
Licão 13 functionsLicão 13 functions
Licão 13 functions
 
Strings,patterns and regular expressions in perl
Strings,patterns and regular expressions in perlStrings,patterns and regular expressions in perl
Strings,patterns and regular expressions in perl
 
Awk essentials
Awk essentialsAwk essentials
Awk essentials
 
00 ruby tutorial
00 ruby tutorial00 ruby tutorial
00 ruby tutorial
 
Perl_Part6
Perl_Part6Perl_Part6
Perl_Part6
 
Perl Introduction
Perl IntroductionPerl Introduction
Perl Introduction
 
Perl programming language
Perl programming languagePerl programming language
Perl programming language
 
perl usage at database applications
perl usage at database applicationsperl usage at database applications
perl usage at database applications
 
Unit 1-scalar expressions and control structures
Unit 1-scalar expressions and control structuresUnit 1-scalar expressions and control structures
Unit 1-scalar expressions and control structures
 
Intro to Perl and Bioperl
Intro to Perl and BioperlIntro to Perl and Bioperl
Intro to Perl and Bioperl
 

Destaque

OB9-G-language-Arakawa
OB9-G-language-ArakawaOB9-G-language-Arakawa
OB9-G-language-Arakawatutorialsruby
 
bluejay_basic_tutorial
bluejay_basic_tutorialbluejay_basic_tutorial
bluejay_basic_tutorialtutorialsruby
 
CC200-20ProductIntroductionEU
CC200-20ProductIntroductionEUCC200-20ProductIntroductionEU
CC200-20ProductIntroductionEUtutorialsruby
 
Tutorial%20fivestar%20cck%20views
Tutorial%20fivestar%20cck%20viewsTutorial%20fivestar%20cck%20views
Tutorial%20fivestar%20cck%20viewstutorialsruby
 
advanced%20corel%20draw
advanced%20corel%20drawadvanced%20corel%20draw
advanced%20corel%20drawtutorialsruby
 

Destaque (7)

OB9-G-language-Arakawa
OB9-G-language-ArakawaOB9-G-language-Arakawa
OB9-G-language-Arakawa
 
bluejay_basic_tutorial
bluejay_basic_tutorialbluejay_basic_tutorial
bluejay_basic_tutorial
 
tutorial
tutorialtutorial
tutorial
 
CC200-20ProductIntroductionEU
CC200-20ProductIntroductionEUCC200-20ProductIntroductionEU
CC200-20ProductIntroductionEU
 
Tutorial%20fivestar%20cck%20views
Tutorial%20fivestar%20cck%20viewsTutorial%20fivestar%20cck%20views
Tutorial%20fivestar%20cck%20views
 
AlignDistribute
AlignDistributeAlignDistribute
AlignDistribute
 
advanced%20corel%20draw
advanced%20corel%20drawadvanced%20corel%20draw
advanced%20corel%20draw
 

Semelhante a perltut

Beginning Perl
Beginning PerlBeginning Perl
Beginning PerlDave Cross
 
Tutorial perl programming basic eng ver
Tutorial perl programming basic eng verTutorial perl programming basic eng ver
Tutorial perl programming basic eng verQrembiezs Intruder
 
Introduction to Perl - Day 1
Introduction to Perl - Day 1Introduction to Perl - Day 1
Introduction to Perl - Day 1Dave Cross
 
perl course-in-mumbai
 perl course-in-mumbai perl course-in-mumbai
perl course-in-mumbaivibrantuser
 
perl course-in-mumbai
perl course-in-mumbaiperl course-in-mumbai
perl course-in-mumbaivibrantuser
 
Lecture 3 Perl & FreeBSD administration
Lecture 3 Perl & FreeBSD administrationLecture 3 Perl & FreeBSD administration
Lecture 3 Perl & FreeBSD administrationMohammed Farrag
 
Introduction to Perl
Introduction to PerlIntroduction to Perl
Introduction to PerlDave Cross
 
Plunging Into Perl While Avoiding the Deep End (mostly)
Plunging Into Perl While Avoiding the Deep End (mostly)Plunging Into Perl While Avoiding the Deep End (mostly)
Plunging Into Perl While Avoiding the Deep End (mostly)Roy Zimmer
 
What is the general format for a Try-Catch block Assume that amt l .docx
 What is the general format for a Try-Catch block  Assume that amt l .docx What is the general format for a Try-Catch block  Assume that amt l .docx
What is the general format for a Try-Catch block Assume that amt l .docxajoy21
 
Tutorial on Regular Expression in Perl (perldoc Perlretut)
Tutorial on Regular Expression in Perl (perldoc Perlretut)Tutorial on Regular Expression in Perl (perldoc Perlretut)
Tutorial on Regular Expression in Perl (perldoc Perlretut)FrescatiStory
 
Advanced perl finer points ,pack&amp;unpack,eval,files
Advanced perl   finer points ,pack&amp;unpack,eval,filesAdvanced perl   finer points ,pack&amp;unpack,eval,files
Advanced perl finer points ,pack&amp;unpack,eval,filesShankar D
 

Semelhante a perltut (20)

newperl5
newperl5newperl5
newperl5
 
Perl Basics with Examples
Perl Basics with ExamplesPerl Basics with Examples
Perl Basics with Examples
 
Beginning Perl
Beginning PerlBeginning Perl
Beginning Perl
 
Tutorial perl programming basic eng ver
Tutorial perl programming basic eng verTutorial perl programming basic eng ver
Tutorial perl programming basic eng ver
 
PERL.ppt
PERL.pptPERL.ppt
PERL.ppt
 
Introduction to Perl - Day 1
Introduction to Perl - Day 1Introduction to Perl - Day 1
Introduction to Perl - Day 1
 
perl course-in-mumbai
 perl course-in-mumbai perl course-in-mumbai
perl course-in-mumbai
 
perl course-in-mumbai
perl course-in-mumbaiperl course-in-mumbai
perl course-in-mumbai
 
Lecture 3 Perl & FreeBSD administration
Lecture 3 Perl & FreeBSD administrationLecture 3 Perl & FreeBSD administration
Lecture 3 Perl & FreeBSD administration
 
Perl intro
Perl introPerl intro
Perl intro
 
Theperlreview
TheperlreviewTheperlreview
Theperlreview
 
Introduction to Perl
Introduction to PerlIntroduction to Perl
Introduction to Perl
 
Plunging Into Perl While Avoiding the Deep End (mostly)
Plunging Into Perl While Avoiding the Deep End (mostly)Plunging Into Perl While Avoiding the Deep End (mostly)
Plunging Into Perl While Avoiding the Deep End (mostly)
 
Perl_Part4
Perl_Part4Perl_Part4
Perl_Part4
 
Introduction to Perl
Introduction to PerlIntroduction to Perl
Introduction to Perl
 
What is the general format for a Try-Catch block Assume that amt l .docx
 What is the general format for a Try-Catch block  Assume that amt l .docx What is the general format for a Try-Catch block  Assume that amt l .docx
What is the general format for a Try-Catch block Assume that amt l .docx
 
Tutorial on Regular Expression in Perl (perldoc Perlretut)
Tutorial on Regular Expression in Perl (perldoc Perlretut)Tutorial on Regular Expression in Perl (perldoc Perlretut)
Tutorial on Regular Expression in Perl (perldoc Perlretut)
 
Advanced perl finer points ,pack&amp;unpack,eval,files
Advanced perl   finer points ,pack&amp;unpack,eval,filesAdvanced perl   finer points ,pack&amp;unpack,eval,files
Advanced perl finer points ,pack&amp;unpack,eval,files
 
Cs3430 lecture 15
Cs3430 lecture 15Cs3430 lecture 15
Cs3430 lecture 15
 
python and perl
python and perlpython and perl
python and perl
 

Mais de tutorialsruby

&lt;img src="../i/r_14.png" />
&lt;img src="../i/r_14.png" />&lt;img src="../i/r_14.png" />
&lt;img src="../i/r_14.png" />tutorialsruby
 
TopStyle Help &amp; &lt;b>Tutorial&lt;/b>
TopStyle Help &amp; &lt;b>Tutorial&lt;/b>TopStyle Help &amp; &lt;b>Tutorial&lt;/b>
TopStyle Help &amp; &lt;b>Tutorial&lt;/b>tutorialsruby
 
The Art Institute of Atlanta IMD 210 Fundamentals of Scripting &lt;b>...&lt;/b>
The Art Institute of Atlanta IMD 210 Fundamentals of Scripting &lt;b>...&lt;/b>The Art Institute of Atlanta IMD 210 Fundamentals of Scripting &lt;b>...&lt;/b>
The Art Institute of Atlanta IMD 210 Fundamentals of Scripting &lt;b>...&lt;/b>tutorialsruby
 
&lt;img src="../i/r_14.png" />
&lt;img src="../i/r_14.png" />&lt;img src="../i/r_14.png" />
&lt;img src="../i/r_14.png" />tutorialsruby
 
&lt;img src="../i/r_14.png" />
&lt;img src="../i/r_14.png" />&lt;img src="../i/r_14.png" />
&lt;img src="../i/r_14.png" />tutorialsruby
 
Standardization and Knowledge Transfer – INS0
Standardization and Knowledge Transfer – INS0Standardization and Knowledge Transfer – INS0
Standardization and Knowledge Transfer – INS0tutorialsruby
 
0047ecaa6ea3e9ac0a13a2fe96f4de3bfd515c88f5d90c1fae79b956363d7f02c7fa060269
0047ecaa6ea3e9ac0a13a2fe96f4de3bfd515c88f5d90c1fae79b956363d7f02c7fa0602690047ecaa6ea3e9ac0a13a2fe96f4de3bfd515c88f5d90c1fae79b956363d7f02c7fa060269
0047ecaa6ea3e9ac0a13a2fe96f4de3bfd515c88f5d90c1fae79b956363d7f02c7fa060269tutorialsruby
 
0047ecaa6ea3e9ac0a13a2fe96f4de3bfd515c88f5d90c1fae79b956363d7f02c7fa060269
0047ecaa6ea3e9ac0a13a2fe96f4de3bfd515c88f5d90c1fae79b956363d7f02c7fa0602690047ecaa6ea3e9ac0a13a2fe96f4de3bfd515c88f5d90c1fae79b956363d7f02c7fa060269
0047ecaa6ea3e9ac0a13a2fe96f4de3bfd515c88f5d90c1fae79b956363d7f02c7fa060269tutorialsruby
 
BloggingWithStyle_2008
BloggingWithStyle_2008BloggingWithStyle_2008
BloggingWithStyle_2008tutorialsruby
 
BloggingWithStyle_2008
BloggingWithStyle_2008BloggingWithStyle_2008
BloggingWithStyle_2008tutorialsruby
 
cascadingstylesheets
cascadingstylesheetscascadingstylesheets
cascadingstylesheetstutorialsruby
 
cascadingstylesheets
cascadingstylesheetscascadingstylesheets
cascadingstylesheetstutorialsruby
 

Mais de tutorialsruby (20)

&lt;img src="../i/r_14.png" />
&lt;img src="../i/r_14.png" />&lt;img src="../i/r_14.png" />
&lt;img src="../i/r_14.png" />
 
TopStyle Help &amp; &lt;b>Tutorial&lt;/b>
TopStyle Help &amp; &lt;b>Tutorial&lt;/b>TopStyle Help &amp; &lt;b>Tutorial&lt;/b>
TopStyle Help &amp; &lt;b>Tutorial&lt;/b>
 
The Art Institute of Atlanta IMD 210 Fundamentals of Scripting &lt;b>...&lt;/b>
The Art Institute of Atlanta IMD 210 Fundamentals of Scripting &lt;b>...&lt;/b>The Art Institute of Atlanta IMD 210 Fundamentals of Scripting &lt;b>...&lt;/b>
The Art Institute of Atlanta IMD 210 Fundamentals of Scripting &lt;b>...&lt;/b>
 
&lt;img src="../i/r_14.png" />
&lt;img src="../i/r_14.png" />&lt;img src="../i/r_14.png" />
&lt;img src="../i/r_14.png" />
 
&lt;img src="../i/r_14.png" />
&lt;img src="../i/r_14.png" />&lt;img src="../i/r_14.png" />
&lt;img src="../i/r_14.png" />
 
Standardization and Knowledge Transfer – INS0
Standardization and Knowledge Transfer – INS0Standardization and Knowledge Transfer – INS0
Standardization and Knowledge Transfer – INS0
 
xhtml_basics
xhtml_basicsxhtml_basics
xhtml_basics
 
xhtml_basics
xhtml_basicsxhtml_basics
xhtml_basics
 
xhtml-documentation
xhtml-documentationxhtml-documentation
xhtml-documentation
 
xhtml-documentation
xhtml-documentationxhtml-documentation
xhtml-documentation
 
CSS
CSSCSS
CSS
 
CSS
CSSCSS
CSS
 
0047ecaa6ea3e9ac0a13a2fe96f4de3bfd515c88f5d90c1fae79b956363d7f02c7fa060269
0047ecaa6ea3e9ac0a13a2fe96f4de3bfd515c88f5d90c1fae79b956363d7f02c7fa0602690047ecaa6ea3e9ac0a13a2fe96f4de3bfd515c88f5d90c1fae79b956363d7f02c7fa060269
0047ecaa6ea3e9ac0a13a2fe96f4de3bfd515c88f5d90c1fae79b956363d7f02c7fa060269
 
0047ecaa6ea3e9ac0a13a2fe96f4de3bfd515c88f5d90c1fae79b956363d7f02c7fa060269
0047ecaa6ea3e9ac0a13a2fe96f4de3bfd515c88f5d90c1fae79b956363d7f02c7fa0602690047ecaa6ea3e9ac0a13a2fe96f4de3bfd515c88f5d90c1fae79b956363d7f02c7fa060269
0047ecaa6ea3e9ac0a13a2fe96f4de3bfd515c88f5d90c1fae79b956363d7f02c7fa060269
 
HowTo_CSS
HowTo_CSSHowTo_CSS
HowTo_CSS
 
HowTo_CSS
HowTo_CSSHowTo_CSS
HowTo_CSS
 
BloggingWithStyle_2008
BloggingWithStyle_2008BloggingWithStyle_2008
BloggingWithStyle_2008
 
BloggingWithStyle_2008
BloggingWithStyle_2008BloggingWithStyle_2008
BloggingWithStyle_2008
 
cascadingstylesheets
cascadingstylesheetscascadingstylesheets
cascadingstylesheets
 
cascadingstylesheets
cascadingstylesheetscascadingstylesheets
cascadingstylesheets
 

Último

Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersNicole Novielli
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxBkGupta21
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxLoriGlavin3
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
What is Artificial Intelligence?????????
What is Artificial Intelligence?????????What is Artificial Intelligence?????????
What is Artificial Intelligence?????????blackmambaettijean
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 

Último (20)

Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software Developers
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptx
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
What is Artificial Intelligence?????????
What is Artificial Intelligence?????????What is Artificial Intelligence?????????
What is Artificial Intelligence?????????
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 

perltut

  • 1. ACM Reflections Projections Perl Tutorial Stephen Saville 14 Oct 2001 1 A Brief Introduction to Perl Now, everybody’s solution to a system administration problem is not to write a new scripting language, but that’s exactly what Larry Wall did back in 1987 when he found the news reader rn (which he also wrote) to be insufficient for the task. In the years since then, Perl, the ”Practical Extraction and Report Langauge,” or ”Pathologically Eclectic Rubbish Lister,” depending on who you talk to, has grown from a one-person hack to a community supported language with ports for almost every modern operating system available. In many cases Perl has become THE tool of choice for system adminstration, because it can actually do just about anything. With its powerful and well-developed module system, including tie-ins to many useful C libraries, the possibilities with perl and endless. Nevertheless, most of these uses are beyond the scope of this tutorial. The focus of this tutorial is rather on the Perl language itself, and a few of its main strengths. After working through this tutorial or attending the Reflections Projections workshop, you should have a basic grasp of the fundamental aspects of the Perl langauge, and enough knowledge to get something out of the references listed at the end of this tutorial. 1.1 Starting Perl The simplest way to start Perl is just by running the Perl program with no arguments. In this tutorial, every line that begins with a ‘%’ should be interpreted as a shell commmand. So type ‘perl’ on the command line and press enter: % perl 1
  • 2. 1 A BRIEF INTRODUCTION TO PERL 2 You have now invoked the Perl interpreter! Patienly the interpreter sits there, waiting for you to type in some Perl code for it to compile. Let’s give it some Perl to play with: % perl print "I like Perln"; When you’re done, just type Ctrl-D to tell Perl you have finished writing the program. Now, the interpreter can go to work executing your Perl code: % perl print "I like Perln"; I like Perl As you can see, once Perl finishes executing your code, it returns you back to the command prompt so you can do whatever other work you might want to accomplish. However, this is not the only way to use Perl, for by the Perl motto: ”There’s more than one way to do it” (often abbreviated TMTOWTDI). You could also have created a file called, say “script.pl”, with some Perl code in it and then run it through the Perl interpreter with the command: % perl script.pl Alternatively, you could use the -e switch to have Perl run a small bit of code. This method is called a Perl one-liner. % perl -e ’print("I like Perl");’ Finally (for our purposes), you could make the a file containing Perl code (a script) executable by either setting its viewer to be the Perl program in Windows or putting the following text on the first line of a script file in Unix: #!/usr/bin/perl -w Under Unix, you would also have to make the program executable before you could run it by setting the execute file permission with: % chmod a+x script.pl Then, the perl program could be run with the command: % ./script.pl
  • 3. 2 THE ESSENCE OF PERL 3 2 The Essence of Perl Perl takes inspiration from both scripting langauges and compiled languages like C. Generally, whitespace is ignored and lines must be terminated with a semicolon (;). However, comments are formatted as in shell scripts. Every character on a line after a associative array (#) is a comment and ignored by the compiler. Perl has no way to comment out blocks of code like C’s /* ...*/ sequence. In summary: #!/usr/bin/perl -w # this line is a comment print "this is a statement, terminated by a semicolonn"; # comments here too print "proper formatting", " is not", " necessary", " but it is", # comment in the middle of a statement " prefferedn"; # # print "this statement will not be executedn"; 2.1 Variables Perl variables fall into just three different types: scalars, arrays, and asso- ciative arrays. The simple type of a variable is indicated by the character which begins the variable name (either The variable name, or ”identifier” may contain letters, numbers, and the underscore ‘ ’. Identifiers, like all of perl are case sensitive, so ‘$var’ is a different variable than ‘$VAR’. The variables are summarized below and will be explored more completely in the following sections. scalar • identifier begins with a dollar sign ($) • may contain an integer, floating-point number, or string array • identifier begins with the at sign (@) • contains an array of scalars referenced by integers. • use @array[<integer>] to access an array element
  • 4. 2 THE ESSENCE OF PERL 4 associative array • identifier begins with the percent sign (%) • also called an “associative array” • contains a collection of scalars referenced by scalars • use %associative array{<scalar>} to access an associative ar- ray element 2.2 Scalars and Literals Unlike some other langauges, you don’t have to tell Perl what kind of type a scalar will be — just assign it a value using the equals (=) sign: $exclamation = "woohoo!"; $answer = 42; $pi = 3.1415927; $exclamation = 132; # perfectly legal For the most part, numerical literals are fairly straightforward in Perl. Like in C, you can enter an integer in hex or octal by prepending ‘0x’ or ’0’ to the beggining of the number. Strings literals are nevertheless more interesting animals. 2.2.1 Strings Strings can be specified in actually a miriad of different ways (remember TM- TOWTDI), but we’re only going to concentrate on the three most common. single quotes (’) single quoted strings such as ’neato, a string’ are in- terpreted literally. This literally means that you can put anything be- tween single quotes, and Perl will include it in the string. To put an apostrophe (’) in the string you need to escape it with a backslash (’). $password = ’sor$h&lm’; # dollar sign is not interpolated $passphrase = ’I’ll need $10 for that’; # need to escape the apostrophe
  • 5. 2 THE ESSENCE OF PERL 5 double quotes (") double quoted strings like "a string with a $string in it" have variable interpretation performed on them. This means that wherever a variable is included in the string, that variable will be replaced by its value in the final text. $price = 20; print "why does this fish cost $price dollars?n"; # will print out "why does this fish cost 20 dollars?" backticks (‘) the backticks operator performs variable interpretation on the string, but then the resulting string is executed as a shell command, and the output of the command is returned. # on unix kernels, the uname command returns selected # information about the system its running on. the -sr # switch prints out the system type and version $system = ‘uname -sr‘; print "$systemn"; # will print "SunOS 5.8" on a machine running # Solaris version 5.8 Next, we note the operators usable on strings in Table 1. Note that they are listed in order of precedence. Table 1: String Operators operator description . string concatation .= string concatation with assignment
  • 6. 2 THE ESSENCE OF PERL 6 2.2.2 Numbers As mentioned earlier, numbers are fairly straightforward in Perl. The literals are the same as in C, and the operators are fairly equivalent. For complete- ness, I’ve included table of arithmetic operators for completeness. Use Table 2 for reference. Operators are ordered by precedence. Table 2: Arithmetic Operators operator description example - unary negation -$a -- incriment $a- - ++ decrement $a++ ** exponentiation $a ** $b ** multiplication $a * $b / division $a / $b % modulus $a % $b + addition $a + $b - subtraction $a - $b 2.3 Arrays Arrays in Perl are a bit like arrays in C, but only a bit. For one thing, arrays can contain any random assortment of scalars. For another, you don’t actually have to fill up every element of an array, nor do you need to declare the size of an array. All those technical details that made C programming tedious are taken care of by Perl. As in C, array indexes start at 0. Here are some examples of arrays: # just put some values into an array $a[0] = 12; $a[3] = "hi"; $a[0] = ’cool’; # # note that the @ sign is replaced by a $ sign when # assigning to an element of an array. just think # about a[0] as a scalar, not an array # #assigning arrays to arrays @b = @a; # using lists to initialize an arrays @a = ("Pete", 23, ’Perl Monger’);
  • 7. 2 THE ESSENCE OF PERL 7 @b = (555-2043); @c = (@a, @b); # @c now contains the elements in @a followed by the # elements in @b # # and many more... As you can see, arrays in Perl are pretty easy to use and flexible. Note the use of lists above. Lists are used many times in Perl, but the syntax is so simple that the reader should be able to pick it up in the course of these two sections. 2.4 Associative Arrays The Perl associative array or ”hash” data type is probably one of Perl’s most useful features. An associative array is an special kind of an array that is indexed by strings. That’s a very simple definition for an extremely powerful tool. Working with perl, you’ll probably find yourself using associative arrays in many unique and creative ways simply because they are so simple. Here’s just a few examples: # # use the dollar sign just like for arrays $days{’December’} = 31; # # other scalar indices are implicitly translated into strings $height{0} = 4; $height{’0’} = 4; # the above two assignments mean exactly the same thing # # a bunch of elements can be added to an associative array by # assigning to it a list of key, value pairs. %jobs = (’Andy’, ’Cook’, ’Denny’, ’Teacher’, ’Patrick’, ’Student’); # print "$jobs{’Andy’}n" # prints ’Cook’ # # or, with a little syntactic sugar %authors = (’Kernignham and Richie’ => ’The C Programming Language’, ’Dubois’ => ’MySQL’, ’Stewart’ => ’Calculus: Early Transcendentals’);
  • 8. 3 CONTROLLING PERL 8 2.5 Conditionals Comparisons in Perl can be performed between any two scalars, provided they are either both strings or both numbers. The comparison operators are nevertheless different for strings and numbers. Table 3: Comparison Operators strings numbers description eq == equality ne != inequality gt > greater than ge >= greater than or equal lt < less than le <= less than or equal cmp <=> comparison, returns -1,0,1 You can also use the boolean operators && (AND) and || (OR) to build up more complicated conditionals. And now for the truths and the lies... # values that evaluate to true 1; # duh! ("a","b"); # the list has elements " "; # whitespace is true "false"; # so are strings "00"; # a string # values that evaluate to false 0; # by convention (); # list is empty ""; # string is zero-length "0"; # interpreted as zero 3 Controlling Perl Perl has if statements to control execution and do/while as well as for and foreach loops to repeat series of commands. Also, for reusing code, Perl provides subroutines. The syntax for these constructs is much like C, but not quite, so pay attention. Those fine points are the worst.
  • 9. 3 CONTROLLING PERL 9 3.1 Conditional Statements The if, else, elsif statements in Perl conditionally execute a piece of code based on the value of a conditional expression. The basic form of the if and elsif statements is if/elsif (<conditional>) {<code>}. The curly braces are required. Perl will give you an error if you forget to put them in. In general, a conditional statement is an if statement followed by zero or more elsif statements and an optional else statement. The code in the first if or elsif associated with a true conditional will be executed. The code in the else statement will be executed if none of the coditionals are true. Following is an example: # remember, only the first if/else with a true # conditional gets executed # if (1) { print("this message will always print"); } elseif (1) { print("this message will never print"); } # # regular expressions can be used in conditionals too # $text = "words or words or words"; if ($text =~ /letters/) { print (""$text" includes the word "letters"n"); } elsif ($text =~ /words/) { print (""$text" includes the word "words"n"); else { print (""$text" is most uninterestingn"); } 3.2 Loops Sometimes you want to execute a piece of code many times in succession. Instead of forcing you to retype the code, Perl has loops that allow for con- trolled repetition of a piece of code. The most simple form of a loop is the while loop that executes a piece of code as long as a conditional expression is true. As before, the curly braces are not optional.
  • 10. 3 CONTROLLING PERL 10 while (<conditional>) { <code> } Also, Perl has a do...while statement that is like a while loop, but it is executed at least once. do { <code> } while (<conditional>) In addition, Perl has the more complicated for loop. The for loop is useful for doing something a specific number of times or possibly executing some code for each member of an array. for (<init>; <conditional>; <step>) { <code> } and an example... # print "Have a nice day" five times # for ($n = 0; $n < 5; $n++) { print "Have a nice dayn"; } # # print the string "123456789"; # for ($num = 1; $num < 10; $num++) { print $num; } # Finally, perl has a very special loop for iterating over the contents of an array. the foreach loop assigns in turn each member of an array to the given scalar and then executes the block of code. foreach <scalar> (<array>) { <code> }
  • 11. 3 CONTROLLING PERL 11 To look at each key/value pair in associative array, use the keys function like as follows. %aug_birthdays = (’Robert’ => 10, ’Florence’ => 15, ’David’ => 25); foreach $person (keys %aug_birthdays) { print "$person’s birthday is Aug $aug_birthdays{$person}"; } 3.2.1 Controlling Loops Perl has two statements for controlling how a loop is executed. They are summarized below. next skip the rest of the code in this loop and go on to the next iteration. last exit out of this loop. 3.3 Subroutines Subroutines provide a convenient mechanism for packaging up code that you want to execute in many different places. They can be given arguments and may return values. In this case, subroutines can be used as functions. The most simple subroutine takes no arguments and returns no values. sub my_print { print "hellon"; } To call a subroutine, either place an ampersand in front of the subroutine name, or follow the name with a pair of parentheses. A bare word followed by a semicolon may also be executed as a subroutine in some circumstances (but avoid doing that). # all of the following do the same thing &my_print; my_print(); my_print;
  • 12. 3 CONTROLLING PERL 12 To call a subroutine with arguments, put a list of arguments in the paren- theses after the subroutine name. my_print("hello"); To get the arguments passed to a function, you must use the perl special variable ‘ ’. As indicated by the prefix, this variable is an array of all the arguments passed to the subroutine. To make the above code work, change the my print subroutine thus: sub my_print { print "$_[0]n"; } The last thing you need to know is how to return a value from a function. This is actually the most silly of them all. The programmer doesn’t have to specifically tell Perl what to return from a subroutine. Perl just returns the result of the last expression in the subroutine. For example, to write a recursive factorial subroutine for perl, you could say: sub factorial { if ($_[0] == 0 { 1; } else { $_[0] * factorial($_[0]-1); } } # # and to use it... $result = factorial(6); print "$resultn"; # # prints "720" 3.3.1 Localization and Declaration Up to this point we’ve neglected to talk about variable declaration or scope inside Perl. In Perl variables do not need to be declared, but they don’t
  • 13. 4 MONKEY READ, MONKEY WRITE 13 have to be. (remember TMTOWTDI). The benefits of declaring variables are increased code readability and also a little more control over scope. You see, in Perl variables are global by default. Whether the variable is initialized in a subroutine, loop, or elsewhere, it is visible to the entire rest of the script. Sometimes this is useful, but often it may not be. Perl provides two mechanisms for declaring/scoping variables, local, and my (we’ll pretend for now that our doesn’t exist). local performs dynamic scoping on a variable by giving a global variable a temporary value. In most cases, this is not what you want and therefore you should avoid local declarations. my performs lexical scoping on a variable. This is almost always what you want, so use it! 4 Monkey Read, Monkey Write 5 Search and Destroy, etc. One of the most useful parts of perl is probably its facility for using regular expressions. Regular expressions are little bits of code that describe a piece of text. Perl is not alone in its use of regular expressions. In fact they are so useful that most computer langauges either have them build in or have regular expression libraries build for them. What is presented here is only a miniscule subset of what can be done with regular expressions, but whole books could be written on them (in fact one has – see the references). You will definitely want to learn more about regular expressions as you start to use Perl. 5.1 Regular Expressions Regular expressions describe a bit of text. In perl, we can perform three basic operations with regular expressions: matching, capturing, and substitution. Let’s see what Perl’s regular expressions can do with the string: $log_line = ’208.190.213.12 - - [16/Aug/2001:07:49:29 -0500]’ . ’"GET /apache_pb.gif HTTP/1.1" 200 2326’; which is a line from the access log of an Apache HTTP server.
  • 14. 5 SEARCH AND DESTROY, ETC. 14 5.1.1 Matching With matching, we can see if the the text conforms to a certain description. In the most simple case, we can check if the text contains a certain sequence of characters. In the following example, we check if the string $log line contains the word “apache pb”, which it does. The ‘= ’ operator binds a string to a regular expression and returns ‘true’ if the string matches the expression. # matching a string to a string $log_line =~ /apache_pb/; # returns true Regular expressions also provide something called a “character class” which can match a certain set of characters at the point it appears in the regular expression. Regular expressions also include facilities for specifying how many characters in the text being evaluated should match each char- acter in the regular expression. Thirdly, a regular expression may specify where a match should occur. The exact syntax for these facilities is beyond the scope of this tutorial, but you can peruse the following examples for a taste of regular expressions. # a simple example $log_line =~ /^[0-9]+.[0-9]+.[0-9]+.[0-9]+/; # # or, a much more convoluted example $ipnum = qr/([0-1]?dd?|2[0-4]d|25[0-5])/; $log_line =~ /^$ipnum.$ipnum.$ip_num.$ip_nums/; # # and finally, a decent compromise $log_line =~ /^d{1,3}.d{1,3}.d{1,3}.d{1,3}s/; All these regular expressions will match the IP address at the beggin- ing of $log line, but they aren’t all quite the same. The first will match any sequence of four integers separated by periods (208.190.213.12 and 1.45.3.999 and 314156.2171828.1618.1412). The second will match only valid ip addresses and 0.0.0.0 – not a valid ip address, but close. The third one falls somewhere in the middle, and should be sufficient for our purposes. 5.1.2 Capturing In perl, you can slurp up any text matched in a regular expression by putting parentheses around it. The parenthesized parts of a successful regular expres- sion match will be put in the variables $1, $2, $3, ... in order according
  • 15. 5 SEARCH AND DESTROY, ETC. 15 to where the parenthesis are in the regular expression. For example, the following regular expression will put the four parts of the ip address in $1, $2, $3, and $4. $log_line =~ /^(d+).(d+).(d+).(d+)s/; altrernatively, if we wanted to grab the whole ip address in one operation, we could put the parentheses around the whole ip address expression. $log_line = /^(d+.d+.d+.d+)s/; 5.1.3 Substitution Finally, we take a brief look at the substitution capabilities of perl. Substitu- tion is most simply described in the analogy to search and replace operation in many text editors. The substitution operator (s/<find>/<replace>/) has two parts. The first part specifies a regular expression to find, and the second part specifies some text to replace it with. See if you can follow the following example. $text = "I built my house on the sand."; $text =~ s/sand/rock/; print "$textn"; # prints "I built my house on the rock." Basically, the regular expression stops when it matches the word “sand” and then replaces that match with the word “rock”. If you wanted to, say, change all the o’s to 0’s in a string, then you’d have to use the ‘ g” modifier to tell Perl to keep going after it finds one match. $text = "more tomes roam rome"; $text =~ s/o/0/g; print "$textn"; # prints "m0re t0mes r0am r0me" 5.2 Summary The preceding discussion on regular expressions is really much too brief, but it would really require a complete new tutorial to fully desctibe regular expressions in Perl (or any other language, for that matter). Nevertheless, there is much more information online about regular expressions, or you can
  • 16. REFERENCES 16 check out some of the references to see what they have to say about them (much more than I’ve said). Nevertheless, this section should have given you at least a glimpse of what is possible with regular expressions. References [1] Friedel, Jeffrey E. F.. Mastering Regular Expressions. Cambridge: O’Reilly, Dec 1998. [2] Srinivasan, Sriram. Advanced Perl Programming Cambridge: O’Reilly, August 1997. [3] Wall, Larry, Tom Christiansen & Jon Orwant. Programming Perl Cam- bridge: O’Reilly, July 2000.