…קצת מניפולציות

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

א. קלט ופלט המשתמש       ב. קובץ קלט ופלט

קלט משתמש הינו קלט המתקבל כאשר המשתמש אומר באופן מפורש לסקריפט שלך לבצע משהו. פלט משתמש זה כאשר הסקריפט "מדבר" ישירות מול המשתמש. וכל זאת מתבצע בעזרת אמצעים הנקראים קלט סטנדרטי ופלט סטנדרטי (Standard Input and Standard Output).

הקלט נקרא ע"י קריאת מזהה הקובץ (File Handle) , למרות שהקלט הסטנדרטי איננו קובץ הוא מטופל בצורה זהה כפי שמטופל קובץ קלט , אתה תראה זאת שנגיע ל קבצי קלט ופלט. קריאה מקלט סטנדרטי מתבצעת כך:  

$usersaid = <STDIN>;

מזהי קובץ (file handles) נכתבים תמיד באותיות גדולות ולכן קל לזהות אותם. מזהי הקובץ הינם ייצוג של קובץ פתוח עבור הסקריפט. קלט סטנדרטי ופלט סטנדרטי נחשבים תמיד כפתוחים ולכן אין לך צורך לדאוג לפתוח אותם כפי שעליך לעשות עם קבצים רגילים כפי שתראה בהמשך.

 ההצהרה $stuff = <INPUT>; קוראת שורה אחת של קלט לתוך המשתנה $stuff ממזהה הקובץ INPUT.

לעומת זאת השורה  $usersaid = <STDIN>;  תקרא שורת קלט מן המשתמש ותכניס זאת למשתנה usersaid$. פקודת ה print שאותה ראית בדוגמאות קודמות שלי היא הגישה הסטנדרטית עבור הוצאת המידע. ברירת המחדל עבור פקודת print הינה הדפסה לעבר הפלט הסטנדרטי (standard output) ולכן אין צורך לציין זאת עבורה כפי שמתבצע עבור מזהי קובץ (File Handles) אחרים.    בכדי להדפיס למסך בחזרה את מה שהתקבל ממנו נבצע :      ;"print "$usersaid

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

#!/usr/local/bin/perl print "\nPlease enter a number: "; $guess = <STDIN>; while ($guess != 20) { print "\nSorry! You guessed wrong sucka! Guess again!"; $guess = <STDIN>; } print "Damn! You got it!";

 

בעזרת השימוש בלולאת ה while אנו בודקים את הקלט מן המשתמש $guess וממשיכים בלולאה עד לניחוש הנכון (20). והאמן לי קוד זה איננו הדבר המרגיז ביותר שביכולתך לכתוב , שים לב כי התו /n משמש עבור שורה חדשה ב unix.

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

לדוגמא-  open (NAMES, "/usr/people/ferm/names.txt"); ברגע שהקובץ פתוח אתה יכול להתחיל לקרוא ממנו שורה,שורה כפי שעשית עם קלט המשתמש. וזה מתבצע כך:

$fileinput = <NAMES>;

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

@fileinput = <NAMES>;

בקיצור, עליך לפתוח קובץ קלט , לקרוא ממנו שורה,שורה לתוך משתנים או בבת אחת הכל למערך ובסוף עליך לסגור את מזהה הקובץ – וזה מוביל אותי לכלל מס' 7

כלל מספר 7: אין אפשרות לכתוב ולקרוא מאותו הקובץ באותו הזמן ולכן עליך לבצע סגירה בסיום השימוש בו לקלט\פלט , זה מתבצע כך:          close(NAMES);              

ישנם 2 מצבי כתיבה לקובץ : מצב אחד נקרא כתיבה (writing) ומצב שני נקרא הוספה (appending). במצב כתיבה אנו מבצעים כתיבה לתוך הקובץ ומוחקים את תוכנו הקיים (המידע "נדרס") ואם הקובץ כלל לא קיים אז הפקודה מייצרת אותו ואז כותבת לתוכו את המידע הנכתב. במצב הוספה הכתיבה מתבצעת בסופו של התוכן של קובץ קיים (לא מתבצעת "דריסה").

כתיבה (Writing) :

open (OUTFILE, ">/usr/people/ferm/perllog.txt");

הוספה (Appending) :

open (OUTFILE, ">>/usr/people/ferm/perllog.txt");

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

 וזה מתבצע כך:

print OUTFILE "Here's a line of output";

ואל תשכח לסגור את הקובץ בסוף…

לולאות  | איך שהתינוק שלנו גדל