2017-01-05 3 views
8

मुझे लगता है कि यह संदर्भ पर निर्भर है।क्या नए subroutine कॉल के लिए @_ पुन: उपयोग किए गए तत्व हैं या नया @_ बनाया गया है?

  1. जब &func कॉल किया जाता है यह पुन: उपयोग किया जाता है
  2. यह अन्य सभी कॉल

मैं this code है जहाँ मैं लाइन 1004 पर अप्रत्याशित eval कॉल मिला लिए बनाया जाता है:

sub save_context { 
    @DB::context = (\@_, (caller 2)[8..10], [email protected], $_); # line 1004 
    print_state "\nTRAPPED IN ", "\n\n" if _ddd; 
    DB::state('inDB', 1); 
} 

और यह स्टैकट्रैक:

DB /x/local/lib/perl5/Devel/DebugHooks.pm 1419 DB::orig_frames 
DB /x/local/lib/perl5/Devel/DebugHooks.pm 1460 DB::push_frame 
DB /x/local/lib/perl5/Devel/DebugHooks.pm 1004 DB::__ANON__[/x/local/lib/perl5/Devel/DebugHooks.pm:1460] 
DB /x/local/lib/perl5/Devel/DebugHooks.pm 1004 (eval) 
DB /x/local/lib/perl5/Devel/DebugHooks.pm 1251 DB::save_context 
DB /x/local/lib/perl5/Devel/DebugHooks.pm 1288 DB::DB_my 1 
MyApp::Controller::User /x/lib/MyApp/Controller/User.pm 41 DB::DB 1 
Mojolicious /x/local/lib/perl5/Mojolicious.pm 133 MyApp::Controller::User::list 
Mojolicious::Plugins /x/local/lib/perl5/Mojolicious/Plugins.pm 15 Mojolicious::__ANON__[/x/local/lib/perl5/Mojolicious.pm:133] 
... 

मेरी लॉग फ़ाइल से मैं देख सकता हूँ कि DBIx::Class::DESTROY उप कहा जाता है:

DB::sub DB::state: l:1 d:0 s:5 t:0 /x/local/lib/perl5/Devel/DebugHooks.pm:1004 --> DBIx::Class::DESTROY 

वस्तु विनाश क्यों स्थगित कर दिया है? मुझे लगता है कि किसी तरह

कोई सुझाव है कि क्या एक तर्क सूची के बिना वस्तु विनाश यहाँ

+0

क्या स्क्रिप्ट के अंत में विनाश को बुलाया जा रहा है (वैश्विक विनाश चरण)? – mob

+0

@mob मुझे पता चला है कि क्यों 'DESTROY' कहा जाता है। नीचे दिए गए उत्तर को देखें –

उत्तर

संबंधित मुद्दे