פרק ראשון: ה Perl שאתם צריכים לדעתמשתני Perl: טבלאות האשהסוג השלישי והאחרון של משתנים רגילים בשפת Perl שאותם נבחן הוא הוא טבלאות האש (HASH). טבלאות האש זהות לרשימות רגילות במספר מובנים, אולם מציעות מספר אפשריות נוספות ושימושיות. זוכרים את רשימת הקניות שלנו, בצורתה המקורית. המידע שהיה בה התאים לרשימה ב Perl, אבל השאלה היא האם רשימה זו תהיה שימושית בעולם האמיתי? אם סוזן רוצה למסור רשימה זו לבעלה מנחם, הוא אמור לקנות חלב, אבל איזה סוג חלב הוא אמור לקנות? אולי סוזן רוצה שמנחם יקנה דווקא את החלב שנמכר השבוע במבצע. המשמעות היא שסוג החלב לקניה עלול להשתנות משבוע לשבוע. במקרה זה, רשימת המכולת חייבת להתרחב כך שתוכל לקשר פריט ברשימה למידע נוסף, משמע:
המידע למעלה, בלשון של Perl, ידוע כסט של זוגות מפתח-נתונים (key-valued pair). בצד השמאלי נמצאים המפתחות. ("milk","eggs", and "bread") ובצד הימני נמצאים הערכים. לפיכך אנו רואים שטבלת האש, היא בפועל רשימת זוגות מפתח-נתונים. מתייחסים לטבלאות האש בעזרת הקידומת %. יצירת רשימת האש פשוטה עבור רשימת המכולת שלנו קלה למדי: %shopping=("milk","Holy Cow 1%", "eggs","Store Brand Large", "bread","Smurf Bakery Light Wheat"); כמו ברשימות, כל פריט בודד בטבלת ההאש הוא משתנה סקאלרי. אך שלא כמו ברשימות, וכאן טמון הכוח של טבלאות ההאש - הסדר של הפריטים אינו חשוב. טבלאות האש אינן משתמשות במספור כדי להראות את הנתונים, הן משתמשות במפתח. כך שאם נרצה לראות את הנתונים של המפתח "milk" : print $shopping{"milk"}; השורה למעלה, תדפיס לפלט "Holy Cow 1%". בשבוע הבא כאשר ישתנו המבצעים, סוזן תוכל לשנות בקלות את סוג המשתנה עבור המפתח "milk". $shopping{"milk"}="Heffer 2000 Skim"; תוכלו להוסיף בקלות זוג חדש של מפתח-ערך לרשימת האש, ע"י שימוש בהצבה פשוטה: $shopping{"dessert"}="HunkaHunka Premium Ice Cream"; טבלאות האש הם שימושיות להפליא, כאשר תרצו ליצור רשימה, אך תרצו גם לחפש מידע ברשימה תוך שימוש במפתחות קשורים, ולא ע"פ אינדקסים מספריים חסרי משמעות. צריך להודות, שרוב האנשים שיוצרים רשימות מכולות שבועיות, לא משתמשים בטבלאות האש- אבל מיד אפשר לחשוב על שני דוגמאות נוספות: 1. טבלת תרגום. תארו לעצמכם שאתם מחפשים מידע מתוך בסיס נתונים, והשתמשתם בשם שדה למצוא מידע זה. אזי, השדה "RINV" אולי מיצג את השדה במאגר "Remaining Inventory" . כאשר תדפיסו מידע זה למסך יתכן ותרצו לשחזר את תווית השדה, אבל התווית "RINV" נראית כמו צופן. בניית טבלת האש שמתרגמת את שדות מאגר הנתונים לשדות בשפת אנוש, קלה יותר: %fields("RINV","Remaining Inventory","TINV","Total Inventory"); print "$fields{'RINV'}: $ValueFromDatabase\n"; 2. מאבחן תדירות. דמיינו לעצמכם בלשן מפורסם, המתכנן לבנות מאבחן של תדירות מילים, כדי שיוכל לקבוע באיזו תכיפות השם שלו מופיע במאמרים בעיתון. כל מילה הבאה בחשבון תוכנס כמפתח לרשימת האש, מספר החזרות של מילה זו מעודכנת כשדה הערך של טבלת ההאש. תחילה נאתחל טבלת האש ריקה: %freq=(); נניח, ש word$ מיצגת את המילה האחרונה שנקראה מתוך מקור המידע: $freq{$word}++; השורה למעלה מגדילה את הערך של מפתח מסוים, ולכן בקשת ערך התדירות של המילה "happy" תהיה קלה להפליא: $freq{"happy"} רשומות,
ובשם נוסף מערכים :Perl משתני
|