IO :: MARK.

اقرأ filehandles غير القابل للكشف عن غير مدمرة
التحميل الان

IO :: MARK. الترتيب والملخص

الإعلانات

  • Rating:
  • رخصة:
  • Perl Artistic License
  • اسم الناشر:
  • Andy Armstrong
  • موقع ويب الناشر:
  • http://search.cpan.org/~andya/

IO :: MARK. العلامات


IO :: MARK. وصف

اقرأ filehandles غير القابل للكشف عن غير مدمرة تخيل أنك حصلت على وظيفة get_image_size. يمكنك تمريرها ملف filehandle مفتوحا على ملف صورة وعدم إرجاع أبعاد Image.imagine أيضا أن لديك مأخذ توصيل مفتوح الذي تتوقع تلقيته صورة. كنت ترغب في معرفة أبعاد تلك الصورة وأيضا التقاط بياناتها. إذا قمت بتمرير مقبض المقبس إلى get_image_size، فسوف تستهلك بعض البيانات من تلك المقبس - يكفي لقراءة رأس الصورة والعمل أبعادها. لسوء الحظ، يتم فقد أي بيانات تحتوي على القراءات. أنت تعرف أبعاد الصورة ولكنك فقدت بعض بياناتها ولا يمكنك إرجاع المقبس للعودة إلى بداية الصورة؛ مآخذ لا تطلبها. SEND_IMAGE SEND_IMAGE {بلدي مقبس $ = التحول؛ # هذا يعمل بشكل جيد ... بلدي (العرض $، ارتفاع $) = get_image_size ($ المقبس)؛ # ... ولكن البيانات التي نرسلها هنا ستكون في عداد المفقودين مهما كانت header # bytes get_image_size المستهلكة. send_image_data (عرض $، ارتفاع $، $ المقبس)؛ } يمكنك المخزن المؤقت للصورة بأكملها في ملف، وفتح الملف وتمرير هذا المقبض إلى get_image_size. يعمل هذا ولكن يعني أنه لا يمكننا حساب حجم الصورة حتى لدينا الصورة بأكملها. إذا كنا بدلا من ملف صورة كنا نتعامل مع الصوت، فقد يكون دفق الإدخال لا حصر له بشكل فعال - مما يجعل التخزين المؤقت في ملف غير مريح. يمكننا إعادة كتابة get_image_size إلى ذاكرة التخزين المؤقت لأي بيانات يقرأها من المقبس. ثم يمكننا إرسال هذه البيانات قبل إرسال ما تبقى من البيانات من المقبس. ربما يعني ذلك الحفر حول الوظيفة التي لم نكتبها وتراجع واجهةها بإحكام إلى تطبيقنا. سيكون من الجيد تجنب هذا الحل هو الحل: استخدم IO :: Mark؛ SEND_IMAGE SEND_IMAGE {بلدي مقبس $ = التحول؛ بلدي $ Mark = IO :: MARK-> جديد (مقبس $)؛ # هذا يعمل بشكل جيد ... بلدي (العرض $، ارتفاع $) = get_image_size ($ علامة)؛ علامة $-> إغلاق؛ # ... وهكذا يفعل هذا! send_image_data (عرض $، ارتفاع $، $ المقبس)؛ } IO :: Mark هو IO :: مقبض إرجاع البيانات من المقبض الذي تم إنشاؤه منه دون استهلاك هذه البيانات من وجهة نظر المقبض الأصلي. ملاحظة المكالمة الصريحة للإغلاق بمجرد الانتهاء من $ علامة. طالما أن مقبض IO :: Mark المستنسخ في نطاق وفتح أي بيانات قراءة من المقبض الأصلي سيتم تخزينها مؤقتا في الذاكرة في حالة حاجة إلى قراءة من المقبض المستنسخ أيضا. لمنع هذا إما إغلاق المقبض المستنسخ بشكل صريح أو السماح له بالخروج من Scope.synopsis استخدم IO :: Mark؛ الفرعية فحص {my $ fh = التحول؛ بلدي $ Mark = IO :: MARK-> جديد ($ FH)؛ بلدي بوف. # يقرأ من $ FH عبر Mark $ Mark-> قراءة ($ buf، 1000، 0)؛ # افعل شيئا مع BUF $ # عندما يخرج علامة $ من النطاق $ FH لا توجد بيانات قد تم استهلاكها من متطلبات $ FH}: perl.


IO :: MARK. برامج ذات صلة

اختلاف

التحقق من صحة الاختبارات عن طريق مقارنة الناتج الحقيقي مقابل الإخراج المتوقع ...

72

تحميل