פקודת eval :
כפי שתואר קודם לכן, Tcl מבצעת מעבר אחד על התכנית לצורך ביצוע
parsing ושערוך הביטויים השונים. השימוש בפקודה eval נועד כדי להכריח את
המתרגם לעבור יותר מפעם אחת על הביטויים, שימוש שמקרים רבים מוכיח את עצמו
כמועיל במיוחד.באופן זה ניתן לשמור בתוך משתנים תכניות שלמות בשפה ולהעריך
אותן על-פי בחירתנו.
התכנית הבאה מדגימה את השימוש ב-eval :
"set foo "set a 22
eval $foo
puts $a
22<=
לאחר שהושמה למשתנה foo הפקודה, eval גורמת למתרגם
של השפה לשערך את הביטוי שבמשתנה foo. המעבר הראשון על הביטוי גורם ל-foo
היות מוחלף בערכו ("set a 22"), ואחרי מעבר זה מתבצעת הערכה של הביטוי "eval
set a 22". הערכה של ביטוי זה גורמת ליצירת המשתנה a ולהשמה של הערך 22 לתוכו.
פקודת catch :
כאשר מתרחשת שגיאה בהרצה של תכנית Tcl התכנית כולה נעצרת ומופיעה הודעת שגיאה.
כדי למנוע את עצירת התכנית ולאפשר טיפול בשגיאות ניתן להשתמש בפקודה catch.
בעזרת הפקודה יכול המתכנת להגדיר פעולה שתתבצע כאשר מתרחשת שגיאה.
הסינטקס של הפקודה catch :
catch script ?varName
הפקודה גורמת להרצת ה-script ומחזירה מחרוזת דצימלית
שמייצגת את הקוד שהוחזר על-יד הרצת ה-script. ערכו יהיה 0 (TCL_OK) אם לא
היו שגיאות בהרצת ה-script. אחרת הערך המוחזר יהיה בהתאם לקודי השגיאה
המוגדרים בשפה (tcl.h). אם ניתן שם המשתנה varName ערכו בתום הרצת התכנית
יהיה הערך המוחזר על-ידי ה-script (ערך שגיאה או ערך מוחזר אחר).
התכנית הבאה מדגימה את השימוש ב-catch :
[ { ["set retval [catch {set
f [open "nosuchfile" "r
} {if {$retval == 1
"puts "An error occured
{
(כאשר אין קובץ באותו שם
בספריה הנוכחית )<=
הפקודה שמועברת כארגומנט ל-catch מנסה לפתוח את הקובץ
"nosuchfile" בספריה הנוכחית. בהנחה שקובץ בשם זה לא קיים בספריה, יוחזר
ערך שגיאה (ערך 1). מאחר וכל זה מתבצע במסגרת פקודת catch, מנגנון הטיפול
הסטנדרטי בשגיאות לא מופעל ו-catch מחזירה את הערך 1. ערך זה מושם לתוך המשתנה
retval שנבדק על-ידי ה-if.
|