किसी कारण से, मुझे Expect.pm की log_file
विधि के साथ काम करने वाले फ़ाइल हैंडल नहीं मिल सकते हैं। मुझे मूल रूप से How can I pass a filehandle to Perl Expect's log_file function? पर सहायता मिली, जहां यह सुझाव दिया गया था कि मैं विधि को पास करने के लिए आईओ :: हैंडल फ़ाइलहेडल का उपयोग करता हूं। यह एक अलग मुद्दा प्रतीत होता है, इसलिए मैंने सोचा कि मैं एक नया प्रश्न शुरू करूंगा।मेरा पर्ल धन्य फ़ाइलहेड क्यों नहीं कर सकता है 'can (' print ')' 'के साथ सच नहीं है?
यह Expect.pm की अपमानजनक अनुभाग है:
if (ref($file) ne 'CODE') {
croak "Given logfile doesn't have a 'print' method"
if not $fh->can("print");
$fh->autoflush(1); # so logfile is up to date
}
तो, तो, मैं इस नमूना कोड की कोशिश की:
use IO::Handle;
open $fh, ">>", "file.out" or die "Can't open file";
$fh->print("Hello, world");
if ($fh->can("print"))
{
print "Yes\n";
}
else
{
print "No\n";
}
जब मैं इस चलाने के लिए, मैं दो (मेरे विचार से) विरोधी आइटम। एक पंक्ति वाली एक फ़ाइल जो 'हैलो, वर्ल्ड' और 'नो' के आउटपुट कहती है। मेरे दिमाग में, $fh->can
लाइन सही होनी चाहिए। क्या मैं यहाँ गलत हूँ?
'सख्त उपयोग करें; चेतावनियों का उपयोग करें; ' – Ether
मेरे पास कोई जवाब नहीं है कि यह अजीब क्यों काम कर रहा है, लेकिन मुझे संदेह है कि इसका हिस्सा आईओ से आता है :: हैंडल सामान्य श्रेणी नहीं है। उनमें से कुछ सामान्य मॉड्यूल के रूप में रहने के बजाय पर्ल स्रोत के अंदर है। यह एक बग रिपोर्ट के लायक हो सकता है (perlbug का उपयोग करें) :) –