السلام عليكم
الهدف من هذا الموضوع إبراز كيفية تطوير برنامج لترجمة أكواد البيرل. ليس تطوير مترجم في حد ذاته بل IDE
لتجربت هذا الكود لابد من تنصيب ال ActivePerl
الجزء الرئيسي من الكود هو التالي حيث قمت بتشغيل الملف التنفيذي cmd.exe وأسندت له الأمر Perl ليفهم أنه بصدد تنفيذ سكريبت بيرل.
public void Run()
{
StreamWriter txtWriter = new StreamWriter(FileName);
string[] textLines = CodeArea.Lines;
foreach (string line in textLines)
txtWriter.WriteLine(line);
txtWriter.WriteLine("$file = <STDIN>;");
txtWriter.Close();
Process process = null;
try
{
process = new Process();
process.StartInfo.WorkingDirectory = string.Format(@"C:\windows\system32\cmd.exe");
process.StartInfo.FileName = FileName;
process.StartInfo.Arguments = string.Format("Perl ");
process.StartInfo.CreateNoWindow = true;
process.Start();
}
catch (Exception ex)
{ MessageBox.Show(string.Format("Exception :{0},{1}", ex.Message, ex.StackTrace.ToString())); }
}الكود الذي يكتب في ال يتم حفظه في ملف ليتم إستدعائه عند التنفيذ
الطريقة المعتادة في ترجمة السكريبت بيرل هي كما يلي:
هذا البرنامج قيد التطوير وأضعه هنا لكل من يريد المساهمة والإستفادة. علما أني لا أحتاجه لا لأغراض تجارية ولا أغراض خاصة إنما محاولة لتبادل الخبرة.
المرحلة القادمة تتمثل في تغير وجهة المخرجات كي يتمكن المطور من تتبع الأخطاء. يوجد لذلك الدالة ReadConsoleOutput
المعرفة بالكيفية التالية
[DllImport ("kernel32.dll", EntryPoint="ReadConsoleOutput", SetLastError=true, CharSet=CharSet.Unicode)]
extern static bool ReadConsoleOutput (IntPtr handle,
void *buffer,
Coord bsize,
Coord bpos,
ref SmallRect region);يمكن أيضا الإنطلاق من التعليمات التالية:
process.StartInfo.CreateNoWindow = false; process.StartInfo.RedirectStandardOutput = true;
يمكن أيضا المساهمة بعدة تطويرات أخرى. كل وإمكانياته
أذكر مجددا أن الغاية الأساسية من هذا الموضوع هو الإفادة.