פרק 11: הפניה להפניהה Perl שאתם צריכים לדעת פרק 11: הפניה להפניהבפרק הקודם התחלנו לבנות מבני נתונים מורכבים בעזרת רשימות, האשים, וצירוף של השניים. תוך כדי, נתקלנו בנושא ההפניות (reference). בחלק זה ההכרות הופכת לרומן, בנצלנו את ההפניות על מנת לנהל מבני נתונים מורכבים. לבד מהכרות כללית עם Perl, טוב לקרוא חלק זה אחרי החלק הקודם, ניהול רשימות והאשים. הבא נכיר אותך, הפניה יקרהאתם, כמובן, מכירים כבר את מבני הנתונים הבסיסיים של Perl, כולל משתנים סקלריים, רשימות והאשים. כברוב שפות התכנות משתנים אלו מכילים מידע, בין אם זה מידע מספרי, תווים, מחרוזות או כל דבר אחר. הפניה ב Perl דומה למשתנים הללו, בהבדל חשוב אחד: במקום להכיל את המידע עצמו, הפניה מצביעה למשתנה אחר. התבוננו בדוגמא הפשוטה: $name="Moe"; $name_reference=\$name; המשתנה הסקלרי name$ מכיל את המידע המחרוזתי "Moe". ההפניה name_reference$ מצביעה למשתנה name$. הניסוח "מצביע"(pointer) חשוב ביותר, גם אם לעיתים קשה להבנה. ויתכן ותמצאו תועלת באנלוגיות מתחומים אחרים: ממשק המשתמש (desktop) הן בחלונות והן במקינטוש משתמשים במושגי המצביע במה שנקרא קיצורי דרך (shortcuts או aliases). במקרים הללו הקובץ או/ו הסימן (icon) אינם מכילים מידע ממשי, אלא מובילים או מצביעים לקובץ אחר המכיל את המידע. ה symlinks במערכות יוניקס עובדות בצורה דומה. באינטרנט, ניתן לחשוב על שם האתר (domain name), כמו ESTUFF.COM כמצביע . כיוון שהמחשבים משתמשים בכתובות IP מספריות, שם האתר הוא מצביע לכתובת IP. הסדרן באצטדיון או באופרה הוא מצביע, לעיתים פשוטו כמשמעו. אתם מראים את הכרטיס והסדרן מצביע, "מושבכם נמצא שם". למעשה גם הכרטיס הוא סוג של מצביע, כיוון שהוא איננו המושב הפיסי. זה שונה למשל מ: $name2=$name; כיוון שבמובא לעיל name2& מבצע העתקה פיזית של הערך ב name$. שינויים עתידיים בערך של name$ לא ישפיעו במאומה על name2 $. אולם כיוון שההפניה היינה מצביע, כל שינוי שיבוצע על name$ ישוקף כל פעם שתיגשו לערכו דרך ההפניה name_reference$. איך שלא תחשבו על זה, הנקודה היא שההפניה ב Perl אינה מכילה מידע, אלא מצביעה למבנה נתונים, יהי זה סקלר, רשימה, או האש. ההתייחסות להפניה עצמה היא כסקלר, כך שלפניה תמיד יבוא סימן הדולר ($), בלא קשר למשתנה אילו היא מצביעה. משמע: @cats=("Harvey","Smitty"); $catref=\@cats; %catbreeds=("tabby"=>"Harvey","calico"=>"Smitty"); $catbreedref=\%catbreeds; בשני המקרים שראינו ההפניה מוגדרת בעזרת המינוח הסקלרי, בלי קשר לעובדה האם הם מצביעים לרשימה או להאש. כמו שאתם רואים בנייה של ההפניות עצמן היא קלה יחסית. הבעיה העיקרית היא מה לעשות בהן, ואיך לעקוב אחרי מצביעים אלו לקערת הזהב. תוכן הענינים:
|