2015-05-18 9 views
14

पर्ल documentation for reverse में मैं इस लगता है:पर्ल में जादुई सरणी क्या है?

"ध्यान दें कि अपने आप को एक सरणी पीछे (@a = रिवर्स @a के रूप में) न के बराबर तत्वों को सुरक्षित करेगा जब भी संभव हो, यानी, गैर जादुई सरणियों के लिए या EXISTS और DELETE विधियों के साथ बंधे सरणी के लिए। "

क्या गुण गैर जादुई सरणी से जादुई को अलग करते हैं?

+0

'_ _' सरणी" जादुई "है। – serenesat

+6

'@ _' सरणी जादुई नहीं है। – mob

उत्तर

10

जादुई सरणी वह जगह है जहां पर एक ऑपरेशन किया जाता है जो सामग्री को आसानी से बदलने से कहीं अधिक करता है। जादू का एकमात्र अंतर्निर्मित सरणी @ISA है, और यह एक बहुत ही स्पष्ट तरीके से है। वाक्य से स्पष्ट है, एक जादुई सरणी ज्यादातर एक बंधे सरणी है, tie और perltie

+4

फ़ाइलहेडल '* एआरजीवी 'जादू है, लेकिन' एआरजीवी' नहीं है। – mob

+0

@ikegami: धन्यवाद। मैंने नहीं देखा कि – Borodin

+0

'@ -' और' @ + 'पर भीड़ क्या हो रही थी। – ikegami

12

जादुई चर वे हैं जिनके पास विशेष विशेषताएं हैं जो उस प्रकार के सामान्य चर नहीं हैं।

Magic Variables in perlguts देखें। Variable::Magic भी देखें जो आपको "उपयोगकर्ता द्वारा परिभाषित जादू को पर्ल से चर के लिए संबद्ध करता है।"

3

पर्ल में देखें, यह कोड के बुला एक चर ट्रिगर पर कार्रवाई करने के लिए संभव है।

उदाहरण के लिए,

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) 
संबंधित मुद्दे