This lecture notes is based on Prof Doreen De Leon's lectures.
Learning Perl, Chapter 7
$_ = "Perl is cool!";
if(/cool/) { # if $_ contains cool
print "It matched.\n";
} else {
print "It didn't match.\n";
}
# Output
# It matched.
$str = "Perl is cool!";
if($str =~ /cool/) { # if $str contains cool
print "It matched.\n";
} else {
print "It didn't match.\n";
}
if($str =~ /cold/) { # if $str contains cold
print "It matched.\n";
} else {
print "It didn't match.\n";
}
# Output
# It matched.
# It didn't match.
$_ = "Coke";
if(/Coke\tSprite/) { # Coke tab Sprite
print "It matched.\n";
} else {
print "It didn't match.\n";
}
# A program to find out while line contains
# MILLION DOLLAR BABY
while(<>) {
if(/MILLION DOLLAR BABY/) {
print $_;
}
}
Oscar Winner List: ACTOR IN A LEADING ROLE: Jamie Foxx, RAY ACTOR IN A SUPPORTING ROLE: Morgan Freeman, MILLION DOLLAR BABY ACTRESS IN A LEADING ROLE: Hilary Swank, MILLION DOLLAR BABY ACTRESS IN A SUPPORTING ROLE: Cate Blanchett, THE AVIATOR ANIMATED FEATURE FILM: THE INCREDIBLES BEST PICTURE: MILLION DOLLAR BABY CINEMATOGRAPHY: THE AVIATOR, Robert Richardson COSTUME DESIGN: THE AVIATOR, Sandy Powell DIRECTING: MILLION DOLLAR BABY, Clint Eastwood
Output
ACTOR IN A SUPPORTING ROLE: Morgan Freeman, MILLION DOLLAR BABY ACTRESS IN A LEADING ROLE: Hilary Swank, MILLION DOLLAR BABY BEST PICTURE: MILLION DOLLAR BABY DIRECTING: MILLION DOLLAR BABY, Clint Eastwood
$_ = "Perl is the best langauge!";
if(/ga.g/) { # gaug matched ga.g
print "It matched.\n";
} else {
print "It didn't match.\n";
}
if(/l.n.a/) { #langa matches l.n.a
print "It matched.\n";
} else {
print "It didn't match\n";
}
if(/a.b/) { # no match
print "It matched.\n";
} else {
print "It didn't match\n";
}
$_ = 3.1415926;
if(/3\.1415/) { # match 3.1415
print "It matched.\n";
} else {
print "It didn't match\n";
}
* : Matches the preceding pattern element zero or more times.
+ : Matches the preceding pattern element one or more times.
file
XaaaX XabcX abcXaaXdef aaaaaaXaaaaa xyzXaaaaaXzyx gggXXggg
program
while(<>) {
if(/Xa*X/) {
print $_;
}
}
output
XaaaX abcXaaXdef xyzXaaaaaXzyx gggXXggg
program
while(<>) {
if(/Xa+X/) {
print $_;
}
}
output
XaaaX abcXaaXdef xyzXaaaaaXzyx
file
abcXababXabc ababX XabcdefYZW ccbaXbabaX XabX XX
program
while(<>) {
if(/X(ab)*X/) {
print $_;
}
}
output
abcXababXabc XabX XX
file
Charles Li Charles abcdefghLi Charles something something Li Charles Charles Charles something Li
program
while(<>) {
if(/Charles.*Li/) {
print $_;
}
}
output
Charles Li Charles abcdefghLi Charles something Li
file
Charles Li Amy Ben Amy and Charles Dianne Eric and Charles .... Amy .... Ben and Eric
program
while(<>) {
if(/Amy|Charles/) {
print $_;
}
}
output
Charles Li Amy Amy and Charles Eric and Charles .... Amy ....
file
abcccc deffff ababab defabccc xyzxyzz abxyz baddefg
program
while(<>) {
if(/abc+|(ab)+/) {
print $_;
}
}
output
abcccc ababab defabccc abxyz
file
yyyXaaa zzzXbbb zXcccXzz ##XaaaX XbbX oooXabababXppp XaabbX XabcdX aaaaaX aaXXX XbbbbbbbbbbbbbbbX
program
while(<>) {
#Xaaa...X or Xbbb...X
if(/X(a+|b+)X/){
print $_;
}
}
output
##XaaaX XbbX XbbbbbbbbbbbbbbbX
file
yyyXaaa zzzXbbb zXcccXzz ##XaaaX XbbX oooXabababXppp XaabbX XabcdX aaaaaX aaXXX XbbbbbbbbbbbbbbbX
program
while(<>) {
if(/X(a|b)+X/){
print $_;
}
}
output
##XaaaX XbbX oooXabababXppp XaabbX XbbbbbbbbbbbbbbbX
file
oooXaabaXooo ooXXooo XabcXoo XabaabX oooXabXabXooo ooooXaaaaa
program
while(<>) {
chomp;
if(/X(a|b)+X/){ #substitute by other pattern
print "Matched: |$`<$&>$'|\n";
} else {
print "No match.\n";
}
}
matches
oooXaabaXooo ooXXooo XabcXoo XabaabX oooXabXabXooo ooooXaaaaa
output
Matched: |ooo<XaabaX>ooo| No match. No match. Matched: |<XabaabX>| Matched: |ooo<XabX>abXooo| No match.