2010-02-17 9 views
6

मैं अभी भी अपने हैश डेरफ़्रेंसिंग को हल करने का प्रयास कर रहा हूं। मेरी वर्तमान समस्या यह है कि अब मैं एक सब के लिए हैशफ पास कर रहा हूं, और मैं इसे उस सब के भीतर अव्यवस्थित करना चाहता हूं। लेकिन मुझे ऐसा करने के लिए सही विधि/वाक्यविन्यास नहीं मिल रहा है। उप के भीतर, मैं हैश कुंजी को पुन: सक्रिय करना चाहता हूं, लेकिन हैशफ के लिए सिंटैक्स एक हैश जैसा नहीं है, जिसे मैं जानता हूं कि कैसे करना है।मैं एक पर्ल हैश संदर्भ को कैसे कम करता हूं जिसे सबराउटिन में पास किया गया है?

तो क्या मैं चाहता हूँ यह करने के लिए है:

sub foo { 
    %parms = @_; 
    foreach $keys (key %parms) { # do something }; 
} 

लेकिन एक hashref साथ एक हैश के बजाय में पारित किया जा रहा।

कोई भी पॉइंटर्स (इरादा नहीं है) का स्वागत है।

धन्यवाद।

उत्तर

3

मैं वास्तव में इस समय कोड का परीक्षण किया havn't, लेकिन आप कुछ इस तरह के लिए करना चाहेंगे मुक्तहस्त लेखन:

sub foo { 
    $parms = shift; 
    foreach my $key (keys %$parms) { # do something }; 
} 
+0

@_ की बजाय शिफ्ट का उपयोग करके चाल चल रही है, और निश्चित रूप से, चर के लिए हैश की बजाय स्केलर का उपयोग करना। कार्य कोड: उप foo { $ parms = shift; foreach $ कुंजी (कुंजी% $ parms) {प्रिंट "$ कुंजी: $$ parms {$ key} \ n"; } } धन्यवाद! – sgsax

+4

'$ parms -> {$ key}' शायद $$ parms {$ key} ' – toolic

+1

' shift' बनाम '_ _' से थोड़ा पसंदीदा नहीं है। 'मेरा ($ हैशफ) = @_; 'बस भी काम करेगा। –

2

यहाँ एक तरह से करने के लिए भिन्नता एक हैश रेफरी एक उप के लिए पारित किया है:

use warnings; 
use strict; 

my %pars = (a=>1, b=>2); 
foo(\%pars); 
sub foo { 
    my ($href) = @_; 
    foreach my $keys (keys %{$href}) { print "$keys\n" } 
} 

__END__ 
a 
b 

भी देखें References quick reference और perlreftut

+1

लिंक के लिए धन्यवाद। मैं दूसरों के बीच, perlreftut पेज देख रहा हूं, लेकिन अभी भी इसे पूरी तरह से समझने की कोशिश कर रहा हूं। – sgsax

2

sub foo 
{ 
    my $params = $_[0]; 
    my %hash = %$params; 
     foreach $keys (keys %hash) 
     { 
     print $keys; 
     } 
} 

my $hash_ref = {name => 'Becky', age => 23}; 

foo($hash_ref); 

इसके अलावा संदर्भों के बारे में एक अच्छा परिचय here है।

+0

लिंक के लिए धन्यवाद। मैं उस संदर्भ को एक संदर्भ के रूप में उपयोग कर रहा हूं, लेकिन मुझे अभी भी इसका पूर्ण ज्ञान नहीं है। – sgsax

1
#!/usr/bin/perl 
use strict; 

my %params = (
    date => '2010-02-17', 
    time => '1610', 
); 

foo(\%params); 

sub foo { 
    my ($params) = @_; 
    foreach my $key (keys %$params) { 
     # Do something 
     print "KEY: $key VALUE: $params{$key}\n"; 
    }; 
} 
+0

ईप, अभी तक टूलिक्स जवाब नहीं देखा। ; x –

+0

मैं कहूंगा कि उसका नामकरण बेहतर है (हैशफ को href के रूप में नामित करना)। –

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