logo


פרק ראשון: ה Perl שאתם צריכים לדעת

משתני Perl: טבלאות האש

הסוג השלישי והאחרון של משתנים רגילים בשפת Perl שאותם נבחן הוא הוא טבלאות האש (HASH). טבלאות האש זהות לרשימות רגילות במספר מובנים, אולם מציעות מספר אפשריות נוספות ושימושיות. זוכרים את רשימת הקניות שלנו, בצורתה המקורית. המידע שהיה בה התאים לרשימה ב Perl, אבל השאלה היא האם רשימה זו תהיה שימושית בעולם האמיתי? אם סוזן רוצה למסור רשימה זו לבעלה מנחם, הוא אמור לקנות חלב, אבל איזה סוג חלב הוא אמור לקנות? אולי סוזן רוצה שמנחם יקנה דווקא את החלב שנמכר השבוע במבצע. המשמעות היא שסוג החלב לקניה עלול להשתנות משבוע לשבוע. במקרה זה, רשימת המכולת חייבת להתרחב כך שתוכל לקשר פריט ברשימה למידע נוסף, משמע:

"milk" is related with "Holy Cow Brand 1%"
"eggs" is related with "Store Brand Large"
"bread" is related with "Smurf Bakery Light Wheat"

המידע למעלה, בלשון של 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 משתני
תוכן עניינים
Perl פונקציות ב

אודות
תוכן עניינים
פרק 1: ה Perl שאתם צריכים לדעת
מי מפחד מ Perl  
התקנת Perl  
הרצת תוכניות Perl  
משתנים ב Perl : סקלרים  
אופרטורים בסיסיים ב Perl  
משתני Perl: השוואת סקלרים  
אופרטורים של השוואה ב Perl  
משתני Perl: רשומות (ובשם נוסף: מערכים)  
משתני Perl: טבלאות האש  
פונקציות ב Perl  
זרימת תוכניות ב Perl  
סיכום  
פרק 2: קישור Perl לעמודי הרשת
פרק 3: שמירת מצב
פרק 4: HTML בחטף ותבניות (Templates) רשת
פרק 5: עיבוד וניתוח של עמודי רשת
פרק 6: להשתעשע עם בסיסי נתונים מקוונים:אקסס
פרק 7: המודל MySQL
פרק 8: להשתעשע בבסיסי נתונים - GUFE - החזית הכללית והשימושית
פרק 9: המילניום - ניהול זמן ותאריך
פרק 10: ניהול רשימות והאשים (Hashs)
פרק 11: הפניה להפניה
פרק 12: הכרות עם mod_perl