הקדמה לשפת Perl
סימסטר ב' ,תשס"ח
המכללה האקדמית להנדסה
הקדמה לשפת Perl
הקדמה ,מוטיבציה וסוגי נתונים
1
הקדמה לשפת Perl
סימסטר ב' ,תשס"ח
המכללה האקדמית להנדסה
מהו ?Perl
Practical Extraction and Report Language
שימושי מאד לסריקה מהירה של קובצי טקסט והפקת
דוחות על אותם קבצים.
2
הקדמה לשפת Perl
סימסטר ב' ,תשס"ח
המכללה האקדמית להנדסה
מדוע ?Perl
בביואינפורמטיקה משתמשים הרבה ב.Perl -
שפה חזקה מאד עם מחרוזות .מחרוזות הן מרכזיות מאד
בביואינפורמטיקה )רצפי גנים וחלבונים ועוד(.
מאפשר שימוש נוח בכלים ברשת .כך ניתן לעשות שימוש בכלי
הביואינפורמטיקה הרבים ברשת.
קיימות ספריות Perlמיוחדות עבור ביואינפורמטקה ).(BioPerl
נוח מאד לכתיבה של תוכניות קצרות ופשוטות.
3
סימסטר ב' ,תשס"ח
הקדמה לשפת Perl
המכללה האקדמית להנדסה
השוואה של Perlעם C
השווה:
אפשר לכתוב הכל בשורה .עדיף )חובה( לכתוב בצורה
מסודרת.
אפשר לקרוא לספריות מוכנות ,הנקראות .Modules
קבוצות של פקודות מוגדרות על ידי }{.
לולאות ותנאים מאד דומים ל.C -
4
סימסטר ב' ,תשס"ח
הקדמה לשפת Perl
המכללה האקדמית להנדסה
השוואה של Perlעם C
השונה:
אין שלב קומפילציה .אין קוד בינארי) .הוא כן עובר שלב
קומפילציה פנימי ,כך שתוכנית לא תתחיל לרוץ אם יש בעיות
.(syntax
השפה הבסיסית רחבה מאד.
אין פונקציה ראשית .הקובץ רץ מתחילתו עד סופו.
אין צורך להגדיר משתנים .סוג המשתנה אינו כל כך חשוב.
5
הקדמה לשפת Perl
סימסטר ב' ,תשס"ח
המכללה האקדמית להנדסה
איך מריצים תוכניות ?Perl
ב UNIX -קיימים שלשה דרכים:
משורת פקודה.
מקובץ ,עם קריאה ל"פרשן" ).(Interpreter
מקובץ ,ללא קריאה מפורשת ל"פרשן".
6
סימסטר ב' ,תשס"ח
הקדמה לשפת Perl
המכללה האקדמית להנדסה
איך מריצים תכניות ב?Perl -
משורת פקודה:
';"> perl -e 'print "Hello, World\n
Hello, World
>
7
הקדמה לשפת Perl
סימסטר ב' ,תשס"ח
המכללה האקדמית להנדסה
איך מריצים תכניות ב?Perl -
מקובץ ,עם קריאה לפרשן:
בקובץ :hello.pl
בשורת הפקודה:
;"print "Hello, World\n
> perl hello.pl
Hello, World
>
8
הקדמה לשפת Perl
סימסטר ב' ,תשס"ח
המכללה האקדמית להנדסה
איך מריצים תכניות ב?Perl -
מקובץ ,ללא קריאה לפרשן:
בקובץ :hello.pl
בשורת הפקודה:
#!/usr/bin/perl -w
;"print "Hello, World\n
> chmod +x hello.pl
> ./hello.pl
Hello, World
>
9
הקדמה לשפת Perl
סימסטר ב' ,תשס"ח
המכללה האקדמית להנדסה
תיעוד של Perl
ניתן להשיג תיעוד מפורט על Perlבכמה מקומות:
- perldocהאתר המרכזי של תיעוד .Perl
http://www.perldoc.com/
המון קורסים באינטרנט .צריך רק לחפש…
10
סימסטר ב' ,תשס"ח
הקדמה לשפת Perl
המכללה האקדמית להנדסה
סוגי משתנים
סוגי משתנים ב:Perl -
סקלרים ).(Scalars
מערכים ).(Lists
‘השים’ ).(Hashes
נעבור עליהם לפי הסדר בשיעורים הקרובים.
11
הקדמה לשפת Perl
סימסטר ב' ,תשס"ח
המכללה האקדמית להנדסה
ְס ַק ַל ִרים
מכילים ערך אטומי -מספר או מחרוזת.
;$a = 613
;"!$b = "Hello, World
שים לב .כל שורה ב ,Perl -כמו ב ,C -מסתיימת בנקודה-פסיק
);(.
12
הקדמה לשפת Perl
סימסטר ב' ,תשס"ח
המכללה האקדמית להנדסה
סקלרים
מספר -אין צורך להגדיר את סוג המספר .כל המספרים
מיוצגים על ידי המערכת כמו doubleשל .C
מחרוזת -אין צורך להגדיר את אורך המחרוזת.
המחרוזת יכולה להיות באורך של כל הזיכרון של המחשב
)לא מאד יעיל ,אך אפשרי(.
13
הקדמה לשפת Perl
סימסטר ב' ,תשס"ח
המכללה האקדמית להנדסה
מחרוזות
שני סוגים:
סגור על ידי גרש .כל מה שיש בין שני הגרשים הוא המחרוזת.
כדי להכיל גרש ,יש להקדימו בקו נטוי אחורי \.
כדי להכיל \ ,יש להקדימו ב.\ -
דוגמא:
’;$a = ‘who\’s computer\\s is\\are this\\these
# $a = who’s computer\s is\are this\these
14
הקדמה לשפת Perl
סימסטר ב' ,תשס"ח
המכללה האקדמית להנדסה
מחרוזות
סגור על ידי גרשיים.
כאן ,ל \ -יש תפקידים רבים .הוא מסמל תוים מיוחדים בתוך
המחרוזת .דוגמאות חשובות:
newline
tab
bell
Double quote
יש יתרונות נוספים לסוג זה של מחרוזת ,כפי שנראה.
15
-
\n
\t
\a
"\
הקדמה לשפת Perl
סימסטר ב' ,תשס"ח
המכללה האקדמית להנדסה
מחרוזות
מחרוזת המכילה מספר רב של גרשיים ,ניתן ליצור
בדרכים רבות אחרות )כל דבר ב Perl -ניתן לבצע
בדרכים רבות אחרות(:
;$a = qq/who’s computer\s is\are this\these/
למעשה ,ניתן להקיף המחרוזת בכל זוג תוים זהים ,כגון &.
;&$a = qq&who’s computer\s is\are this\these
16
הקדמה לשפת Perl
סימסטר ב' ,תשס"ח
המכללה האקדמית להנדסה
מחרוזות
קיימים סוגים שונים של פונקציות להגדרת מחרוזות.
בטבלה הבאה מוצגים רובם כפי שמופיעים ב.perlop -
Literal
no
Literal
yes
Command
*yes
Word list
no
Pattern match
*yes
Pattern
*yes
Substitution
*yes
Transliteration no
}{'' q
}{"" qq
}{`` qx
}{qw
}{// m
}{qr
}{}{s
}{}{tr
בחלק מפונקציות אלו נעסוק בהמשך הקורס.
17
הקדמה לשפת Perl
המכללה האקדמית להנדסה
סימסטר ב' ,תשס"ח
משתנה סקלר
השם מתחיל ב $ -מלווה באות ולאחר מכן עד 253
תוים ,ספרות או קוים תחתיים )_(.
$a_very_long_name
השם הוא .Case Sensitive
חשוב מאד לתת שמות עם משמעות.
!= $A_very_long_name
18
הקדמה לשפת Perl
סימסטר ב' ,תשס"ח
המכללה האקדמית להנדסה
השמה
השמה למשתנה נעשית על ידי האופרטור =.
ביטוי ההשמה שקול לשם המשתנה:
# $b=7, $a=3.
כמו ב .C -קיימות השמות בינאריות:
השמות בינאריות עם מחרוזות:
;)$b=4+($a=3
;$a+=5; $b*=6
;"$str="Some stuff
;"$str.=", Some more stuff
;"# $str="Some stuff, Some more stuff
19
הקדמה לשפת Perl
סימסטר ב' ,תשס"ח
המכללה האקדמית להנדסה
תרגיל 1
כתוב תוכנית שתציג את הטבלה הבאה:
Grade
----96
90
85
Course
-----""Bioinfo
""Genetics
""DB's
מבנה הטבלה :שני הטורים מופרדים על ידי שני .tab
השורות מופרדות על ידי .Enter
20
המכללה האקדמית להנדסה
תשס"ח,'סימסטר ב
Perl הקדמה לשפת
פתרון
#!/usr/bin/perl
$caption = "Course\t\tGrade\n------\t\t----\n\n";
$bioinfo = "\"Bioinf\"\t\t96\n";
$genetics = qq/"Genetics"\t\t100\n/;
print $caption, $bioinfo, $genetics;
21
הקדמה לשפת Perl
סימסטר ב' ,תשס"ח
המכללה האקדמית להנדסה
אופרטורים
ישנם אופרטורים עבור מספרים ואופרטורים עבור
מחרוזות .רובם מוכרים מ.C -
אופרטורים חשבוניים )רק עבור מספרים(.
+, -, *, /, +=, -=, --, ++
אופרטורים מיוחדים:
#$a=1.
#$a=8.
22
;$a = 10 % 3
;$a = 2 ** 3
הקדמה לשפת Perl
סימסטר ב' ,תשס"ח
המכללה האקדמית להנדסה
אופרטורים
אופרטורים להשוואה )עבור מספרים ומחרוזות(:
שווה
שונה
גדול
קטן
גדול-שווה
קטן-שווה
שרשור
מספרים
==
=!
>
<
=>
=<
מחרוזות
eq
ne
gt
lt
ge
le
.
השוואה נעשית בתנאי ifובלולאות ,כפי שנראה בהמשך.
23
הקדמה לשפת Perl
סימסטר ב' ,תשס"ח
המכללה האקדמית להנדסה
העברה בין מספרים למחרוזות
מחרוזת המופיעה במקום שאמור להיות מספרPerl ,
מתייחס רק אל הספרות מתחילת המחרוזת עד האות
הראשונה.
34rr00"; # $a = 36.
"$a = 2+
מספר המופיע במקום מחרוזת ,נחשב למחרוזת המכילה
את ספרות המספר.
# $a = "R2D2".
24
;$a = "R2D".2
הקדמה לשפת Perl
סימסטר ב' ,תשס"ח
המכללה האקדמית להנדסה
אופרטורים לקידום
אופרטורים לקידום )כמו ב:(C -
# $a=2.
;$a = 1; $a++
כמו ב ,C -יש הבדל אם האופרטור קודם למשתנה או
אחריו.
#$b=2, $c=4.
25
;$b = $a++; $c = ++$a
הקדמה לשפת Perl
סימסטר ב' ,תשס"ח
המכללה האקדמית להנדסה
אינטרפולציה של משתנים לתוך מחרוזות
היתרון הגדול של מחרוזות סגורות-גרשיים.
שמות של משתנים בתוך המחרוזת מוחלפים על ידי
ערכיהם.
;'$species = 'Homo Sapiens
;"$line = "We are currently studying $species\n
אם רוצים להכיל את התו ,$יש להקדימו ב . \ -אם
רוצים להצמיד לשם המשתנה טקסט ,סוגרים את השם
ב.{} -
;"$line2 = "One ${species}-skeleton costs 1m\$'s
26
הקדמה לשפת Perl
המכללה האקדמית להנדסה
סימסטר ב' ,תשס"ח
ערך undef
לפני השמת ערך למשתנה ,ערכו הוא ערך מיוחד הנקרא
,undefהמיתרגם ל 0 -ומחרוזת ריקה.
# 3
;print $x+3
ניתן לבדוק אם הושם במשתנה ערך על ידי הפונקציה
.defined
{
27
)if (not defined $x
;$x=0
}
הקדמה לשפת Perl
סימסטר ב' ,תשס"ח
המכללה האקדמית להנדסה
קבלת נתונים מהמשתמש
קבלת ערך סקלרי מהמשתמש:
מקבל ערך מהקלט הסטנדרטי ,בדרך כלל הטרמינל
;>$a = <STDIN
המריץ.
הערך המתקבל מ <STDIN> -תמיד מלווה בתו סוף
שורה .\n ,כדי להסירו יש פונקציה מיוחדת ,המסירה את
התו האחרון במחרוזת:
)$b = chop($a
28
הקדמה לשפת Perl
המכללה האקדמית להנדסה
סימסטר ב' ,תשס"ח
קבלת נתונים מהמשתמש
הפונקציה מחזירה את התו שהוסר.
פונ' אחרת ,chomp() ,מורידה אך ורק תו \nמסוף
המחרוזת .נוח אם לא בטוחים אם יש תו \nאו שאין.
אפשר לשלב את הקבלה עם הקיצוץ:
;)>chomp($a=<STDIN
29
הקדמה לשפת Perl
סימסטר ב' ,תשס"ח
המכללה האקדמית להנדסה
תרגיל 2
קבל שם ורצף גנטי מקודד ,והדפס מחרוזת שתכיל את
הנתונים הבאים :שם המדען ,הרצף ,מספר חומצות
האמינו בחלבון ומשקלו.
נתונים:
כל 3בסיסים מקודדים לח"א אחת.
משקלו הממוצע של ח"א הוא .110kDa
אורך מחרוזת מתקבל על ידי הפונ' ).length($str
30
המכללה האקדמית להנדסה
תשס"ח,'סימסטר ב
Perl הקדמה לשפת
פתרון
#!/usr/bin/perl -w
chomp($scientist=<STDIN>);
chomp($sequence=<STDIN>);
$prot_length=length($sequence)/3;
$prot_weight=($prot_length*110)."kDa;"
$final="Author: $scientist, seq: $sequence.
Prot. length=$prot_length. Prot.
weight=$prot_weight;"
print $final;
31
הקדמה לשפת Perl
סימסטר ב' ,תשס"ח
המכללה האקדמית להנדסה
תרגיל 3
כתוב תכנית שתקבל מהמשתמש שני רצפי DNA
ותכתוב לטרמינל שרשור של שני הרצפים ,בשלש דרכים
שונות.
32
המכללה האקדמית להנדסה
תשס"ח,'סימסטר ב
Perl הקדמה לשפת
פתרון
#!/usr/bin/perl
chomp($DNA1=<STDIN>);
chomp($DNA2=<STDIN>);
$fullDNA1="$DNA1$DNA2\n";
# Method 1.
$fullDNA2=$DNA1.$DNA2."\n";
# Method 2.
print $fullDNA1, $fullDNA2, $DNA1,$DNA2,"\n";
# Method 3.
33
© Copyright 2025