मैं पर्ल के Safe मॉड्यूल से reval का उपयोग कर रहा हूं और मैं इसे चेतावनी उत्पन्न करने से रोकना चाहता हूं अगर स्ट्रिंग को निकाला जा सकता है तो पार्स नहीं किया जा सकता है (असल में, मैं इसे किसी भी चेतावनी उत्पन्न करने से रोकना चाहता हूं) ।"कोई चेतावनी नहीं;" एक सुरक्षित डिब्बे में
उदाहरण के लिए, निम्न कोड: में
use strict; use warnings;
use Safe;
use feature qw/say/;
my $cft = Safe->new;
my $x = $cft->reval(') 1');
my $y = $cft->reval('2' );
say "x: $x";
say "y: $y";
परिणाम:
Number found where operator expected at (eval 5) line 1, near ") 1"
(Missing operator before 1?)
Use of uninitialized value $x in concatenation (.) or string at ./test line 12.
x:
y: 2
क्या मैं प्राप्त करने के लिए कोशिश कर रहा हूँ है $ x = undef और $ y = 2, और कोई चेतावनी। मैंने "कोई चेतावनी नहीं डालने की कोशिश की;" एक नया दायरे के अंदर है, लेकिन यह Reval के भीतर से उत्पादित चेतावनी पर कोई प्रभाव नहीं है (हालांकि, के रूप में @DavidO से कहा, यह 'अप्रारंभीकृत मूल्य' चेतावनी चुप्पी):
use strict; use warnings;
use Safe;
use feature qw/say/;
my $cft = Safe->new;
{
no warnings;
my $x = $cft->reval(') 1');
my $y = $cft->reval('2' );
say "x: $x";
say "y: $y";
}
मुझे लगता है कि किसी भी तरह लगता है सुरक्षित डिब्बे के अंदर 'कोई चेतावनी' नहीं होनी चाहिए, इसलिए मैंने "कोई चेतावनी" तैयार करने की भी कोशिश की; तार करने के लिए किया जा रहा eval'ed:
use strict; use warnings;
use Safe;
use feature qw/say/;
my $cft = Safe->new;
{
my $x = $cft->reval('no warnings;' . ') 1');
my $y = $cft->reval('no warnings;' . '2' );
say "x: $x";
say "y: $y";
}
इस तरह Reval कोई चेतावनी जारी नहीं करता है, लेकिन दोनों चर undef हैं:
Use of uninitialized value $x in concatenation (.) or string at ./test line 10.
x:
Use of uninitialized value $y in concatenation (.) or string at ./test line 11.
y:
मैं और क्या करने की कोशिश करना नहीं जानते हैं, और मुझे आशा है कि कि समस्या का विवरण पर्याप्त स्पष्ट था।
आपका दूसरा प्रयास वास्तव में पहले के समान आउटपुट का उत्पादन नहीं करता है। यह अभी भी "कंपाइलटाइम" त्रुटि उत्पन्न करता है (वास्तव में संकलन त्रुटि को पुन: संशोधित करता है), लेकिन आपके 'कहना' कथन में एक अनियमित मूल्य को इंटरपोल करने से संबंधित रनटाइम चेतावनी नहीं। तो आपने उपरोक्त अपने दूसरे स्निपेट में वास्तव में अपनी समस्या का आधा हल किया है (चेतावनी को घुमाया है)। दूसरा आधा (संकलन-समय त्रुटि को झुकाव) अधिक समस्याग्रस्त है। – DavidO
हाँ, आप इसके बारे में सही हैं। मैंने यह भी ध्यान नहीं दिया क्योंकि यहां मेरी मुख्य चिंता वास्तव में पुनरुत्थान थी - अनियमित वैरिएबल चेतावनियां उदाहरण का संक्षिप्त रखने की कोशिश कर रही हैं। वैसे भी, मैंने इसे स्पष्ट करने के लिए पोस्ट को अपडेट किया है। धन्यवाद! – andrefs