perl hash - using a range as a hash key.


Login or Register for Dates, Times and to Reply

 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting perl hash - using a range as a hash key.
# 1  
perl hash - using a range as a hash key.

Hi,

In Perl, is it possible to use a range of numbers with '..' as a key in a hash?

Something in like:

Code:
%hash = (
                 '768..1536' => '1G',
                 '1537..2560' => '2G'
                );

That is, the range operation is evaluated, and all members of the range are 'mapped' to the RHS value, so that for the first keypair, '1000' would return 1G.

I think somehow 'map' might be what i'm after, but can't find any reference material to support my theory.

Any advice welcome,

cheers

dsw

Last edited by dsw; 08-31-2010 at 07:46 AM.. Reason: typo
# 2  
One way to construct this:
Code:
%hash = map { $a = '1G' if /768/ .. /1536/; $a = '2G' if /1537/ .. /2560/; $_ => $a }
  768 .. 2560;

These 2 Users Gave Thanks to pludi For This Post:
# 3  
Could I suggest a different approach?
Code:
perl -le'
  
  $val = shift;
  
  @ranges = (
     [768, 1536, "1G"],
     [1537, 2560, "2G"]
     ); 
     
  for (@ranges) {
    print $_->[2] and last 
      if $_->[0] <= $val && $val <= $_->[1]
    }
  '

It produces:

Code:
% perl -le'

  $val = shift;

  @ranges = (
     [768, 1536, "1G"],
 [1537, 2560, "2G"]
 );

  for (@ranges) {
    print $_->[2] and last
      if $_->[0] <= $val && $val <= $_->[1]
    }
  ' 1000
1G
% perl -le'

  $val = shift;

  @ranges = (
     [768, 1536, "1G"],
 [1537, 2560, "2G"]
 );

  for (@ranges) {
    print $_->[2] and last
      if $_->[0] <= $val && $val <= $_->[1]
    }
  ' 2000
2G

This User Gave Thanks to radoulov For This Post:
# 4  
Awesome, thank you both pludi and radoulov - both very workable solutions.

cheers

dsw.
Login or Register for Dates, Times and to Reply

Previous Thread | Next Thread
Thread Tools Search this Thread
Search this Thread:
Advanced Search

Test Your Knowledge in Computers #142
Difficulty: Easy
Version 4 Unix was rewritten in C in 1977.
True or False?

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Need to print hash of hash in table format

Hi, I have a hash of hash where it has name, activities and count i have data like this - $result->{$name}->{$activities} = $value; content of that are - name - robert tom cat peter activities - running, eating, sleeping , drinking, work i need to print output as below ... (3 Replies)
Discussion started by: asak
3 Replies

2. Shell Programming and Scripting

Dynamically parse BibTeX and create hash of hash

Hello gurus, Iam trying to parse following BibTex file (bibliography.bib): @book{Lee2000a, abstract = {Abstract goes here}, author = {Lee, Wenke and Stolfo, Salvatore J}, title = {{Data mining approaches for intrusion detection}}, year = {2000} } @article{Forrest1996, abstract =... (0 Replies)
Discussion started by: wakatana
0 Replies

3. Shell Programming and Scripting

Compare values of hashes of hash for n number of hash in perl without sorting.

Hi, I have an hashes of hash, where hash is dynamic, it can be n number of hash. i need to compare data_count values of all . my %result ( $abc => { 'data_count' => '10', 'ID' => 'ABC122', } $def => { 'data_count' => '20', 'ID' => 'defASe', ... (1 Reply)
Discussion started by: asak
1 Replies

4. Shell Programming and Scripting

Perl hash help

Hi , i have the below code its working fine when i execute in unix , but its not working in windows could you pls explain me where i am going wrong. This is the program $data = { '1' => 'one' , '2' => 'two' , 3 => 'three' }; print "hello : $data->{'1'}... (2 Replies)
Discussion started by: ragilla
2 Replies

5. Shell Programming and Scripting

Perl Hash:Can not keep hash data in the same order that it was inserted

Can Someone explain me why even using Tie::IxHash I can not get the output data in the same order that it was inserted? See code below. #!/usr/bin/perl use warnings; use Tie::IxHash; use strict; tie (my %programs, "Tie::IxHash"); while (my $line = <DATA>) { chomp $line; my(... (1 Reply)
Discussion started by: jgfcoimbra
1 Replies

6. Shell Programming and Scripting

Assigning a hash to another hash key

Hello, I have a hash in hsh. I need to assign it to another hash globalHsh. I think the below statement does not work $globalHsh{$id} = %hsh; What is the right way to assign it? Thanks (3 Replies)
Discussion started by: rsanjay
3 Replies

7. UNIX for Advanced & Expert Users

Perl loop txt and check if a hash key

Hi, The task i have to do is to 1- create a database contains the Names .run the query and store results in hash make the Name field is the hash key 2- in the same time i have a txt which i will loop through it word by word and check for each word if a hash key ( compare it with the Names in... (0 Replies)
Discussion started by: eng_shimaa
0 Replies

8. Shell Programming and Scripting

perl (word by word check if a hash key)

Hi, Now i work in a code that 1-get data stored in the database in the form of hash table with a key field which is the " Name" 2-in the same time i open a txt file and loop through it word by word 3- which i have a problem in is that : I need to loop word by word and check if it is a... (0 Replies)
Discussion started by: eng_shimaa
0 Replies

9. Shell Programming and Scripting

Print Entire hash list (hash of hashes)

I have a script with dynamic hash of hashes , and I want to print the entire hash (with all other hashes). Itried to do it recursively by checking if the current key is a hash and if yes call the current function again with refference to the sub hash. Most of the printing seems to be OK but in... (1 Reply)
Discussion started by: Alalush
1 Replies

10. Shell Programming and Scripting

Perl Hash

HI I have a hash like this $hashname->{$filesystem}->{'fsname'}=$filesystem; How to get the values from this multilevel hash. Thanks in advance... :) (1 Reply)
Discussion started by: Harikrishna
1 Replies