Upload
jeffrey-wright
View
300
Download
0
Embed Size (px)
Citation preview
Introduction to PerlIntroduction to Perl
22
What is Perl?What is Perl?
Practical Extraction and Report Practical Extraction and Report Language Language
实用摘录与报告语言实用摘录与报告语言
Pathlogical Eclectic Rubbish ListerPathlogical Eclectic Rubbish Lister 反常,折中的垃圾陈列器反常,折中的垃圾陈列器
33
What is Perl?What is Perl?
Perl is a Portable Scripting LanguagePerl is a Portable Scripting Language– No compiling is needed.No compiling is needed.– Runs on Windows, UNIX and LINUXRuns on Windows, UNIX and LINUX
Fast and easy text processing capabilityFast and easy text processing capability Fast and easy file handling capabilityFast and easy file handling capability Written by Larry WallWritten by Larry Wall ““Perl is the language for getting your job Perl is the language for getting your job
done.”done.”
44
How to Access PerlHow to Access Perl Off the school networkOff the school network
– Located on the 100.10 machines at: Located on the 100.10 machines at: /usr/local/bin/perl/usr/local/bin/perl
To install at home To install at home – www.perl.comwww.perl.com Has rpm's for Linux Has rpm's for Linux– www.activestate.comwww.activestate.com Has binaries for Windows Has binaries for Windows
Latest Version is 5.8Latest Version is 5.8– To check if Perl is working and the version To check if Perl is working and the version
numbernumber % perl -v% perl -v
55
The Basic Hello World The Basic Hello World ProgramProgram
Program:Program:
#!/usr/local/bin/perl -w#!/usr/local/bin/perl -w
print “Hello World!\n”;print “Hello World!\n”;
Save this as “hello.pl”Save this as “hello.pl” Give it executable permissionsGive it executable permissions
– chmod ug+x hello.plchmod ug+x hello.pl Run it as follows:Run it as follows:
– ./hello.pl./hello.pl
66
““ Hello World” Hello World” ObservationsObservations
““ .pl” extension is optional but is .pl” extension is optional but is commonly usedcommonly used
The first line “#!/usr/local/bin/perl” tells The first line “#!/usr/local/bin/perl” tells UNIX where to find PerlUNIX where to find Perl
““-w” switches on warning : not required -w” switches on warning : not required but a really good ideabut a really good idea
77
How to use PerlHow to use Perl
SyntaxSyntax
A Web Server ExampleA Web Server Example
88
要记住,过早的优化往往是错误的根源。如要记住,过早的优化往往是错误的根源。如果您在 果您在 Perl Perl 中写了一个原型,并用其他语中写了一个原型,并用其他语言来重写是没有问题的。原型意味着能够方言来重写是没有问题的。原型意味着能够方便地开发。便地开发。
99
Perl Perl 解释器解释器
速度和 速度和 BenchmarkBenchmark
Perl Perl 的容错能力的容错能力
1010
Perl Perl 的缺憾的缺憾 速度 算法,内置函数速度 算法,内置函数 训练训练 面向对象面向对象 线程以及统一字符编码线程以及统一字符编码
1111
Perl Perl 的优势的优势
某些方面的优势,例如:某些方面的优势,例如: 正则表达式正则表达式 隐含的函数声明隐含的函数声明 不严格的语法不严格的语法 象日用文档似的程序结构象日用文档似的程序结构
通用的灵活,大大减少开发的时间通用的灵活,大大减少开发的时间 几乎没有任何 几乎没有任何 C C 或 或 C++ C++ 能做而 能做而 Perl Perl 不不
能的事情能的事情
1212
SyntaxSyntax
LiteralsLiterals Types of VariablesTypes of Variables Operators Operators String FunctionsString Functions LoopLoop
1313
Numerical LiteralsNumerical Literals
Numerical LiteralsNumerical Literals– 66 IntegerInteger– 12.612.6 Floating PointFloating Point– 1e101e10 Scientific NotationScientific Notation– 6.4E-336.4E-33 Scientific NotationScientific Notation– 4_348_3484_348_348 Underscores instead of Underscores instead of
commas for long commas for long numbersnumbers
1414
String LiteralsString Literals
String LiteralsString Literals– ““There is more than on way to do it!”There is more than on way to do it!”– 'Just don't create a file called -rf.''Just don't create a file called -rf.'– ““Beauty?\nWhat's that?\n”Beauty?\nWhat's that?\n”– “”“”– ““Real programmers can write assembly Real programmers can write assembly
in any language.”in any language.”
Quotes from Larry WallQuotes from Larry Wall
1515
Types of VariablesTypes of Variables Types of variables:Types of variables:
– Scalar variables : $a, $b, $cScalar variables : $a, $b, $c– Array variables : @arrayArray variables : @array– Hash variables : %hashHash variables : %hash– File handles : STDIN, SRC, DESTFile handles : STDIN, SRC, DEST
Variables do not need to be declaredVariables do not need to be declared Variable type (int, char, ...) is decided at Variable type (int, char, ...) is decided at
run time run time – $a = 5; # now an integer$a = 5; # now an integer
– $a = “perl”; # now a string$a = “perl”; # now a string
1616
Operators on Scalar Operators on Scalar VariablesVariables
Numeric and Logic OperatorsNumeric and Logic Operators– Typical : +, -, *, /, %, ++, --, +=, -=, *=, /=, ||, Typical : +, -, *, /, %, ++, --, +=, -=, *=, /=, ||,
&&, ! ect …&&, ! ect …– Not typical: ** for exponentiationNot typical: ** for exponentiation
String OperatorsString Operators– Concatenation: “.” - similar to strcatConcatenation: “.” - similar to strcat
$first_name = “Larry”; $first_name = “Larry”;
$last_name = “Wall”;$last_name = “Wall”;
$full_name = $first_name $full_name = $first_name .. “ “ “ “ .. $last_name; $last_name;
1717
Equality Operators for Equality Operators for StringsStrings
Equality/ Inequality : eq and neEquality/ Inequality : eq and ne
$language = “Perl”;$language = “Perl”;
if ($language == “Perl”) ...if ($language == “Perl”) ...# Wrong!# Wrong!
if ($languageif ($language eq eq “Perl”) ...“Perl”) ... #Correct#Correct
– Use eq / ne rather than == / != for Use eq / ne rather than == / != for stringsstrings
1818
Relational Operators for Relational Operators for StringsStrings
Greater thanGreater than– Numeric : >Numeric : > String : gtString : gt
Greater than or equal toGreater than or equal to– Numeric : >=Numeric : >= String : geString : ge
Less thanLess than– Numeric : <Numeric : < String : ltString : lt
Less than or equal toLess than or equal to– Numeric : <=Numeric : <= String : leString : le
1919
String FunctionsString Functions
Convert to upper caseConvert to upper case– $name = uc($name);$name = uc($name);
Convert only the first char to upper caseConvert only the first char to upper case– $name = ucfirst($name);$name = ucfirst($name);
Convert to lower caseConvert to lower case– $name = lc($name);$name = lc($name);
Convert only the first char to lower caseConvert only the first char to lower case– $name = lcfirst($name);$name = lcfirst($name);
2020
If ... else ... statementsIf ... else ... statements Similar to C/C++ - except the scope Similar to C/C++ - except the scope
braces are REQUIRED!!braces are REQUIRED!!
if ( $os eq “Linux” ) { if ( $os eq “Linux” ) {
print “Sweet!\n”; print “Sweet!\n”;
}}
elsif ( $os eq “Windows” ) {elsif ( $os eq “Windows” ) {
print “Time to move to Linux, buddy!\n”;print “Time to move to Linux, buddy!\n”;
}}
else {else {
print “Hmm...!\n”;print “Hmm...!\n”;
}}
2121
Unless ... else StatementsUnless ... else Statements Unless Statements are the opposite of if ... Unless Statements are the opposite of if ...
else statements. else statements.
unless ($os eq “Linux”) {unless ($os eq “Linux”) {
print “Time to move to Linux, buddy!\n”;print “Time to move to Linux, buddy!\n”;
}}
else {else {
print “Sweet!\n”;print “Sweet!\n”;
}}
And again remember the braces are required!And again remember the braces are required!
2222
While LoopWhile Loop While loop: Similar to C/C++ but again While loop: Similar to C/C++ but again
the braces are the braces are required!!required!!
Example :Example :$i = 0;$i = 0;
while ( $i <= 1000 ) {while ( $i <= 1000 ) {
print “$i\n”; print “$i\n”;
$i++;$i++;
}}
2323
Until LoopUntil Loop The until function evaluates an The until function evaluates an
expression repeatedly until a specific expression repeatedly until a specific condition is met. condition is met.
Example:Example:
$i = 0;$i = 0;
until ($i == 1000) {until ($i == 1000) {
print “$i\n”;print “$i\n”;
$i++;$i++;
}}
2424
For LoopsFor Loops Like C/C++ Like C/C++
– Example :Example : for ( $i = 0; $i <= 1000; $i++ ) {for ( $i = 0; $i <= 1000; $i++ ) { print “$i\n”;print “$i\n”; }}
Another way to create a for loopAnother way to create a for loop– ExampleExample
for $i(0..1000) {for $i(0..1000) { print “$i\n”;print “$i\n”; }}
2525
Minimal Perl Web Server(1)Minimal Perl Web Server(1)#!/usr/bin/perl #!/usr/bin/perl
use Socket;use Socket;use Carp;use Carp;use FileHandle; use FileHandle;
# (1) use port 8080 by default, unless overridden on command line# (1) use port 8080 by default, unless overridden on command line$port = (@ARGV ? $ARGV[0] : 8080); $port = (@ARGV ? $ARGV[0] : 8080);
# (2) create local TCP socket and set it to listen for connections# (2) create local TCP socket and set it to listen for connections$proto = getprotobyname('tcp');$proto = getprotobyname('tcp');socket(S, PF_INET, SOCK_STREAM, $proto) || die;socket(S, PF_INET, SOCK_STREAM, $proto) || die;setsockopt(S, SOL_SOCKET, SO_REUSEADDR, pack("l", 1)) || die;setsockopt(S, SOL_SOCKET, SO_REUSEADDR, pack("l", 1)) || die;bind(S, sockaddr_in($port, INADDR_ANY)) || die;bind(S, sockaddr_in($port, INADDR_ANY)) || die;listen(S, SOMAXCONN) || die; listen(S, SOMAXCONN) || die;
2626
Minimal Perl Web Server(1)Minimal Perl Web Server(1)# (3) print a startup message# (3) print a startup messageprintf(" <<<Type-O-Serve Accepting on Port %d>>>\n\n",printf(" <<<Type-O-Serve Accepting on Port %d>>>\n\n",
$port);$port);
while (1){ while (1){ # (4) wait for a connection C # (4) wait for a connection C $cport_caddr = accept(C, S); $cport_caddr = accept(C, S); ($cport,$caddr) = sockaddr_in($cport_caddr); ($cport,$caddr) = sockaddr_in($cport_caddr); C->autoflush(1); C->autoflush(1);
# (5) print who the connection is from # (5) print who the connection is from $cname = gethostbyaddr($caddr,AF_INET); $cname = gethostbyaddr($caddr,AF_INET); printf(" <<<Request From '%s'>>>\n",$cname); printf(" <<<Request From '%s'>>>\n",$cname);
2727
Minimal Perl Web Server(1)Minimal Perl Web Server(1) # (6) read request msg until blank line, and print on screen # (6) read request msg until blank line, and print on screen
while ($line = <C>) { while ($line = <C>) { print $line; print $line; if ($line =~ /^\r/) { last; } if ($line =~ /^\r/) { last; }
} } # (7) prompt for response message, and input response lines, # (7) prompt for response message, and input response lines, # sending response lines to client, until solitary "." # sending response lines to client, until solitary "." printf(" <<<Type Response Followed by '.'>>>\n"); printf(" <<<Type Response Followed by '.'>>>\n");
while ($line = <STDIN>) while ($line = <STDIN>) { {
$line =~ s/\r//; $line =~ s/\r//; $line =~ s/\n//; $line =~ s/\n//; if ($line =~ /^\./) { last; } if ($line =~ /^\./) { last; } print C $line . "\r\n"; print C $line . "\r\n";
} } close(C);close(C);
} }
2828
Resources For PerlResources For Perl Books:Books:
– Learning PerlLearning Perl By SchwartzBy Schwartz Published by O'ReillyPublished by O'Reilly
– Programming PerlProgramming Perl By Larry Wall,Tom Christiansen and Jon By Larry Wall,Tom Christiansen and Jon
OrwantOrwant Published by O'ReillyPublished by O'Reilly
Web SiteWeb Site– http://safari.oreilly.comhttp://safari.oreilly.com
Contains both Learning Perl and Contains both Learning Perl and Programming Perl in ebook formProgramming Perl in ebook form
2929
Web Sources for PerlWeb Sources for Perl
WebWeb– www.perl.comwww.perl.com– www.perldoc.comwww.perldoc.com– www.perl.orgwww.perl.org– www.perlmonks.orgwww.perlmonks.org
Thank you Thank you