copying array of hashes

Posted on 2009-05-10
Last Modified: 2012-05-06
how can I make a copy of an array of hashes so that the original one isn't affected? I don't have use storage in my PERL version
Question by:cucugirl
LVL 84

Accepted Solution

ozo earned 84 total points
ID: 24349370
print "$copy[1]{k2} $array[1]{k2}\n";
LVL 39

Expert Comment

ID: 24351547
>>I don't have use storage
I'm assuming you meant you don't have the Storable module?  If so, can you install it?  Have you tried?  Did you get an error?

Assisted Solution

vikaskhoria earned 83 total points
ID: 24352113
Check my script below:
(This deletes elements from the hash and the original hash is modified to the desired hash)



my %my_hash = ('TEST' =>'T' ,'QUIZ'=>'4','HWORK'=>'3');

my @table = ( {'TEST'=>'T'}, {'TEST'=>'F'},{'QUIZ'=>'1'},{'QUIZ'=> '2'},{'HWORK'=>'3'}, {'HWORK'=>'3'});

for my $value (keys %my_hash)


        my $found = 0;

        foreach $i (0 .. @table-1)


                if ( $table[$i]{$value} == $my_hash{$value} ) {

                        $found = 1;



        if ( ! $found )





Open in new window


Expert Comment

ID: 24361590
Check this link below:

This talks about copying array of hashes.
This may be of some help to you.
LVL 26

Assisted Solution

wilcoxon earned 83 total points
ID: 25953183
The best way is to use Clone (this handles any level of nested structures).  Alternately, if you know that the hashes only contain scalars, it's easy to copy them manually.
my $orig = [{first=>1,second=>2},{first=>3,second=>4}]; 
# using Clone
use Clone qw(clone);
my $copy = clone($orig); 
# manually copying
## slow/inefficient way
my $copy = [];
foreach my $el (@$orig) {
    my %tmp;
    foreach my $key (%$el) {
        $tmp{$key} = $el->{$key};
    push @$copy, {%tmp};
## better way
my $copy = [];
foreach my $el (@$orig) {
    push @$copy, {%$el};
## ozo's way - more succinct but should be about same performance (I think)
my $copy = [map { {%$_} } @$orig];

Open in new window


Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Many time we need to work with multiple files all together. If its windows system then we can use some GUI based editor to accomplish our task. But what if you are on putty or have only CLI(Command Line Interface) as an option to  edit your files. I…
In the distant past (last year) I hacked together a little toy that would allow a couple of Manager types to query, preview, and extract data from a number of MongoDB instances, to their tool of choice: Excel (…
Explain concepts important to validation of email addresses with regular expressions. Applies to most languages/tools that uses regular expressions. Consider email address RFCs: Look at HTML5 form input element (with type=email) regex pattern: T…
Hi friends,  in this video  I'll show you how new windows 10 user can learn the using of windows 10. Thank you.

895 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

15 Experts available now in Live!

Get 1:1 Help Now