Perl לשפת הקדמה
Transcription
Perl לשפת הקדמה
הקדמה לשפת 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