:::::::::::::: README :::::::::::::: There are 52 examples: example1 example2 example3 example4 example5 example6 example7 example8 example9 example10 example11 example12 example13 example14 example15 example16 example17 example18 example19 example20 example21 example22 example23 example24 example25 example26 example27 example28 example29 example30 example31 example32 example33 example34 example35 example36 example37 example38 example39 example40 example41 example42 example43 example44 example45 example46 example47 example48 - executable shell batch script example49 - executable shell batch script example50 - executable shell batch script example51 example52 Other Files: emp.data - text data file emp.names - text data file file.colons - text data file ISSUE Here is a list of examples that are known to fail under some circumstances, with a brief description of situations encoutered where they fail: example11 requires version 5.6.0 (for POSIX character classes) example52 utf8 module not present in perl 5.00503 :::::::::::::: example1 :::::::::::::: #! /usr/bin/perl $_ = 'abracadabra'; print if /^a...c/; :::::::::::::: example2 :::::::::::::: #! /usr/bin/perl # The dot metacharacter while(){ print "Found Norma!\n" if /N..ma/; } __END__ Steve Blenheim 101 Betty Boop 201 Igor Chevsky 301 Norma Cord 401 Jonathan DeLoach 501 Karen Evich 601 :::::::::::::: example3 :::::::::::::: #! /usr/bin/perl # The s modifier and the newline $_="Sing a song of sixpence\nA pocket full of rye.\n"; print $& if /pence./s; print $& if /rye\../s; print if s/sixpence.A/twopence, a/s; :::::::::::::: example4 :::::::::::::: #! /usr/bin/perl while(){ print if /[A-Z][a-z]eve/; } __END__ Steve Blenheim 101 Betty Boop 201 Igor Chevsky 301 Norma Cord 401 Jonathan DeLoach 501 Karen Evich 601 :::::::::::::: example5 :::::::::::::: #! /usr/bin/perl # The bracketed character class while(){ print if /[A-Za-z0-9_]/; } __END__ Steve Blenheim 101 Betty Boop 201 Igor Chevsky 301 Norma Cord 401 Jonathan DeLoach 501 Karen Evich 601 :::::::::::::: example6 :::::::::::::: #! /usr/bin/perl # The bracket metacharacters and negation while(){ print if / [^123]0/ } __END__ Steve Blenheim 101 Betty Boop 201 Igor Chevsky 301 Norma Cord 401 Jonathan DeLoach 501 Karen Evich 601 :::::::::::::: example7 :::::::::::::: #! /usr/bin/perl # The metasymbol, \d while(){ print if /6\d\d/ } __END__ Steve Blenheim 101 Betty Boop 201 Igor Chevsky 301 Norma Cord 401 Jonathan DeLoach 501 Karen Evich 601 :::::::::::::: example8 :::::::::::::: #! /usr/bin/perl # Metacharacters and metasymbols while(){ print if /[ABC]\D/ } __END__ Steve Blenheim 101 Betty Boop 201 Igor Chevsky 301 Norma Cord 401 Jonathan DeLoach 501 Karen Evich 601 :::::::::::::: example9 :::::::::::::: #! /usr/bin/perl # The word metasymbols while(){ print if / \w\w\w\w \d/ } __END__ Steve Blenheim 101 Betty Boop 201 Igor Chevsky 301 Norma Cord 401 Jonathan DeLoach 501 Karen Evich 601 :::::::::::::: example10 :::::::::::::: #! /usr/bin/perl # The word metasymbols while(){ print if /\W\w\w\w\w\W/ } __END__ Steve Blenheim 101 Betty Boop 201 Igor Chevsky 301 Norma Cord 401 Jonathan DeLoach 501 Karen Evich 601 :::::::::::::: example11 :::::::::::::: #! /usr/bin/perl # The POSIX character classes require 5.6.0; while(){ print if /[[:upper:]][[:alpha:]]+ [[:upper:]][[:lower:]]+/; } __END__ Steve Blenheim Betty Boop Igor Chevsky Norma Cord Jon DeLoach Betty Boop Karen Evich :::::::::::::: example12 :::::::::::::: #! /usr/bin/perl # The \s metasymbol and whitespace while(){ print if s/\s/*/g; } print "\n"; __END__ Steve Blenheim 101 Betty Boop 201 Igor Chevsky 301 Norma Cord 401 Jonathan DeLoach 501 Karen Evich 601 :::::::::::::: example13 :::::::::::::: #! /usr/bin/perl # The \S metasymbol and non-whitespace while(){ print if s/\S/*/g; } __END__ Steve Blenheim 101 Betty Boop 201 Igor Chevsky 301 Norma Cord 401 Jonathan DeLoach 501 Karen Evich 601 :::::::::::::: example14 :::::::::::::: #! /usr/bin/perl # Escape sequences, \n and \t while(){ print if s/\n/\t/; } print "\n"; __END__ Steve Blenheim 101 Betty Boop 201 Igor Chevsky 301 Norma Cord 401 Jonathan DeLoach 501 Karen Evich 601 :::::::::::::: example15 :::::::::::::: #! /usr/bin/perl # The zero or one quantifier while(){ print if / [0-9]\.?/; } __END__ Steve Blenheim 1.10 Betty Boop .5 Igor Chevsky 555.100 Norma Cord 4.01 Jonathan DeLoach .501 Karen Evich 601 :::::::::::::: example16 :::::::::::::: #! /usr/bin/perl # The zero or more quantifier while(){ print if /\sB[a-z]*/; } __END__ Steve Blenheim 1.10 Betty Boop .5 Igor Chevsky 555.100 Norma Cord 4.01 Jonathan DeLoach .501 Karen Evich 601 :::::::::::::: example17 :::::::::::::: #! /usr/bin/perl # The dot metacharacter and the zero or more quantifier while(){ print if s/[A-Z].*y/Tom/; } __END__ Steve Blenheim 101 Betty Boop 201 Igor Chevsky 301 Norma Cord 401 Jonathan DeLoach 501 Karen Evich 601 :::::::::::::: example18 :::::::::::::: #! /usr/bin/perl # The one or more quantifier while(){ print if /5+/; } __END__ Steve Blenheim 1.10 Betty Boop .5 Igor Chevsky 555.100 Norma Cord 4.01 Jonathan DeLoach .501 Karen Evich 601 :::::::::::::: example19 :::::::::::::: #! /usr/bin/perl # The one or more quantifier while(){ print if s/\w+/X/g; } __END__ Steve Blenheim 101 Betty Boop 201 Igor Chevsky 301 Norma Cord 401 Jonathan DeLoach 501 Karen Evich 601 :::::::::::::: example20 :::::::::::::: #! /usr/bin/perl # Repeating patterns while(){ print if /5{1,3}/; } __END__ Steve Blenheim 1.10 Betty Boop .5 Igor Chevsky 555.100 Norma Cord 4.01 Jonathan DeLoach .501 Karen Evich 601 :::::::::::::: example21 :::::::::::::: #! /usr/bin/perl # Repeating patterns while(){ print if /5{3}/; } __END__ Steve Blenheim 1.10 Betty Boop .5 Igor Chevsky 555.100 Norma Cord 4.01 Jonathan DeLoach .501 Karen Evich 601 :::::::::::::: example22 :::::::::::::: #! /usr/bin/perl # Repeating patterns while(){ print if /5{1,}/; } __END__ Steve Blenheim 1.10 Betty Boop .5 Igor Chevsky 555.100 Norma Cord 4.01 Jonathan DeLoach .501 Karen Evich 601 :::::::::::::: example23 :::::::::::::: #! /usr/bin/perl # Greedy and not greedy $_="abcdefghijklmnopqrstuvwxyz"; s/[a-z]+/XXX/; print $_, "\n"; $_="abcdefghijklmnopqrstuvwxyz"; s/[a-z]+?/XXX/; print $_, "\n"; :::::::::::::: example24 :::::::::::::: #! /usr/bin/perl # A greedy quantifier $string="I got a cup of sugar and two cups of flour from the cupboard."; $string =~ s/cup.*/tablespoon/; print "$string\n"; # Turning off greed $string="I got a cup of sugar and two cups of flour from the cupboard."; $string =~ s/cup.*?/tablespoon/; print "$string\n"; :::::::::::::: example25 :::::::::::::: #! /usr/bin/perl # Beginning of line anchor while(){ print if /^[JK]/; } __END__ Steve Blenheim 1.10 Betty Boop .5 Igor Chevsky 555.100 Norma Cord 4.01 Jonathan DeLoach .501 Karen Evich 601 :::::::::::::: example26 :::::::::::::: #! /usr/bin/perl # End of line anchor while(){ print if /10$/; } __END__ Steve Blenheim 1.10 Betty Boop .5 Igor Chevsky 555.10 Norma Cord 4.01 Jonathan DeLoach .501 Karen Evich 601 :::::::::::::: example27 :::::::::::::: #! /usr/bin/perl # Word anchors or boundaries while(){ print if /\bJon/; } __END__ Steve Blenheim 1.10 Betty Boop .5 Igor Chevsky 555.100 Norma Cord 4.01 Jonathan DeLoach .501 Karen Evich 601 :::::::::::::: example28 :::::::::::::: #! /usr/bin/perl # Beginning and end of word anchors while(){ print if /\bJon\b/; } __END__ Steve Blenheim 1.10 Betty Boop .5 Igor Chevsky 555.100 Norma Cord 4.01 Jonathan DeLoach .501 Karen Evich 601 :::::::::::::: example29 :::::::::::::: #! /usr/bin/perl # Anchors and the m modifier $_="Today is history.\nTomorrow will never be here.\n"; print if /^Tomorrow/; # Embedded newline $_="Today is history.\nTomorrow will never be here.\n"; print if /\ATomorrow/; # Embedded newline $_="Today is history.\nTomorrow will never be here.\n"; print if /^Tomorrow/m; $_="Today is history.\nTomorrow will never be here.\n"; print if /\ATomorrow/m; $_="Today is history.\nTomorrow will never be here.\n"; print if /history\.$/m; :::::::::::::: example30 :::::::::::::: #! /usr/bin/perl # Alternation: this, that, and the other thing while(){ print if /Steve|Betty|Jon/; } __END__ Steve Blenheim Betty Boop Igor Chevsky Norma Cord Jonathan DeLoach Karen Evich :::::::::::::: example31 :::::::::::::: #! /usr/bin/perl # Clustering or grouping $_=qq/The baby says, "Mama, Mama, I can say Papa!"\n/; print if s/(ma|pa)+/goo/gi; :::::::::::::: example32 :::::::::::::: #! /usr/bin/perl # Clustering or grouping while(){ print if /\s(12){3}$/; } __DATA__ Steve Blenheim 121212 Betty Boop 123 Igor Chevsky 123444123 Norma Cord 51235 Jonathan DeLoach123456 Karen Evich 121212456 :::::::::::::: example33 :::::::::::::: #! /usr/bin/perl # Clustering or grouping $_="Tom and Dan Savage and Ellie Main are cousins.\n"; print if s/Tom|Ellie Main/Archie/g; $_="Tom and Dan Savage and Ellie Main are cousins.\n"; print if s/(Tom|Ellie) Main/Archie/g; :::::::::::::: example34 :::::::::::::: #! /usr/bin/perl # Clustering and anchors while(){ # print if /^Steve|Boop/; print if /^(Steve|Boop)/; } __DATA__ Steve Blenheim Betty Boop Igor Chevsky Norma Cord Jonathan DeLoach Karen Evich :::::::::::::: example35 :::::::::::::: #! /usr/bin/perl # Remembering subpatterns while(){ s/([Jj]on)/$1athan/; print; } __END__ Steve Blenheim Betty Boop Igor Chevsky Norma Cord Jon DeLoach Karen Evich :::::::::::::: example36 :::::::::::::: #! /usr/bin/perl # Remembering multiple subpatterns while(){ print if s/(Steve) (Blenheim)/$2, $1/ } __END__ Steve Blenheim Betty Boop Igor Chevsky Norma Cord Jonathan DeLoach Karen Evich :::::::::::::: example37 :::::::::::::: #! /usr/bin/perl # Reversing subpatterns while(){ s/([A-Z][a-z]+)\s([A-Z][a-z]+)/$2, $1/; print; } __END__ Steve Blenheim Betty Boop Igor Chevsky Norma Cord Jon DeLoach Karen Evich :::::::::::::: example38 :::::::::::::: #! /usr/bin/perl # Metasymbols and subpatterns while(){ s/(\w+)\s(\w+)/$2, $1/; print; } __END__ Steve Blenheim Betty Boop Igor Chevsky Norma Cord Jon DeLoach Betty Boop :::::::::::::: example39 :::::::::::::: #! /usr/bin/perl # Backreferencing while(){ ($first, $last)=/(\w+) (\w+)/; # Could be: (\S+) (\S+)/ print "$last, $first\n"; } __END__ Steve Blenheim Betty Boop Igor Chevsky Norma Cord Jon DeLoach Betty Boop :::::::::::::: example40 :::::::::::::: #! /usr/bin/perl # The greedy quantifier $string="ABCdefghiCxyzwerC YOU!"; $string=~s/.*C/HEY/; print "$string", "\n"; :::::::::::::: example41 :::::::::::::: #! /usr/bin/perl # Backreferencing and greedy quantifiers $string="ABCdefghiCxyzwerC YOU!"; $string=~s/(.*C)(.*)/HEY/; print $1, "\n"; print $2, "\n"; print "$string\n"; :::::::::::::: example42 :::::::::::::: #! /usr/bin/perl # Backreferencing and greed $fruit="apples pears peaches plums"; $fruit =~ /(.*)\s(.*)\s(.*)/; print "$1\n"; print "$2\n"; print "$3\n"; print "-" x 30, "\n"; $fruit="apples pears peaches plums"; $fruit =~ /(.*?)\s(.*?)\s(.*?)\s/; # Turn off greedy quantifier print "$1\n"; print "$2\n"; print "$3\n"; :::::::::::::: example43 :::::::::::::: #! /usr/bin/perl $_="Tom Savage and Dan Savage are brothers.\n"; print if /(?:D[a-z]*|T[a-z]*) Savage/; # Perl will not capture # the pattern print $1,"\n"; # $1 has no value :::::::::::::: example44 :::::::::::::: #! /usr/bin/perl # A positive look ahead $string="I love chocolate cake and chocolate ice cream."; $string =~ s/chocolate(?= ice)/vanilla/; print "$string\n"; $string="Tomorrow night Tom Savage and Tommy Johnson will leave for vacation."; $string =~ s/Tom(?=my)/Jere/g; print "$string\n"; :::::::::::::: example45 :::::::::::::: #! /usr/bin/perl # Negative look ahead while(){ print if /^\w+\s(?![BC])/; } __END__ Steve Blenheim Betty Boop Igor Chevsky Norma Cord Jon DeLoach Karen Evich :::::::::::::: example46 :::::::::::::: #! /usr/bin/perl # A positive look behind $string="I love chocolate cake, chocolate milk, and chocolate ice cream."; $string =~ s/(?<= chocolate )milk/candy bars/; print "$string\n"; $string="I love coffee, I love tea, I love the boys and the boys love me."; $string =~ s/(?<=the boys) love/ don't like/; print "$string\n"; :::::::::::::: example47 :::::::::::::: #! /usr/bin/perl # A negative look behind while(){ print if /(?){ tr/:/:/s; print; } __DATA__ 1:::Steve Blenheim 2::Betty Boop 3:Igor Chevsky 4:Norma Cord 5:::::Jon DeLoach 6:::Karen Evich :::::::::::::: example52 :::::::::::::: #! /usr/bin/perl use utf8; $chr=11; print "$chr is a digit.\n"if $chr =~ /\p{IsDigit}/; $chr = "junk"; print "$chr is not a digit.\n"if $chr =~ /\P{IsDigit}/; print "$chr is not a control character.\n"if $chr =~ /\P{IsCntrl}/; :::::::::::::: emp.data :::::::::::::: Steve Blenheim 101 Betty Boop 201 Igor Chevsky 301 Norma Cord 401 Jon DeLoach 501 Karen Evich 601 :::::::::::::: emp.names :::::::::::::: 1 Steve Blenheim 2 Betty Boop 3 Igor Chevsky 4 Norma Cord 5 Jon DeLoach 6 Karen Evich #! /usr/bin/perl (The Text File) $ cat file.colons while (){ tr/:/:s; print; { __DATA__ 1:::Steve Blenheim 2::Betty Boop 3:Igor Chevsky 4:Norma Cord 5:::::Jon DeLoach 6:::Karen Evich