CGI...

CGI...

למה דווקא Perl היא שפה כל-כך פופולרית בעבודה עם CGI ? למה לא C או C++ ? (בעוד ש-C++ היא מכוונת אובייקטים אז כך שזה עוד יותר טוב)
 

galh

New member
תנסה לכתוב CGI בפרל ואז ב- C

ואם באמת אתה רוצה אז ב- ++C. תחזור אחרי הבדיקה. שני דברים שקופצים לי מייד זה ניהול זכרון (שלא צריך בפרל) ועיבוד מחרוזות (ביטויים רגוליים בנויים בתוך השפה).
 

idansof

New member
בדיוק מהסיבה שמערכות הפעלה

בד"כ כותבים בC/C++ ולא באסמבלר - בPerl ו"שפות סקריפט"(למרות שאני לא מסכים לכינוי הלז) קל ומהיר יותר לתכנת לרוב. אתן דוגמא משפת סקריפט אחרת, היות ויכולותי בPerl מוגבלות משהו:
mylist=['water','ice'] mylist << 'vapor' mylist << 'steam' mylist.each do |item| puts "This is a list item: #{item}"; end​
נסה לכתוב תוכנית זהה בC/C++, או אפילו בJava.
 

selalerer

New member
זה לא דוגמא טובה כלכך. הנה זה ב++C:

vector<string> mylist; mylist.push_back("water"); mylist.push_back("ice"); mylist.push_back("vapor"); mylist.push_back("steam"); int i; for(i=0;i<mylist.size();i++) { cout<<"This is a list item:"<<mylist<<endl; }
 

galh

New member
נו, באמת...

עכשיו תקרא את השורות מקובץ ותדפיס רק את השורות שמכילות כתובת e-mail חוקית.
 

selalerer

New member
באמת, באמת!

הדבר היחיד ה"מסובך" פה הוא לעשות בעצמך פונקציה שבודקת e-mail ואת זה אפשר לכתוב ב3 דקות, תצטרך לכתוב את זה פעם אחת בחיים בלבד, ואתה כנראה יכול להוריד את זה מוכן מהאינטרנט אם אתה נורא רוצה. בלי הקטע ה"מסובך" זה כל הקוד:
#define BUF_SIZE 256 ifstream ifs("in.txt"); string line; while(ifs.good()) { char buf[BUF_SIZE]; ifs.getline(buf,BUF_SIZE); line=buf; if(line.find("@")!=string::npos) { cout<<line<<endl; } }​
 

idansof

New member
אבל אפשר בפחות../images/Emo13.gif

EmailRegexp=/^[\w]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)*$/ FILE="list.txt" File.open(FILE,"r").each do |line| if line=~EmailRegexp puts line end end​
נכון שאפשר לעשות זאת באופן דומה בC++, אבל שים לב, אפילו אם נוריד מהמניין את הbraces, עדיין מדובר ב9 שורות קוד, לא כולל בדיקת ואלידיות מלאה, לעומת 5 שורות(ללא end) עם בדיקת ואלידיות מלאה(4 שורות אם הייתי מגדיר את שם הקובץ שלא כתור משתנה) אני חושב שדי ברור איזו דוגמא קל יותר להבין ולתחזק, אף על פי שהקוד שתכתוב בC++ יהיה ללא ספק מהיר בהרבה.
 

galh

New member
מה באמת?!

איפה ה- include-ים למינהם? איפה הטיפול בשורות שיותר ארוכות מ- 256 תוים? לבדוק אם יש @ זו לא בדיקת חוקיות מלאה. ועוד אפשר להמשיך...
 

selalerer

New member
באמת!

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

galh

New member
מה באמת?

צריך להתאים את הכלי (השפה) לעבודה. לכתוב CGI עם C או ++C זה להשתמש בכלי שמסוגל לפתור את הבעיה, אבל בעלות גבוהה. תנסה לכתוב CGI שצריך לעבוד מול DB ונראה כמה זמן זה יקח לך וכמה דליפות זכרון תצטרך לאתר. שלא לדבר על התהליך של כתיבה, קמפול, קללות, תיקון הקוד, קמפול, לינקג', שוב קללות, תיקון, ושוב לינקג' שצריך לעבור כל פעם.
הדיון קצת גולש לנושא אחר. ++C נותנת המון יכולות בנויות לתוך השפה, אבל גם דורשת המון לימוד, המון ניסיון והמון זהירות. רוב המתכנתים שהכרתי (וכבר נכתבו המון ספרים ומאמרים בנושא) לא יודעים ולא מעוניינים ללמוד. הרמה הבינונית שולטת (כי למי אכפת אם הקוד ברמה נמוכה, העיקר שהתוכנה עובדת).
 

selalerer

New member
טוב, לא אמרתי שאין דוגמאות שבהן זה

תקף, פשוט שאלה שהבאתם לא עושות את העבודה.
 

voguemaster

New member
אם אתה רוצה להיות שוויצר

לפחות תהיה עד הסוף. הנה זה בפרל:
open(FILEHANDLE, "<path>"); while(<FILEHANDLE>) { if (/[^0-9a-zA-Z\;\_\, @\-\.]/) { print $_ . "\n"; } } close(FILEHANDLE);​
 

הוליסטי

New member
TCL

set mylist {"water", "ice"} lappend $mylist "vapor" lappend $mylist "steam" foreach item $mylist { puts "This is a list item: $item" }
 

voguemaster

New member
זה מאוד פשוט

היכולות של פרל בכל מה שקשור במניפולציות על טקסט ומחרוזות שמות בכיס הקטן כל חלופה קיימת שיש ל-C או ++C. למעשה, זה לא יהיה מופרך להגיד שפרל מבחינת מחרוזות היא מס' 1. מעבר לזה, בפרל קל לעשות דברים, הרבה יותר מב-C. דברים פשוטים הם ממש טריויאליים ודברים קצת יותר מסובכים עדיין קלים יותר משמעותית. כמובן, לפרל יש ממשק טבעי ל-CGI (הוא נקרא CGI.pm, מודול פרל של CPAN) כך שהחיים עוד יותר קלים ממה שנדמה לך. אתה יכול ליצור CGI בפרל ב-5 דקות, זה פשוט להפליא. אם אתה לוקח את כל הגורמים האלה בחשבון, המסקנה ברורה. אני ממליץ לך לנסות לכתוב איזה CGI בפרל ולראות עד כמה זה קל.
 
קל לכתוב CGI בשפת Perl

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