होने के बाद:पर्ल में "eval" ओवरराइड
use 5.014;
use warnings;
BEGIN {
use subs qw(int);
sub int {
print STDERR "\tthe int got: $_[0]\n";
my $res = CORE::int($_[0]);
print STDERR "\tCORE::int: $res\n";
return $res;
}
}
my $x;
$x = 1.1 ; say "result of int($x) is: ", int($x);
$x = 6.6 ; say "result of int($x) is: ", int($x);
यह
the int got: 1.1
CORE::int: 1
result of int(1.1) is: 1
the int got: 6.6
CORE::int: 6
result of int(6.6) is: 6
int
समारोह अपने ही समारोह है, जो कुछ डिबग-प्रिंट करता है के द्वारा ओवरराइड है प्रिंट, और रिटर्न मूल (कोर) कार्यान्वयन का नतीजा।
eval
के लिए इसी के लिए खोज रहे हैं। लेकिन, शायद इसलिए कि eval
int
जैसे फ़ंक्शन नहीं है, उपरोक्त के रूप में ओवरराइड eval के लिए काम नहीं करता है।
क्या यह कुछ हद तक हासिल करना संभव है? जैसे
- मिला स्ट्रिंग
- प्रिंट चाहिए और eval
संपादित के मुख्य कार्यान्वयन बुलाना चाहिए: अनुसार ओवरराइड eval
(eval "$string"
) के रूप में ऊपर अपने ही eval, साथ जैसे चाहते हैं उपरोक्त टिप्पणियों के लिए eval
के लिए संभव नहीं है। तो:
संक्षेप में: सभीeval "$strings"
मेरी कार्यक्रम में की डिबग प्रिंट चाहते हैं, मूल्यांकन से पहले। यह कुछ हद तक संभव है?
कम से कम http://perldoc.perl.org/CORE.html पर पहुंचना यह प्रतीत होता है कि 'eval'' कोर :: eval' के रूप में मौजूद नहीं है, जिसका मेरा मानना है कि यह एक पर्ल कीवर्ड है जिसमें कमी है ओवरराइड होने का साधन। – DavidO
@ डेविडो [इस उत्तर] द्वारा पुष्टि की गई है (http://stackoverflow.com/a/3678957/176646) संबंधित प्रश्न पर। – ThisSuitIsBlackNot
['अधिभार :: eval'] (https://metacpan.org/pod/overload::eval) – ThisSuitIsBlackNot