Web - Amazon

We provide Linux to the World


We support WINRAR [What is this] - [Download .exe file(s) for Windows]

CLASSICISTRANIERI HOME PAGE - YOUTUBE CHANNEL
SITEMAP
Audiobooks by Valerio Di Stefano: Single Download - Complete Download [TAR] [WIM] [ZIP] [RAR] - Alphabetical Download  [TAR] [WIM] [ZIP] [RAR] - Download Instructions

Make a donation: IBAN: IT36M0708677020000000008016 - BIC/SWIFT:  ICRAITRRU60 - VALERIO DI STEFANO or
Privacy Policy Cookie Policy Terms and Conditions
Perl - ויקיפדיה

Perl

מתוך ויקיפדיה, האנציקלופדיה החופשית

לוגו "רפובליקת התכנות של Perl" (תרגום חופשי). זיהוי הגמל עם שפת Perl נרשם על-ידי הוצאת הספרים O'Reilly כסמל מסחרי, וגם אומץ בציבור.
לוגו "רפובליקת התכנות של Perl" (תרגום חופשי). זיהוי הגמל עם שפת Perl נרשם על-ידי הוצאת הספרים O'Reilly כסמל מסחרי, וגם אומץ בציבור.

Perl (פרל) הינה שפת תכנות שתוכננה במקור על ידי לארי וול (Larry Wall). לאחר שנטבע השם Perl, יוחס לו הפרוש "Practical Extraction and Report Language" כראשי תיבות.

קוד המקור של המפרש וסביבת הריצה של Perl מופצים כתוכנה חופשית תחת הרישיון הציבורי הכללי של גנו וה־Artistic License.

תוכן עניינים

[עריכה] סקירה

מסמך perlintro מתוך התיעוד הרשמי של השפה מציין:

Perl הינה שפת תכנות למטרות כלליות שפותחה במקור לעיבוד טקסט וכעת נעשה בה שימוש למגוון רחב של מטרות כולל ניהול מערכת, תיכנות ל-Web, תיכנות לרשתות, פיתוח ממשקי משתמש גרפיים (GUI), ועוד.
השפה מיועדת להיות פרקטית (קלה לשימוש, יעילה, שלמה) ולא יפהפיה (קטנה, אלגנטית, מינימלית). התכונות העיקריות שלה הן שהיא קלה לשימוש, תומכת גם בתכנות פרוצדורלי וגם בתכנות מונחה-עצמים, בעלת תמיכה מובנית חזקה לעיבוד טקסט, ובעלת אחד האוספים הכי מרשימים בעולם של מודולים צד-שלישי.

[עריכה] היסטוריה

לארי וול החל לעבוד על 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 שלושה סוגי נתונים עיקריים:

  1. סקאלאר (scalar) אשר מכיל נתון אחד שהוא מספר, מחרוזת או מצביע (reference).
  2. רשימה (list) שמכילה מספר סקאלארים. משתנה שמכיל רשימה נקרא מערך (array).
  3. מערך אסוציאטיבי (associative array) שלרוב נקרא בקיצור האש (hash) שמכיל זוגות של סקאלארים: מפתח (key) וערך (value).

המערכים דינמיים לגמרי וניתן להוסיף אליהם איברים בלי להקצות זיכרון מראש.

שמות המשתנים מתחילים תמיד בתו שמגדיר את הסוג שלהם; התו הזה מכונה סיג'יל (sigil). שם משתנה סקאלאר מתחיל תמיד בסימן דולר ($), שנראה כמו האות s מהמילה scalar, למשל:

$name  = "Larry";
$index = 45;

שם משתנה מערך מתחיל תמיד בסימן @ שנראה כמו האות a מהמילה array, למשל:

@beatles  = ("John", "Paul", "George", "Ringo");
print $beatles[2];

קטע הקוד האחרון יוצר משתנה מערך בשם @beatles המחזיק ארבע מחרוזות ומדפיס את איבר מספר 2; מכיוון שהספירה מתחילה מ-0, יודפס George. התייחסות לסקאלאר שהוא חלק ממערך נעשית עם סימן $ ולא סימן @, מכיוון שמדובר בסקאלאר. כשמדובר ברשימה כמו בדוגמה למעלה (שהתאים מכילים מילים נפרדות ללא רווחים), אפשר לשם קיצור להשתמש ב-qw שזה קיצור של quote words (מרכאות על מילים). דוגמה:

@beatles  = qw( John Paul George Ringo );
print $beatles[2];

יוציא את אותו פלט.

שם משתנה האש מתחיל תמיד ב-%, שנראה כמו זוג, למשל:

%beatles  = ("Guitar" => "John",
             "Bass"   => "Paul",
             "Sitar"  => "George",
             "Drums"  => "Ringo");
print $beatles{"Bass"};

קטע הקוד האחרון יוצר משתנה האש בשם %beatles המחזיק ארבעה מפתחות (שמות של כלי נגינה) וארבעה שמות ולאחר מכן מדפיס את הערך שנמצא במפתח Bass, כלומר Paul.

ב-Perl אין מניעה שלמשתנים מסוגים שונים יהיה אותו שם, כי הם תמיד נכתבים עם הסיג'יל; כלומר באותו קטע יכול להיות סקאלאר בשם $beatles, מערך בשם @beatles והאש בשם %beatles. האופרטור => שווה ערך לפסיק; הוא נועד לשיפור הקריאות.

המשתנים לא חייבים להיות מוגדרים מראש והם נוצרים אוטומטית עם השמה ראשונה. עם זאת, כדי למנוע שגיאות אפשר להריץ אץ התוכנה במצב strict אשר מחייב הגדרת משתנים על-ידי הפקודה my:

use strict;

my $number = 19;
$name = "Audrey";

תוכנית זו לא תעבור הידור ולא תגיע כלל לכדי ריצה, מכיוון שהמשתנה $name לא הוגדר עם my.

ניתן גם להתייחס למצביע (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;


[עריכה] לקריאה נוספת

  • Larry Wall, Tom Christiansen, John Orwant - Programming Perl, O'Reilly Media, Inc., 2000. ISBN 0-596-00027-8

[עריכה] קישורים חיצוניים

Our "Network":

Project Gutenberg
https://gutenberg.classicistranieri.com

Encyclopaedia Britannica 1911
https://encyclopaediabritannica.classicistranieri.com

Librivox Audiobooks
https://librivox.classicistranieri.com

Linux Distributions
https://old.classicistranieri.com

Magnatune (MP3 Music)
https://magnatune.classicistranieri.com

Static Wikipedia (June 2008)
https://wikipedia.classicistranieri.com

Static Wikipedia (March 2008)
https://wikipedia2007.classicistranieri.com/mar2008/

Static Wikipedia (2007)
https://wikipedia2007.classicistranieri.com

Static Wikipedia (2006)
https://wikipedia2006.classicistranieri.com

Liber Liber
https://liberliber.classicistranieri.com

ZIM Files for Kiwix
https://zim.classicistranieri.com


Other Websites:

Bach - Goldberg Variations
https://www.goldbergvariations.org

Lazarillo de Tormes
https://www.lazarillodetormes.org

Madame Bovary
https://www.madamebovary.org

Il Fu Mattia Pascal
https://www.mattiapascal.it

The Voice in the Desert
https://www.thevoiceinthedesert.org

Confessione d'un amore fascista
https://www.amorefascista.it

Malinverno
https://www.malinverno.org

Debito formativo
https://www.debitoformativo.it

Adina Spire
https://www.adinaspire.com