logo


פרק 11: הפניה להפניה

יחי ההבדל הקטן

הבא נחזור ביחד לדוגמא הפשוטה ביותר:

$name="Moe";
$name_reference=\$name;

הבא נדפיס את הערך של משתנה הייחוס (reference) שלנו.

print $name_reference;

נותן:

SCALAR(0xba5e84)

איכס! מה זה? - ג'יבריש. אולם אם נסתכל על זה מנקודת המבט של Perl: המשתנה name_reference$ מתייחס למה? הוא מצביע (pointer) למשתנה סקלרי, וזה בדיוק מה שאנו מקבלים כאשר אנו מנסים להדפיס את ערכו. כבני אדם, לא מעניין אותנו לאיזה כתובת הוא מצביע. מה שמעניין אותנו הוא הערך בתא שעליו מצביע name_reference$. פעולה זו נקראת ביטול הפניה (dereferencing) בעוד יצירת הפנייה בונה את המצביע, ביטול ההפניה גורם למצביע לגשת לערך בתא שאליו הוא מצביע.

הדרך הפשוטה ביותר לביטול הפניה, במיוחד אם ההפניה היא למשתנה סקלרי, היא להקדים להפניה סימן דולר, משמע לכתוב דולר כפול:

print $$name_reference;

נותן:

Moe

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

@wingsauces=("mild","medium","hot");
$wingsauce=\@wingsauces;

אנו יכולים להשתמש בהפניה לשליפת החפץ הראשון מהרשימה:

print ${$wingsauce}[0];

או:

שני קטעי הקוד הללו הינם בעלי משמעות זהה, ויוציאו תוצאה זהה (במקרה הזה "mild").

print $wingsauce->[0];

ניתן גם לשלוף את הרשימה כגוש אחד ולעבוד עליה בהקשר רשימתי:

print join(",",@{$wingsauce});

כאן, פעולת ה ()join, משמעת להדגמת ההקשר הרשימתי. הפונקציה הזו לוקחת רשימה, ומאחדת את האלמנטים שלה בעזרת תו נתון (במקרה הזה פסיק). ניתן לראות שפעולת ביטול ההפניה על רשימה שלמה מבוצעת ע"י מבנה ה { } @, כאשר משתנה ההפניה מושם בתוך הסוגריים המסולסלות.

לשם ביטול ההפניה להאש, אנו משתמשים בקוד שונה במקצת אולם לא מסובך יותר:

%mandms=("red"=>25,"brown"=>15,"blue"=>40);
$mmhash=\%mandms;

print $mmhash->{"blue"};

נותן:

40

בנאי החץ משמש לביטול ההפניה למפתח מסוים בתוך ההאש. במקרה הזה למפתח "blue". כדוגמא נוספת הבא נשתמש בביטול ההפניה לשם שליפת מפתחות ההאש mandms%:

print keys %{$mmhash}

לא רע בכלל! פונקצית ה keys דורשת האש, שאותו אנו מספקים בעזרת קידומת ה %, אשר בתוך הסוגריים המסולסלות הצמודות לה אנו כותבים את הסקלר אליו אנו מתייחסים (mmhash$). שזה ממש קסם.

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

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