Top Banner
The SFX Administrator‘s Perl 101 Perl 101 Dr. Mathias Kratzer, Bavarian Library Network Center
62

The SFX Administrator's Perl 101 - IGeLU

Feb 12, 2022

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: The SFX Administrator's Perl 101 - IGeLU

TheSFX Administrator‘sPerl 101Perl 101

Dr. Mathias Kratzer, Bavarian Library Network Center

Page 2: The SFX Administrator's Perl 101 - IGeLU

Einleitung START

IntroductionIntroductionWhat is Perl?What is Perl?

What can Perl do for me?Where to find more information?

2

Page 3: The SFX Administrator's Perl 101 - IGeLU

What is Perl?

• according to its UNIX man page it‘s an acronym forPractical Extraction and Report Language– Practical Extraction and Report Language

– Pathologically Eclectic Rubbish Lister ;-)• author: Larry Wall (*1954), American linguist andauthor: Larry Wall ( 1954), American linguist and

programmer• year of publication: 1987• licence: dual open source (GPL + AL)• still ongoing development: currently about 30 official

maintainers plus several hundred volunteers from allmaintainers plus several hundred volunteers from all over the world

3

Page 4: The SFX Administrator's Perl 101 - IGeLU

Is Perl easy or difficult?

• Perl is easy to use, …• but (admittedly) not that easy to learn• … but (admittedly) not that easy to learn.• reason for both: high code density due to operators

and built-in functions with „standard behaviour“• advantage: shorter programs which are easier to

maintain and are less likely to contain bugsdi d d l k i fi l• disadvantage: can tend to look cryptic at first glance

• Any effort is worthwhile: You have to learn Perl only once ... but can use it again and again once ... but can use it again and again

4

Page 5: The SFX Administrator's Perl 101 - IGeLU

What can Perl do for me?

• „Swiss Army Chainsaw of Programming Languages“ • Mission statement by Larry Wall:• Mission statement by Larry Wall:

„Common things should be easy, advanced things should at least be possible.“p

• ... and as if that wasn‘t sufficient: TMTOWTDI• Perl is as good for quick hacks (tiny scripts in order to

f l i k ) f f i lautomate frequently recurring tasks) as for professional software development (cf. SFX)

• ideal for text crunching“ problems (rule of thumb #1:ideal for „text crunching problems (rule of thumb #1: 90% is about text and 10% is about anything else)

5

Page 6: The SFX Administrator's Perl 101 - IGeLU

Perl on the Web

• http://www.perl.org: official homepage of Perl• http://perldoc perl org: official documentation on Perl• http://perldoc.perl.org: official documentation on Perl• http://www.perlmonks.org: free but fast & high-quality

support from the Monastery (also for non-members) pp y ( )• http://www.perl.com: O‘Reilly‘s Perl news site• http://www.cpan.org: homepage of the Comprehensive

P l A hi N k (CPAN) l l f l fPerl Archive Network (CPAN), a completely free pool of Perl modules for almost every imaginable purpose

• http://www activestate com/activeperl: free and easy tohttp://www.activestate.com/activeperl: free and easy to install Perl interpreter for Windows and Mac OS X

6

Page 7: The SFX Administrator's Perl 101 - IGeLU

Literature on Perl

• Learning Perlaka Llama book“ b R d l L S h t T Ph i B i D Faka „Llama book by Randal L. Schwartz, Tom Phoenix, Brian D. Foy

• Learning Perl Objects, References, and Modulesaka „Alpaka book“ by Randal L Schwartz Tom Phoenixaka „Alpaka book by Randal L. Schwartz, Tom Phoenix

• Programming Perlaka „Camel book“ by Larry Wall, Tom Christiansen, Jon Orwant

• Perl Cookbook by Tom Christiansen, Nathan Torkington

• Perl Best Practices by Damian Conway

• Perl Pocket Reference by Johan Vromans

7

Page 8: The SFX Administrator's Perl 101 - IGeLU

Rule of thumb #2: 80/20

• 80% of your Perl problems are solved by 20% of the Perl documentationPerl documentation ...

• ... and the remaining 80% of the documentation address the remaining 20% of your problems.

8

Page 9: The SFX Administrator's Perl 101 - IGeLU

Einleitung ENDE

IntroductionIntroductionWhat is Perl?What is Perl?

What can Perl do for me?Where to find more information?

9

Page 10: The SFX Administrator's Perl 101 - IGeLU

Erste Schritte START

First StepsFirst StepsHello World“ program„Hello World program

Basic rules and recommendationsLiterals and operators

10

Page 11: The SFX Administrator's Perl 101 - IGeLU

Hello World!

• For your first steps with Perl a simple text editor (e.g. Notepad“ on Windows systems) is sufficient„Notepad on Windows systems) is sufficient.

• For maintaining or even developing bigger programs your editor should at least support syntax highlighting (e.g. GNU Emacs).

• Please don‘t use a text processor (like MS-Word)!• Let‘s get started:• Let s get started:

#!/usr/bin/perl# / / /pprint "Hello, World!\n";

11

Page 12: The SFX Administrator's Perl 101 - IGeLU

Perl basics

• Programs begin with a so-called „she-bang“-line like #!/usr/bin/perl or a package-declaration (in case#!/usr/bin/perl or a package declaration (in case your program is a module).

• Recommended: use strict; and use warnings;• Any sequence of any kind of whitespace is interpreted

like a single space character which allows for generousindentation!indentation!

• Any text between a #-character and the end of the current line is ignored which allows for comments!

• „Elementary“ expressions must be terminated by a semicolon (;).

12

Page 13: The SFX Administrator's Perl 101 - IGeLU

Number Literals

• examples for floating point literals:3 141 0 005 6 539e24 2E 43.141, -0.005, -6.539e24, 2E-4

• examples for decimal integer literals:0, 2006, -80, 87654321, 87 654 3210, 2006, 80, 87654321, 87_654_321

• examples for other integer literals:– binary: 0b11111111,– octal: 0377,– hexadecimal: 0xFF, 0xff

13

Page 14: The SFX Administrator's Perl 101 - IGeLU

Arithmetic Operators

Examples for arithmetic operators in Perl:

• negation: --6.0221415e23• addition: 2 ++ 3addition: 2 ++ 3• subtraction: 5.1 -- 2.4• multiplication: 3 ** 12• division: 10.2 // 0.3• modulo operation: 25 %% 8 (yields 1)• exponentiation: 2 ** ** 13 (yields 8192)

14

Page 15: The SFX Administrator's Perl 101 - IGeLU

String Literals

• Strings may contain arbitrary characters.• Perl distinguishes strings in• Perl distinguishes strings in

– single quotes such as 'Fred' from strings in– double quotes such as "Barney".double quotes such as Barney .

• The string of minimal length is calles the empty stringand contains no characters at all. It is recommended to d t it b {} i t d fdenote it by q{} instead of '' or "".

• A string of maximal length would consume all available RAM i e Perl does not limit the length of your strings!RAM, i.e. Perl does not limit the length of your strings!

15

Page 16: The SFX Administrator's Perl 101 - IGeLU

single quoted vs. double quoted

• In a single quoted string each character except for the backslash (\) and the single quote (') denotes itself.backslash (\) and the single quote ( ) denotes itself.

• In a double quoted string Perl will recognize the use of backslash escapes (\n, \t, \", \\, ...) to denote output control characters oder any other characters in form of their octal (\0..) or hexadecimal (\x..) byte codes, e.g.:codes, e g

\xC4 or \xC3\x84 for Ä in ISO 8859-1 or UTF-8, resp.

• Rule of thumb #3: Never use a double quoted string• Rule of thumb #3: Never use a double quoted string when its features exceed your needs!

16

Page 17: The SFX Administrator's Perl 101 - IGeLU

String Operators

Examples for string operators in Perl:

• Concatenation:'Hello' .. 'World' yields 'HelloWorld'Hello .. World yields HelloWorld'Hello World' .. "\n" yields "Hello World\n"

• Repetition:'-' xx 15 yields '---------------'3 xx 7 yields '3333333'

17

Page 18: The SFX Administrator's Perl 101 - IGeLU

Number or String?

• Perl converts numbers into strings and vice versa on demand i e depending on operator contextdemand, i.e. depending on operator context.

• In order to convert a number into a string Perl virtually adds the missing quotes.

• The conversion of a string into a number yields the longest numerical prefix of the string (any leading whitespace is ignored) or 0 if this prefix is emptywhitespace is ignored) or 0 if this prefix is empty.

• Examples:"12three45\n" + ' 3' yields 15y'Z39.' . (5 * 10) yields 'Z39.50''true' / 2 yields 0

18

Page 19: The SFX Administrator's Perl 101 - IGeLU

Erste Schritte ENDE

First StepsFirst StepsHello World“ program„Hello World program

Basic rules and recommendationsLiterals and operators

19

Page 20: The SFX Administrator's Perl 101 - IGeLU

Native Datenstrukturen START

Native Data StructuresScalars and Lists$calar Variables

@rrays@rrays%ashes

20

Page 21: The SFX Administrator's Perl 101 - IGeLU

Scalars and Lists

• Natural languages (or more precisely: their grammars) have the concept of singular and pluralhave the concept of singular and plural.

• Likewise, Perl has the concept of scalars and lists.• Perl distinguishes four types of scalars:g yp

– numbers,– strings,– references (memory addresses) and– the special value undef.

Li t t t ll d d t ( k t l “) f l f• Lists are totally ordered sets (aka „tuples“) of scalars of arbitrary type.

21

Page 22: The SFX Administrator's Perl 101 - IGeLU

More on Lists

• The elements of a listare always scalars never lists;– are always scalars, never lists;

– are indexed by subsequent integers starting at 0(which induces the total order).( )

• Perl automagically increases the amount of memory allocated for a list on demand, i.e. as more and more elements are added to the listelements are added to the list.

• The list of minimal length is called the empty list and contains no elements at all. It is denoted by ().y

• A list of maximal length would consume all available RAM, i.e. Perl does not limit the length of your lists!

22

Page 23: The SFX Administrator's Perl 101 - IGeLU

List Literals

• Option 1: comma separated, delimited by parentheses((1 2 3))((1,,2,,3))(( 16-15,, 4*0.5,, 67%8,, ))((23..42, (, (10,,10,,71),), "gr\xFCn"))((23..42, (, (10,,10,,71), ), gr\xFCn ))(( 'cyan',, 'magenta',, 'yellow' ))

• Option 2: by means of the „quoted words“-operatorqw/qw/cyan magenta yellow//qw<qw</usr/lib /etc/lib /home/lib>>

23

Page 24: The SFX Administrator's Perl 101 - IGeLU

$calar Variables

• A scalar variable is a storage container für scalar values of arbitrary type (number, string, reference, undef).of arbitrary type (number, string, reference, undef).

• A Perl identifier consists of a letter or the underscore (_) followed by any combination of letters, digits, and underscores.

• The name of a scalar variable needs to be a Perl identifier preceded by the dollar sign ($)identifier preceded by the dollar sign ($).

• Examples: $isbn, $ctx_obj, $_, $_DATABASE

24

Page 25: The SFX Administrator's Perl 101 - IGeLU

Good Names for Variables

... are meaningful and unmistakable:

B tt th !• Better use $number_of_rows than $nr!

• Does $stopid mean $sto_pid or $stop_id – or is th j t t id t ?there just a stupid typo?

• Please, use neither $O0O0O0O0 nor $OO00OO00!

• There is at least one indisputable advantage in relying on $underscores_for_longer_names instead of using $TheCamelCaseAlternative : ...using $TheCamelCaseAlternative : ...

• ... $THIS_WILL_NOT_WORK_IN_CAMEL_CASE ;-)

25

Page 26: The SFX Administrator's Perl 101 - IGeLU

Assignment Operators

• The operator = assigns the value of the expression on its right to the variable on its leftits right to the variable on its left.

• Perl offers several combined assignment operators to abbreviate frequently used forms of expressions:*=, /=, +=, -=, .=.=, etc.

$time = 3; # $time contains 3$time = $time + 3; # incremented by 3$time += 3; # … and once again$ti ' 00 AM' # $ti i '9 00 AM'$time .= ':00 AM'; # $time conains '9:00 AM'

26

Page 27: The SFX Administrator's Perl 101 - IGeLU

Comparison Operators

Perl distinguishes comparison operators • for numbers• for numbers ...==, !=, <, <=, >, >=, <=>

• ... from those for strings:... from those for strings:eq, ne, lt, le, gt, ge, cmp

Two non-trivial examples:

'Fred' == "Barney" is „true“.

(6+7)*8 ge 6+(7*8) is „false“.

27

Page 28: The SFX Administrator's Perl 101 - IGeLU

What is true and what is false?

• Perl doesn‘t come with any Boolean literals (such as true and false in C/C++ or Java).as true and false in C/C++ or Java).

• Instead of this a Boolean context makes Perl interpret any scalar value as a Boolean value according to the following definitions:– The special value undef is „false“.

The number 0 and the string '0' are false“– The number 0 and the string '0' are „false .– The empty string q{} is „false“.– Any other scalar values are „true“.Any other scalar values are „true .

28

Page 29: The SFX Administrator's Perl 101 - IGeLU

Context-sensitive undef

• undef is the value of undefined scalar variables, i.e. variables which currently do not store a real“ valuevariables which currently do not store a „real value.

• If used in numerical context undef evals to 0, …Example: $sum = $sum + 108;

• … if used in string context undef evals to q{}, …Example: $text = $text . "line 1\n";

• … but undef is neither a number nor a string!• In particular, undef is different from 'undef'!

In order to test on d f inedness Perl programmers• In order to test on undef-inedness Perl programmers use the unary comparison operator defined.

29

Page 30: The SFX Administrator's Perl 101 - IGeLU

@rrays

• An array variable (or for short: array) is a storage container for lists which allows for element access bycontainer for lists which allows for element access by numerical index (starting at 0 – always remember!).

• The name of an array needs to be a Perl identifier d d b h i ( )preceded by the at sign (@).

@num = (1,2,3,4); # array definition $one = $num[0]; # $one contains 1$sum = $one + $num[$one+2]; # $sum contains 5$ [4] * $ # $ [4] t i 0$num[4] *= $sum; # $num[4] contains 0

30

Page 31: The SFX Administrator's Perl 101 - IGeLU

Array Caveats

• The elements of lists are always scalars. Thus, the fifth element of a list stored in @array has to be accessedelement of a list stored in @array has to be accessed by $array[4] – and not by @array[4]!

• An array always contains at least the empty list () –d h i i d i P l!and, thus, is never undef-ined in Perl!

• A list assignment @array2 = @array1 additionally allocates the amount of memory already allocated forallocates the amount of memory already allocated for @array1!

31

Page 32: The SFX Administrator's Perl 101 - IGeLU

The Concept of Key-Value Pairs ...

Here you see some quite common key-value pairs:• hostname – IP address• hostname IP address• IP address – institution• user name – password• patron ID – charges account• ISSN – journal title• license number – vehicle owner• license number – vehicle owner• word – number of its occurrences in a given document• URL – number of hyperlinks referring to that URL• OpenURL parameter – piece of context information

32

Page 33: The SFX Administrator's Perl 101 - IGeLU

... is the Basic Idea of %ashes

• A hash variable (or for short: hash) is a storage container for lists which allows for access to everycontainer for lists which allows for access to every second element – the value – by specifiying its predecessor – serving as the key.

• Values may be arbitrary scalars while keys need to be pairwise different strings!

• The name of a hash needs to be a Perl identifier• The name of a hash needs to be a Perl identifier preceded by the percent sign (%).

33

Page 34: The SFX Administrator's Perl 101 - IGeLU

Hash Examples

# The natural way of defining a hash:# The natural way of defining a hash:%age = ( 'Peggy', 40, 'Al', 42, 'Kelly', 17 );$var1 = $age{'Peggy'}; # $var1 contains 40$name = 'elly';y$var2 = $age{'K'.$name}; # $var2 contains 17$var3 = $age{'Bud'}; # $var3 is undef$age{'Bud'} = "15 years"; # a new hash entry!

# The more common way of defining a hash:%Matrix = ('Neo' =>=> 'Keanu Reeves',

'Trinity' =>=> 'Carrie-Anne Moss','Morpheus' =>=> 'Lawrence Fishburne',);

34

Page 35: The SFX Administrator's Perl 101 - IGeLU

Hash Caveats

• The elements of lists are always scalars. Thus, the value assigned to key 'k' in the hash %value has to be ac-assigned to key k in the hash %value has to be accessed by $value{'k'} – and not by %value{'k'}!

• A hash always contains at least the empty list () – and, h i i d i P l!thus, is never undef-ined in Perl!

• The list assignment %hash2 = %hash1 forces Perl to unwind“ (i e explicitely build a temporary defining list„unwind (i.e. explicitely build a temporary defining list

for) %hash1 and, thus, can be quite expensive both in terms of runtime and consumption of memory!

35

Page 36: The SFX Administrator's Perl 101 - IGeLU

Interpolation of Variable Names

Within double quoted strings Perl interpolates variable names as follows:names as follows:

• Names of scalar variables are replaced by the current value of the variable (in string context)value of the variable (in string context).

• Names of non-scalar variables (i.e. arrays and hashes) l d b t ti f th tl t dare replaced by a concatenation of the currently stored

list elements (in string context). The current value of the global special variable $" serves as glue.

36

Page 37: The SFX Administrator's Perl 101 - IGeLU

Interpolation Examples & Caveats

my $food = 'dino burger';print "Fred ate a $food.\n"; # yum yum!print "|\$food| eq |$food|\n"; # debuggingprint "Barney ate two $foods.\n"; # oops???

i t "B t t ${f d} \ " # kprint "Barney ate two ${food}s.\n"; # okprint 'Two ' . $food . "s? Wow!\n"; # TMTOWTDI

my @drinks = qw/juice soda coke beer/;my @drinks = qw/juice soda coke beer/;print "I'll take a $drinks[3]. And you?\n";$" = ', ';print "@drinks ... no wine? Too bad!\n";p @ \ ;

my $email = "[email protected]"; # oh dear!

37

Page 38: The SFX Administrator's Perl 101 - IGeLU

Why My?

• The scope of a variable declared with the my modifier ist the innermost surrounding block or the code fileist the innermost surrounding block or the code file.

• Within its scope a my-variable hides any global variable of the same name independence of imported foreign code

• A my-variable can only be used – in particular, misused by code within its scope– by code within its scope

security, easier localisation of errors• Among other things the recommended use strict;Among other things the recommended use strict;

pragma enforces usage of the my modifier whenever you introduce (i.e. declare) a new „local“ variable.

38

Page 39: The SFX Administrator's Perl 101 - IGeLU

Native Datenstrukturen ENDE

Native Data StructuresScalars and Lists$calar Variables

@rrays@rrays%ashes

39

Page 40: The SFX Administrator's Perl 101 - IGeLU

Kontrollstrukturen START

Control FlowConditional Statements

LoopsSpecial VariablesSpecial Variables

Subroutines

40

Page 41: The SFX Administrator's Perl 101 - IGeLU

Conditional Statements (I)

• Code which is to be executed under certain conditions only belongs into an if-clause.only belongs into an if clause.

• An if-clause may be followed by one or more elsif-clauses and/or one else-clause:

if ( c1c1 ) {# execute if c1c1 is true

}} elsif ( c2c2 ) {

# execute if c1c1 is false but c2c2 is true} l {else {

# execute in all other cases}

41

Page 42: The SFX Administrator's Perl 101 - IGeLU

Boolean Operators

In order to express more complex conditions Perl offerstwo sets of Boolean operatorstwo sets of Boolean operators.

• Boolean operators of low precedence:

not, and, or, xor

• Boolean operators of high precedence:

! && ||!, &&, ||

42

Page 43: The SFX Administrator's Perl 101 - IGeLU

Conditional Statements (II)

• Instead of an if-clause with logically negated condition you might prefer/find an unless-clause:you might prefer/find an unless clause:

unless ( conditioncondition ) {# execute only if conditioncondition is false

}

• The ternary ?:-operator (a compact if-else) comes in

}

The ternary ?: operator (a compact if else) comes in handy for the conditional creation of values:

$what = ($counter > 1) ? 'lines' : 'line';$what = ($counter > 1) ? lines : line ;print „Parsed $counter $what of input.\n";

43

Page 44: The SFX Administrator's Perl 101 - IGeLU

while-Loop

Code which is to be executed repeatedly while a certaincondition remains true belongs into a while-loop ...condition remains true belongs into a while loop ...

• ... that might never be entered at all:while ( condition ) {

th t h t b t d t l t

while ( condition ) {# code to be executed repeatedly (perhaps never)

}

• ... that has to be entered at least once:do {

# code to be executed repeatedly (at least once)} while conditioncondition;

44

Page 45: The SFX Administrator's Perl 101 - IGeLU

foreach-Loop

• Code which is to be executed exactly once for each element of a list belongs into a foreach-loop:element of a list belongs into a foreach loop:

foreach my control_variablecontrol_variable ( listlist ) {# code to be executed once per element of the listlist

}

• At the beginning of each iteration the „current“ element of listlist is automagically assigned to the control variablecontrol variable

}

of listlist is automagically assigned to the control_variablecontrol_variable.• Of course, listlist may also be an array.

45

Page 46: The SFX Administrator's Perl 101 - IGeLU

$_ and @_

• Perl provides a whole lot of special variables which store certain useful static or dynamic values during thestore certain useful static or dynamic values during the runtime of your program, e.g. $".

• The most frequently used and, thus, most important i l i bl i h d dspecial variable is $_$_ , the standard argument.

• For instance, in a foreach-loop without explicit control variable $ takes on that rolevariable $_ takes on that role.

• Likewise, whenever a subroutine is called Perl pushes the current arguments into the standard parameter array @_.Access to the elements: $_[0], $_[1], $_[2], ...

46

Page 47: The SFX Administrator's Perl 101 - IGeLU

Subroutines

• In addition to Perl‘s many built-in functions (such as print) you can also write your own functions whichprint) you can also write your own functions which are called subroutines.

• The name of a subroutine needs to be a Perl identifier d d b d i ( )preceded by an ampersand sign (&).

• The definition of a subroutine starts with the keyword sub followed by the name of the subroutine (omittingsub followed by the name of the subroutine (omitting the &) and its code body enclosed in curly braces.

• In principle, subroutines may be defined at any place in the program. Their names are always global.

47

Page 48: The SFX Administrator's Perl 101 - IGeLU

Arguments and Return Values

• You can pass a list of arguments to a subroutine when you call it – but you don‘t necessarily have to do soyou call it but you don t necessarily have to do so.

• A subroutine can explicitely return one or more values – but it doesn‘t necessarily have to do so.

• However, it is good programming style tok b i fl ibl ibl i h– keep your subroutines as flexible as possible with regard to the number of arguments;

– always return explicitely.always return explicitely.

48

Page 49: The SFX Administrator's Perl 101 - IGeLU

Get the max out of it ...

sub max {if ( $_[0] > $_[1] ) {

return $_[0];}}else {

return $_[1];}}

}

my $maximum = &max( 16, 12, 72 );# Houston, we have a problem ...

49

Page 50: The SFX Administrator's Perl 101 - IGeLU

... by maximal flexibility

sub max {my $current max = shift @ ; # 1st argumentmy $current_max = shift @_; # 1st argument

foreach ( @_ ) { # for all others:if ( $ > $current max ) { # greater number?( $_ $ _ ) { g

$current_max = $_;}

}

return $current_max; # the maximum!}

$maximum = &max( 16, 12, 72, 4, 23, 15, 8, 42 );# Houston, we have marvelous programmers!

50

Page 51: The SFX Administrator's Perl 101 - IGeLU

Kontrollstrukturen ENDE

Control FlowConditional Statements

LoopsSpecial VariablesSpecial Variables

Subroutines

51

Page 52: The SFX Administrator's Perl 101 - IGeLU

OO-Perl START

OO-PerlPackages and Modules

procedural vs. object-orientedClasses and Objects in PerlClasses and Objects in Perl

Examples From the SFX World

52

Page 53: The SFX Administrator's Perl 101 - IGeLU

Packages

• The namespace of a global (i.e. not my-)variable is the package wherein it occurs firstpackage wherein it occurs first.

• At the start of any program the current package is main by default.

• In order to make another package package_namepackage_name the current package you simply have to declare:

• Global variables in any other than the current package

package package_namepackage_name;

Global variables in any other than the current package always continue to be accessible via their fully qualified identifier package_namepackage_name::variable_namevariable_name.

53

Page 54: The SFX Administrator's Perl 101 - IGeLU

Modules

• A module is a package that is declared in a file the path name of which matches“ the package name andpath name of which „matches the package name and ends on the extension .pm. Example:The path name of the target parser WWW::Excite is

.../lib/Parsers/TargetParser/WWW/Excite.pm

• Basic idea: The code within a module can be reusedcompletely or in parts by other (e g your!) programscompletely or in parts by other (e.g. your!) programs.

• Modules are the key concept for object-oriented programming in Perl as „classes“ are nothing else p g g „ gthan special modules.

54

Page 55: The SFX Administrator's Perl 101 - IGeLU

use-Statement

• Modules are imported in a Perl program as follows: Selected parts of it by means ofSelected parts of it by means of

use module_name list_of_identifiersmodule_name list_of_identifiers;

or „as completely as possible“ by means of

use module namemodule name;

• Behind the scenes the identifiers of the variables and subroutines of the specified module are included in

use module_namemodule_name;

subroutines of the specified module are included in the current package and, thus, become available for reuse.

55

Page 56: The SFX Administrator's Perl 101 - IGeLU

Procedural Programming

• The procedural programming paradigm focuses on the what is going on“ aspect of a given workflow„what is going on aspect of a given workflow.

• Input and output data are regarded as parameters of this workflow.

• Usually the final procedural program only works for input and output data with certain properties.

• For other input and output data which don‘t have these• For other input and output data which don t have these properties the program needs to be modified or even rewritten from scratch.

• These are fairly acceptable restrictions as long as we deal with relatively small programs only.

56

Page 57: The SFX Administrator's Perl 101 - IGeLU

Object-Oriented Programming

• The object-oriented programming paradigm focuses on the „who is taking part“ aspect of a workflow.„ g p p

• Input and output data are objects of certain classes, i.e. with a certain set of properties (attributes) signifi-cant to the workflow and they come along with all thecant to the workflow, and they come along with all the methods to manipulate these properties.

• Objects of derived classes inherit attributes / methods from their parent classes“ but they may extend or evenfrom their „parent classes but they may extend or even overload them.

• Following these concepts results in clearly defined, bl f d h h ll d dstable interfaces and hierarchically structured code

which is extremely reusable also in other workflows!

57

Page 58: The SFX Administrator's Perl 101 - IGeLU

Classes and Objects in Perlpackage Demo::Class;

b {

Class.pm

sub new {my $self = shift @_; # eq 'Demo::Class'my $hash_ref = {

'att A' => value of att Avalue of att A,att_A > value_of_att_Avalue_of_att_A,'att_B' => value_of_att_Bvalue_of_att_B,# ... and so on

};script.pl

return bless( $hash_ref, $self );}

sub method {

package Completely::Different;

use Demo::Class;sub method {

# body of a method}

my $demo = Demo::Class->new();:$demo->method( list_of_argslist_of_args );

58

Page 59: The SFX Administrator's Perl 101 - IGeLU

Examples from the SFX World (I)

• ContextObject:

my $ctx_obj = …:my $issn = $ctx obj->{ 'rft.issn' };y $ ss $ct _obj { t. ss };my $year = $ctx_obj->{ 'rft.year' };my $volume = $ctx_obj->{ 'rft.volume' };my $issue = $ctx_obj->{ 'rft.issue' };

$ $ t bj > t( ' ft ' )my $spage = $ctx_obj->get( 'rft.spage' );my $base = $ctx_obj->parse_param( 'url' );

• TargetParser: object with at least one service method, e.g. $tp->getFullTxt( $ctx_obj )

59

Page 60: The SFX Administrator's Perl 101 - IGeLU

Examples from the SFX World (II)

SourceParsers are objects with up to 3 public methods:• parsePrivateID – analyses / processes the value of• parsePrivateID – analyses / processes the value of

the ContextObject attribute rft_dat (or pid, resp.)• fetchRecord – queries an external database (e.g.

PubMed) for the record with the ID (e.g. PMID) that was returned by the method parsePrivateID

• parseRecord analyses / processes the record that• parseRecord – analyses / processes the record that was fetched by the method fetchRecord and sets or corrects ContextObject attribute values accordingly.

60

Page 61: The SFX Administrator's Perl 101 - IGeLU

OO-Perl ENDE

OO-PerlPackages and Modules

procedural vs. object-orientedClasses and Objects in PerlClasses and Objects in Perl

Examples From the SFX World

61

Page 62: The SFX Administrator's Perl 101 - IGeLU

THANKS For Your Attention!

@ ti <STDIN>my @questions = <STDIN>;

62