पर्ल में देखें, यह कोड के बुला एक चर ट्रिगर पर कार्रवाई करने के लिए संभव है।
उदाहरण के लिए,
use Variable::Magic qw(wizard cast);
my $wiz = wizard(
get => sub { print "get\n" },
set => sub { print "set\n" },
);
cast my $x, $wiz;
$x = 1; print("$x\n");
$x = 2; print("$x\n");
आउटपुट
set
get
1
set
get
2
इस तरह के चर जादू है करने के लिए कहा जाता है।
perlvar में से कई चर जादुई हैं। उदाहरण के लिए, $!
प्रॉक्सी errno
और strerror
पर जादू का उपयोग करता है।
$ perl -E'for (1..5) { $! = $_; say $!; }'
Operation not permitted
No such file or directory
No such process
Interrupted system call
Input/output error
$ perl -MDevel::Peek -e'Dump($!)'
SV = PVMG(0x292fdf0) at 0x28f9648
REFCNT = 1
FLAGS = (GMG,SMG) <--- Has get and set magic
IV = 0
NV = 0
PV = 0
MAGIC = 0x28e0f50
MG_VIRTUAL = &PL_vtbl_sv
MG_TYPE = PERL_MAGIC_sv(\0)
MG_OBJ = 0x28f9660
MG_LEN = 1
MG_PTR = 0x2903230 "!"
यह कोर में जादू के कई प्रयोगों में से एक है। perlguts में कई अन्य लोगों के लिए "वर्तमान प्रकार के जादू" के लिए खोजें, जिसमें lvalue substr
शामिल हैं।
# When substr is used as an lvalue, it returns a
# magical variable that changes $s when it's changed.
substr($s, 0, 1) = "abc";
tie
पर्ल कोड के जादू को कुछ इसी तरह का पर्दाफाश करने के लिए जादू का उपयोग करता है।
जादुई स्केलर से जादुई हैंश और सरणी दुर्लभ हैं। %ENV
प्रॉक्सी getenv
और putenv
। @ISA
में विधि लुकअप कैश को अमान्य करने के लिए जादू है।
$ perl -MDevel::Peek -e'Dump(@ISA, 0);'
SV = PVAV(0x1087e88) at 0x10a3a78
REFCNT = 1
FLAGS = (SMG,RMG) <--- Has set and other magic
MAGIC = 0x108b380
MG_VIRTUAL = &PL_vtbl_isa
MG_TYPE = PERL_MAGIC_isa(I)
MG_OBJ = 0x10a3a90
ARRAY = 0x0
FILL = -1
MAX = -1
ARYLEN = 0x0
FLAGS = (REAL)
'_ _' सरणी" जादुई "है। – serenesat
'@ _' सरणी जादुई नहीं है। – mob