में संदर्भ द्वारा हैश को कैसे पास किया जाए, मुझे पता है कि यह आसानी से Google पर खोजने योग्य होना चाहिए, पेर्ल के एक छोटे से उपयोग का उल्लेख न करें, लेकिन मैंने कई समाधानों को आजमाया है और अब तक उनमें से कोई भी नहीं देता है अपेक्षित् व्यवहार। अनिवार्य रूप से, मैं एक सबराउटिन को कॉल करने की कोशिश कर रहा हूं, उस सबराउटिन से हैश का संदर्भ लौटाता हूं, उस हैश को किसी अन्य सबराउटिन के संदर्भ में पास करता हूं, और फिर उस हैश की सामग्री को निम्न के जैसा कोड के माध्यम से प्रिंट करता है:perl
#!/usr/bin/perl
my $foo = make_foo();
foreach $key (sort keys %$foo) {
print "2 $key $$foo{$key}\n";
}
print_foo(\%foo);
sub print_foo
{
my %loc = ???;
foreach $key (sort keys %loc}) {
print "3 $key $loc{$key}\n";
}
}
sub make_foo
{
my %ret;
$ret{"a"} = "apple";
foreach $key (sort keys %ret) {
print "1 $key $ret{$key}\n";
}
return \%ret;
}
क्या कोई मुझे हैश की अतिरिक्त प्रति बनाये बिना (सबराउटिन के माध्यम से) करने का सबसे अच्छा तरीका बता सकता है? मैंने जिन समाधानों का प्रयास किया है, उन्होंने "3" से शुरू होने वाली किसी भी पंक्ति को मुद्रित नहीं किया है।
एक तरफ, मैं दृढ़ता से अनुशंसा करता हूं कि आप अपने सभी कोड के शीर्ष पर 'सख्त उपयोग' का उपयोग शुरू करें। आपको 'my' का उपयोग करके अपने चर घोषित करने के लिए अपनी' foreach' लाइनों को बदलने की आवश्यकता होगी, लेकिन यह आपको सरल टाइपो को डिबग करने वाले कई सिरदर्दों को बचाएगा। – zostay