2010-01-12 6 views
5

मैं निम्नलिखित पर्ल कोड है:टेर्ल :: सीएमडी :: सामान्य-> अनलिंक से पर्ल की eval पकड़ समस्याओं क्यों नहीं है?

use strict; 
use warnings; 
use Test::Cmd::Common; 

my $path = "/something/not/available"; 
my $test = Test::Cmd::Common->new(string => 'File system operations'); 

eval{ 
     $test->unlink("$path"); 
}; 
ok([email protected], "file unlike"); 

print "done.\n"; 

$ परीक्षण> अनलिंक() लाइन असफल हो जायेगी और फेंक अपवाद। लेकिन समस्या: eval उस अपवाद को संभालने नहीं है और कोड निष्पादन बाधित हो रहा है।

उत्पादन:

$ perl test.pl 
could not unlink files (/something/not/available): No such file or directory 
NO RESULT for test at line 561 of /home/y/lib/perl5/site_perl/5.8/Test/Cmd/Common.pm (Test::Cmd::Common::unlink) 
    from line 9 of test.pl. 

eval यहाँ सही काम कर रहा है? या मैं कुछ गलत समझ रहा हूँ?

एफ

उत्तर

11

टेस्ट :: Cmd :: आम के प्रलेखन से: "निर्दिष्ट फ़ाइलों को निकालता है कोई परिणाम से बाहर निकालता है, तो किसी भी फाइल किसी भी कारण से हटाया नहीं जा सका।।"। और स्रोत को देखकर, टेस्ट :: Cmd :: आम कॉल टेस्ट :: Cmd-> no_result, जो वास्तव में

exit (2); 

करता है 'प्रस्थान' eval में फंस नहीं किया जा सकता, तो यह व्यवहार की उम्मीद है।

+0

untested है, लेकिन कैसे 'के बारे में * टेस्ट :: Cmd :: no_result = उप { मरना 'कोई परिणाम नहीं'} '? – jrockway

1

यह थोड़ा ओर्थोगोनल है, लेकिन आप अगर एक ऑपरेशन "सफल" या मर गया का परीक्षण करना चाहते हैं, Test::Exception का उपयोग करें:

use strict; 
use warnings; 
use Test::More tests => 2; 
use Test::Exception; 

note 'File system operations'; 
dies_ok 
    { some_operation_which_may_die(); } 
    'operation died'; 

throws_ok 
    { some_operation_which_may_die(); } 
    /String we expect to see on death/, 
    'operation died with expected message'; 
संबंधित मुद्दे