|
Perl (פרל) הינה שפת תכנות שתוכננה במקור על ידי לארי וול (Larry Wall). לאחר שנטבע השם Perl, יוחס לו הפרוש "Practical Extraction and Report Language" כראשי תיבות. קוד המקור של המפרש וסביבת הריצה של Perl מופצים כתוכנה חופשית תחת הרישיון הציבורי הכללי של גנו וה-Artistic License.
סקירהמסמך perlintro מתוך התיעוד הרשמי של השפה מציין:
היסטוריהלארי וול החל לעבוד על Perl ב-1987 ושחרר את גרסה 1.0 לקבוצת הדיון comp.sources.misc ב-18 בדצמבר 1987. השפה התרחבה בקצב מהיר בשנים לאחר מכן. ל-Perl 2 ששוחררה ב-1988, היה מנוע ביטויים רגולריים טוב יותר. Perl 3, ששוחררה ב-1989, הוסיפה יכולת טיפול במידע בינארי, בנוסף לטקסטואלי. עד 1991, התיעוד היחידי ל-Perl היה דף man יחיד, שהלך והתארך. ב-1991, פורסם הספר "Programming Perl", שמכונה "ספר הגמל" על שם הגמל שהציבה הוצאת הספרים O'Reilly על כריכתו. הספר הפך עם הזמן לתיעוד דה פקטו של השפה והמפרש שלה. בו בזמן, קודמה Perl לגרסה 4, לא כדי לציין שינוי משמעותי בשפה, אלא כדי לציין את הגרסה שתועדה בספר. Perl 4 עברה מספר גרסאות תחזוקה, שהסתכמו ב-Perl 4.036 ב-1993. בשלב זה, נטש וול את Perl 4 כדי להתחיל לעבוד על Perl 5. Perl 4 נותרה בגרסה 4.036 עד היום. הפיתוח של Perl 5 המשיך לתוך 1994. רשימת הדיוור "perl5-porters" הוקמה במאי 1994 כדי לתאם את המאמץ של הסבת Perl 5 למערכות השונות. היא נשארה הפורום הראשי של פיתוח, תחזוקה, והסבה של Perl 5. Perl 5 שוחררה ב-17 באוקטובר 1994. הגרסה כללה שכתוב כמעט מחדש של המפרש, והוסיפה תכונות חדשות רבות לשפה, כולל אובייקטים, מצביעים, מרחבי-שמות ומודולים. חשוב לציין שמודולים סיפקו אמצעי להרחבת השפה מבלי לשנות את המפרש. אופן פעולה זה איפשר לליבת המפרש להתייצב, מבלי שמנע ממתכנתי Perl רגילים להוסיף מאפיינים נוספים לשפה. ב-26 באוקטובר 1995, הוקמה CPAN (ראשי תיבות של Comprehensive Perl Archive Network). CPAN הינה אוסף של אתרים שאוגרים ומפיצים קוד מקור של Perl, הפצות בינאריות, תיעוד, תסריטים ומודולים. במקור, היה צריך לגשת לכל אתר ב-CPAN דרך הכתובת הייחודית שלו; כיום הכתובת היחידה http://www.cpan.org/ מפנה אוטומטית לאתר CPAN כלשהו. נכון לשנת 2006, Perl 5 עדיין מתוחזקת באופן פעיל. היא כוללת כבר תמיכה ביוניקוד. הגרסה היציבה האחרונה היא Perl 5.8.8. במקורה הייתה קיימת Perl רק בגרסת יוניקס, אך כיום זמינה סביבת ריצה שלה עבור מגוון רחב של מערכות הפעלה. Perl איננה שפת מפרש או שפה מהודרת. זאת מכיוון שהיא אינה משתמשת במהדר על מנת ליצור קובצי ריצה בינאריים, אלא טוענת את ליבת המפרש עצמו לזיכרון. ליבת המפרש ממירה בתחילת הריצה (ובמקרים מסוימים גם בהמשכה) את הקוד שנכתב על ידי המתכנת לשפת מכונה. למרות זאת, תוכנית בשפת Perl מכונה תסריט (באנגלית: script; סקריפט), כפי שמכונות תוכניות הכתובות בשפת מפרש. בימיו הראשונים של האינטרנט, רוב פעילות צד-השרת בוצעה על ידי תסריטים בשפת Perl. הפופולריות של Perl בישומי רשת קטנה באופן משמעותי לטובת טכנולוגיות אחרות, דוגמת PHP, ASP, ASP.NET. בימינו, Perl מגיעה ביחד עם הרוב המוחלט של הפצות הלינוקס וחלק מ-GNU coreutils כתוב ב-Perl. חלק ממערכות ניהול התוכן של אתרים פופולריים באינטרנט כתובים ב-Perl, לדוגמה slashdot.org [1] ו-amazon.com. מבנהמבנה השפה דומה לזה של שפת התכנות C (לדוגמה, שימוש בסוגריים מסולסלים - משתניםב-Perl שלושה סוגי נתונים עיקריים:
המערכים דינמיים לגמרי וניתן להוסיף אליהם איברים בלי להקצות זיכרון מראש. שמות המשתנים מתחילים תמיד בתו שמגדיר את הסוג שלהם, התו ";" מכונה סיג'יל (sigil). שם משתנה סקאלאר מתחיל תמיד בסימן דולר ( $name = "Larry"; $index = 45; שם משתנה מערך מתחיל תמיד בסימן @beatles = ("John", "Paul", "George", "Ringo"); print $beatles[2]; קטע הקוד האחרון יוצר משתנה מערך בשם @beatles = qw( John Paul George Ringo ); print $beatles[2]; יוציא את אותו פלט. שם משתנה האש מתחיל תמיד ב- %beatles = ("Guitar" => "John", "Bass" => "Paul", "Sitar" => "George", "Drums" => "Ringo"); print $beatles{"Bass"}; קטע הקוד האחרון יוצר משתנה האש בשם ב-Perl אין מניעה שלמשתנים מסוגים שונים יהיה אותו שם, כי הם תמיד נכתבים עם הסיג'יל; כלומר באותו קטע יכול להיות סקאלאר בשם המשתנים לא חייבים להיות מוגדרים מראש והם נוצרים אוטומטית עם השמה ראשונה. עם זאת, כדי למנוע שגיאות אפשר להריץ את התוכנה במצב strict אשר מחייב הגדרת משתנים על ידי הפקודה use strict; my $number = 19; $name = "Audrey"; תוכנית זו לא תעבור הידור ולא תגיע כלל לכדי ריצה, מכיוון שהמשתנה ניתן גם להתייחס למצביע (reference) לכל אחד ממבנים אלו על ידי סימן מודולים ומחלקותקוד ב-Perl יכול להשתמש במודולים מוכנים מראש, אותם ניתן לטעון בזמן ריצה. כמו כן, ניתן להשתמש במחרוזות כקטעי קוד המפורשים בזמן ריצה. החל מגרסה 5 (1994), תומכת Perl חלקית גם בתכנות מונחה עצמים, וזאת על ידי אפשרות להפוך מודול לסוג של מחלקה. שימושים עיקרייםהצד החזק של Perl הוא מניפולציה של מחרוזות, הן מהזנה מהקלט הסטדנדרטי והן מקבצים. בשל כך, השימוש ב-Perl מקובל בתחומים מסוימים בכלכלה ובביולוגיה, ובמיוחד בביו-אינפורמטיקה. את היכולות שמציעה Perl כשפה ניתן להרחיב באמצעות מספר עצום של מודולים, אשר זמינים בחינם באתר CPAN. אחד מחסרונותיה העיקריים של שפת Perl הוא הקושי בקריאת תוכנית הכתובה בה, ובפרט תחזוקתה, אם התוכנית לא תוכננה מראש לקריאות מרבית. הפוטנציאל הרב לחוסר קריאות של תוכנית Perl נובע מהפעולות הנסתרות וקיצורי הדרך הרבים שהשפה ניחנה בהם. קיצורי דרך אלו מקלים מאוד את הפיתוח המהיר של תוכנית בשפת Perl, אך מקשים על אילו שאינם שולטים ברזי השפה להבין את תפקוד התוכנית מקריאה, ובמיוחד אם בעת הכתיבה לא הושם דגש על קריאות. בשל חוסר קריאות לכאורה זה, יש המפרשים בהומור את השם Perl כראשי תיבות של "Pathologically Eclectic Rubbish Lister". תוכניות לדוגמהHello, world!השורה הראשונה מבטאת את המיקום של מפרש Perl במערכות הפעלה דמויות יוניקס. היא אומרת (לא רק ב-Perl, אלא גם בכל סקריפט אחר, כולל bash, python ועוד) בעזרת איזה תוכנית צריך להריץ את הקוד הבא. אם מתכוונים להריץ את התוכנה בפירוש עם Perl, למשל על ידי perl example.pl, אפשר לוותר על השורה הנ"ל. עם זאת מקובל לכתוב אותה בכל זאת, למקרה שהתוכנית תועבר למערכת הפעלה דמוית יוניקס. השורה השנייה והשורה השלישית אומרות למפרש לטעון את המודולים warnings ו-strict בהתאמה. הפעלת המודולים האלה מומלצת במדריכי סגנון קידוד, (כגון perlstyle) מכיוון שהיא מסייעת למנוע שגיאות נפוצות. השורה הרביעית. כאן בעצם מתחילה התוכנית שלנו. הפקודה print תדפיס את מה שיבוא אחריה. #!/usr/bin/perl use warnings; use strict; print "Hello, World!"; . פיענוח טפסים באתר אינטרנט בעזרת CGIהשורה הרביעית מבקשת מהמודול שנקרא CGI, שייבא (import) את הפונקציות header ו-param, שישמשו אותנו אחר כך. השורה החמישית מדפיסה את הפלט של הפונקציה header, שבלא פרמטרים תדפיס לנו את השורה הבאה: Content-type: text/html השורה השישית תכריז על המשתנה הסקאלרי err_msg בתור ריק. השורה השביעית בודקת האם פרמטר בשם click (שאם נסתכל למטה, הוא השם של כפתור ה-submit שלנו) הוא "כן". ב-Perl סקאלר שמסמן "לא" הוא: מחרוזת ריקה, המספר 0 או ערך לא מוגדר (undef). כל סקאלר שלא עונה לקטגוריה הזאת הוא "כן". אם הפרמטר לא קיים, משמע שהמשתמש לא לחץ על כפתור ה-submit, ובמצב כזה אנחנו לא ננקוט שום פעולה, אלא סתם נדפיס את הטופס. בשורה השמינית אנחנו משתמשים במשפט תנאי ששקול ל-"אם לא", זאת אומרת, ההפך מ-if. השאלה היא האם הפרמטר username (ששוב, מופיע בטופס שלנו) הוא "כן". (שימו לב להגדרה של "כן" למעלה) והשורה התשיעית תוסיף למשתנה err_msg את הודעת השגיאה "שם המשתמש ריק". בשורה מספר 11 אנחנו שואלים שאלה דומה לשאלה שבשורה מספר 8. בשורה מספר 12 יש שימוש במשפט if else מקוצר, שקיים גם ב-C, C++ , JAVA, PHP ועוד שפות רבות. זה נראה כך: תנאי?כן:אחרת. למשל, נתרגם את המשפט הבא: "יש חלב" ? "הוסף אותו לקפה" : "הבא חלב". אם יש חלב, הוסף אותו לקפה. אחרת, לך תביא חלב. ככה נוכל לתרגם גם את המשפט שבשורה מספר 12: הוסף ל-err_msg את: אם err_msg הוא "כן", הוסף ירידת שורה ואז "שדה הסיסמה ריק", אחרת, הוסף רק את "שדה הסיסמה ריק". זה משמש אותנו לכך שאנחנו לא רוצים להדפיס סתם ירידות שורה כשאין שום טקסט שקודם להן. בשורה מספר 14 אנחנו משתמשים במשפט תנאי קצת יותר מורכב, שניתן לתרגם ככה: אם err_msg הוא "לא", וגם הפרמטר username שווה ל-admin (משתמשים ב-eq כדי להשוות בין מחרוזות, וב-== כדי להשוות בין גדלים של מספרים או תווים), וגם הפרמטר password שווה ל-1234, אז... שורה מספר 15: הוסף ל-err_msg את "שם משתמש וסיסמה נכונים!". בשורה מספר 18 אנחנו משתמשים במשהו שנקרא heredoc. זה עוזר לנו להדפיס או להשתמש בטקסט שנמצא על יותר משורה אחת, בצורה יפה יותר. אפשר לפרש את זה לעברית כך: "הדפס במרכאות כפולות את כל מה שאתה רואה עד שאתה מוצא שורה שיש בה רק EOM; ב-Perl טקסט שנמצא בתוך מרכאות כפולות עובר אינטרפולציה (זאת אומרת, במקום שמות המשתנים יכתב התוכן שלהם, ו-escape sequence כמו למשל n\ שמסמל newline, יכתבו לפי המשמעות שלהם. לעומת זאת, אם נשתמש בגרש "'", הטקסט לא יעבור אינטרפולציה, ואנחנו נראה בדיוק את מה שכתבנו. למשל אם נכתוב n\, שזאת אמורה להיות שורה חדשה, אנחנו נראה פשוט n\ ולא שורה חדשה כמו שציפינו. ולאחר מכן אנחנו מדפיסים את הדף, ולפני הטופס אנחנו מדפיסים את המשתנה err_msg שערכנו בו שינויים לפני כן. בשורה האחרונה אנחנו סוגרים את ה-heredoc על ידי כתיבת מה שכתבנו כשפתחנו אותו, EOM; #!/usr/bin/perl use warnings; use strict; use CGI qw( header param ); my $user = 'admin'; my $pass = '1234'; print header(); my $err_msg = ''; if ( param( 'click' ) ) { unless ( param( 'username' ) ) { $err_msg .= 'שם המשתמש ריק' } unless ( param( 'password' ) ) { $err_msg .= ( $err_msg && '<br />' ) . 'שדה הסיסמה ריק' } if ( !$err_msg && ( param( 'username' ) eq $user ) && ( param( 'password' ) eq $pass ) ) { $err_msg .= 'שם משתמש וסיסמה נכונים!' } } print << "EOM;"; <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xml:lang="en" xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Perl Form Example</title> <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8" /> </head> <body style="direction:rtl;"> $err_msg <form method="post" action="index.cgi"> שם משתמש: <input type="text" name="username" /><br /> סיסמה: <input type="password" name="password" /><br /> <input type="submit" name="click" /> </form> </body> </html> EOM; . לקריאה נוספת
קישורים חיצוניים
|
This article is from Wikipedia. All text is available under the terms of the GNU Free Documentation License.
Mercedes Car
This site monitored by SitePinger.net