2010-08-24 19 views
17

मैं एक लूप के माध्यम से बिना किसी हश को शुरू करने का तरीका जानने का प्रयास कर रहा हूं। मैं उस के लिए स्लाइस का उपयोग करने की उम्मीद कर रहा था, लेकिन ऐसा लगता है कि अपेक्षित परिणाम नहीं लग रहे हैं।मैं लूप के बिना हैश में मान कैसे प्रारंभ करूं?

निम्नलिखित कोड पर विचार करें:

#!/usr/bin/perl 
use Data::Dumper; 

my %hash =(); 
$hash{currency_symbol} = 'BRL'; 
$hash{currency_name} = 'Real'; 
print Dumper(%hash); 

के रूप में की उम्मीद है और निम्नलिखित उत्पादन का उत्पादन इस काम करता है:

$VAR1 = 'currency_symbol'; 
$VAR2 = 'BRL'; 
$VAR3 = 'currency_name'; 
$VAR4 = 'Real'; 

जब मैं इस प्रकार स्लाइस इस्तेमाल करने की कोशिश, यह काम नहीं करता:

#!/usr/bin/perl 
use Data::Dumper; 

my %hash =(); 
my @fields = ('currency_symbol', 'currency_name'); 
my @array = ('BRL','Real'); 
@hash{@array} = @fields x @array; 

उत्पादन होता है:

$VAR1 = 'currency_symbol'; 
$VAR2 = '22'; 
$VAR3 = 'currency_name'; 
$VAR4 = undef; 

वहाँ स्पष्ट रूप से कुछ गलत है।

तो मेरे सवाल होगा: क्या एक हैश दो सरणियों (कुंजी और मूल्यों) दिया प्रारंभ करने में सबसे खूबसूरत तरीका है?

उत्तर

23
use strict; 
use warnings; # Must-haves 

# ... Initialize your arrays 

my @fields = ('currency_symbol', 'currency_name'); 
my @array = ('BRL','Real'); 

# ... Assign to your hash 

my %hash; 
@hash{@fields} = @array; 
+0

धन्यवाद - सही! – emx

6
%hash = ('current_symbol' => 'BLR', 'currency_name' => 'Real'); 

या

my %hash =(); 
my @fields = ('currency_symbol', 'currency_name'); 
my @array = ('BRL','Real'); 
@hash{@fields} = @array x @fields; 
+0

कैसे एक हैश प्रारंभ करने पर इस पाठ्यपुस्तक उदाहरण के लिए धन्यवाद। हालांकि, यह वह नहीं है जिसे मैं ढूंढ रहा हूं। मैं देखना चाहता हूं कि यह splices के साथ किया जा सकता है। – emx

+1

लेकिन पहले गूगल परिणाम के लिए, यह एक बहुत ही बहुत उपयोगी पुनश्चर्या/वाक्य रचना पुष्टि – lol

3

पहले एक के लिए, कोशिश

my %hash = 
("currency_symbol" => "BRL", 
    "currency_name" => "Real" 
); 
print Dumper(\%hash); 

परिणाम होगा:

$VAR1 = { 
      'currency_symbol' => 'BRL', 
      'currency_name' => 'Real' 
     }; 
+0

है कि कैसे एक हैश प्रारंभ करने पर इस पाठ्यपुस्तक उदाहरण के लिए धन्यवाद। हालांकि, यह वह नहीं है जिसे मैं ढूंढ रहा हूं। मैं देखना चाहता हूं कि यह splices के साथ किया जा सकता है। – emx

+0

दरअसल @emx, मैं आपको यह दिखाने के लिए अधिक चिंतित था कि आपका डेटा क्यों: डूपर आउटपुट हैश की तरह नहीं दिख रहा था। –

+0

मुझे लगता है कि आपको मुझे स्वीकार करने के बजाय मुझे वोट देना था, लेकिन मुझे नहीं लगता कि मैं भी लायक हूं। –

13

तो, क्या आप चाहते हैं करने के लिए है पॉप कुंजी के लिए एक सरणी का उपयोग करके हैश का उपयोग करें, और मानों के लिए एक सरणी। तो निम्न कार्य करें:

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

use Data::Dumper; 

my %hash; 

my @keys = ("a","b"); 
my @values = ("1","2"); 

@hash{@keys} = @values; 

print Dumper(\%hash);' 

देता है:

$VAR1 = { 
      'a' => '1', 
      'b' => '2' 
     }; 
+0

धन्यवाद - यह वही है जो मैं ढूंढ रहा था। यह लगभग बहुत आसान है। – emx

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

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