2016-11-22 7 views
8

मैं कुछ पुराने कोड के आसपास इकाई परीक्षण लिख रहा हूँ, और Apache2 :: अनुरोध के read() विधिपर्ल में एक्सएस का उपयोग किये बिना कॉलर के चर को कैसे लिखना है?

my $r = Apache2::Request->new(...); 

$r->read(my $buf, $len); 

वहाँ एक रास्ता पर्ल में एक समारोह $buf पॉप्युलेट करने के लिए लिखने के लिए है चारों ओर एक नकली लिखने के लिए की जरूरत है लगता है? मुझे पूरा यकीन है कि ऐसा करने का एकमात्र तरीका एक्सएस कोड से ** के साथ है, लेकिन मैंने सोचा कि मैं कम से कम पहले पूछूंगा।

अपाचे 2 का उपयोग :: अनुरोध सीधे इसकी ओर जाता है, इसलिए मेरी नकल करने की मेरी इच्छा है।

perl: symbol lookup error: .../APR/Request/Apache2/Apache2.so: 
undefined symbol: modperl_xs_sv2request_rec 
+0

तो तुम 'read' नकली करना चाहते हैं, यह सही है? – simbabque

+0

पर्ल हमेशा संदर्भ द्वारा गुजरता है, इसलिए आपको केवल $ _ [1] 'संशोधित करना है। – ikegami

उत्तर

9

एक पर्ल सबरूटीन या विधि में, मानकों @_ सरणी के माध्यम से पारित कर रहे हैं। कॉलिंग उप में चर के लिए इस सरणी में तत्व उपनाम हैं।

@_ खोल के आम तरीका है इस तरह एक प्रतिलिपि बनाकर है:

my($self, $buf, $len) = @_; 

तो इस मामले में $buf को बताए काम नहीं करेगा क्योंकि आप केवल चर की अपनी प्रतिलिपि संशोधित कर लिया है। लेकिन अगर आप सीधे @_ के मान में बदलाव तो है कि फोन करने वाले का चर को प्रभावित करेगा:

$_[1] = 'some data'; 
+2

हाहा, मैंने वास्तव में वहां खुद को सोचा। धन्यवाद! –

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