كيفية استخدام دالة system() في Perl لطباعة الأوامر المنفذة

عند العمل مع Perl، يمكن تنفيذ أوامر النظام باستخدام إما دالة system() أو الأكواد المقلوبة. هذا يسمح لك بتشغيل الأوامر، ولكن في الغالب يخفي الأوامر عن العرض، مما قد يكون محبطًا أثناء التطوير أو التصحيح. إذا وجدت نفسك يومًا ترغب في رؤية الأوامر التي يتم تنفيذها في نصك—تمامًا كما تفعل مع أمر @echo on في ملف الدُفعات في Windows—فأنت في المكان الصحيح! دعنا نستكشف كيفية تحقيق ذلك.

المشكلة

تسمح دالة system() في Perl بتنفيذ أوامر النظام، ولكن افتراضيًا، لا تطبع الأمر قيد التنفيذ. قد يكون هذا مفيدًا في نصوص الإنتاج حيث تريد الحفاظ على نظافة المخرجات. ومع ذلك، لتصحيح الأخطاء أو لفهم أعمق، سيكون رؤية تلك الأوامر في الوقت الفعلي مفيدًا للغاية.

الحل

لحل هذه المشكلة، يمكننا إنشاء غلاف بسيط حول دالة system()، يقوم بطباعة الأمر قبل تنفيذه. بهذه الطريقة، ستكون لديك رؤية كاملة حول الأوامر التي تتم معالجتها بواسطة نص Perl الخاص بك. إليك الخطوات لتنفيذ ذلك:

الخطوة 1: فهم system()

تستطيع دالة system() تنفيذ أمر وإرجاع حالة خروجه، لكنها لا تنتج الأمر نفسه. إليك مثال أساسي:

$ls = system("ls");
print "Result: $ls\n";  # لن تعرض هذا أمر 'ls'

ستظهر المخرجات فقط النتيجة، وليس الأمر الذي تم تشغيله.

الخطوة 2: طباعة الأوامر باستخدام دالة غلاف

لطباعة الأمر مع مخرجاته، يمكننا إنشاء دالة فرعية تأخذ أمرًا كوسيط، تطبعه على وحدة التحكم، ثم تشغل الأمر نفسه. إليك كيفية القيام بذلك:

sub execute {
    my $cmd = shift;          # احصل على الأمر
    print "$cmd\n";          # طباعة الأمر قيد التنفيذ
    system($cmd);            # تنفيذ الأمر
}

my $cmd = $ARGV[0];          # احصل على الأمر من وسيط سطر الأوامر
execute($cmd);               # استدعاء الدالة مع الأمر

الخطوة 3: مثال على الاستخدام

لاستخدام هذه الدالة، يمكنك ببساطة استدعاء نص Perl الخاص بك من سطر الأوامر بينما تمرر الأمر المطلوب كوسيط. على سبيل المثال:

perl your_script.pl "ls"  # استبدل "your_script.pl" باسم نصك

عند تنفيذ ذلك، سترى الأمر ls مطبوعًا على وحدة التحكم قبل تنفيذه، مما يعطيك الرؤية التي تحتاجها.

الملخص

من خلال إنشاء غلاف بسيط حول دالة system()، يمكنك طباعة الأمر المنفذ بالإضافة إلى مخرجاته. هذه التقنية لا تقدر بثمن للتصحيح أو عندما تحتاج إلى مزيد من الوضوح حول ما يفعله نصك. تذكر:

  • system(): يشغل أمرًا لكنه لا يطبعه.
  • دالة الغلاف: إنشاء دالة جديدة لعرض الأمر قبل تنفيذه.

باستخدام هذا الأسلوب المباشر، يمكنك إضافة الشفافية إلى نصوص Perl الخاصة بك، مما يجعلها أسهل للمراقبة والتصحيح. تمنى لك شفافة في البرمجة!