Perl: Understanding @allwords


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Perl: Understanding @allwords
# 1  
Old 04-18-2012
Perl: Understanding @allwords

Hi guys,

Here is the code:
Code:
my @allwords = ();
my %seen=();
foreach my $curr (@allwords) {
$seen{$curr} = 1;
}
@allwords = keys %seen;

my question is: what will @allwords now contain, or how would the entries in the @allwords array be different after this manipulation?


Thank you!!


I am trying to understand more about this array.

Moderator's Comments:
Mod Comment Please use standard fonts in code blocks and code tags

Last edited by jim mcnamara; 04-19-2012 at 12:34 AM.. Reason: [mod]Please use standard fonts in code blocks and code tags[/mod]
# 2  
Old 04-19-2012
your array @allwords is empty hence foreach loop would never execute
you will still have an empty hash after the foreach loop
thus the last statement won't cause any difference and @allwords would still be empty

if you had some entries in @allwords say,

Code:
 
my @allwords = qw/a b c d a/;
my %seen=();
foreach my $curr (@allwords) {
$seen{$curr} = 1;
}
@allwords = keys %seen;

the foreach loop will assing each element of the array @allwords as a key to %seen hash and each key would have 1 as it's value i.e.,

Code:
 
$seen{$a}=1
$seen{$b}=1
$seen{$c}=1
$seen{$d}=1
$seen{$a}=1 #already exists so would be discarded

however, on the last iteration when $curr is a again, your hash already has a key a with value as 1, so it won't allow a duplicate entry and last element of @allwords would be discarded

Code:
 
@allwords = keys %seen;

keys %seen would return ('a','b','c','d') and assign it to @allwords

hence, in short your code here would remove any duplicate entries in an array
Njoy!! Smilie
This User Gave Thanks to sam05121988 For This Post:
# 3  
Old 04-19-2012
You can achieve the same result with map:
Code:
my %seen=map { $_ => 1 } @allwords; 
@allwords= keys %seen;

This User Gave Thanks to Klashxx For This Post:
# 4  
Old 04-20-2012
Quote:
Originally Posted by sam05121988
your array @allwords is empty hence foreach loop would never execute
you will still have an empty hash after the foreach loop
thus the last statement won't cause any difference and @allwords would still be empty

if you had some entries in @allwords say,

Code:
 
my @allwords = qw/a b c d a/;
my %seen=();
foreach my $curr (@allwords) {
$seen{$curr} = 1;
}
@allwords = keys %seen;

the foreach loop will assing each element of the array @allwords as a key to %seen hash and each key would have 1 as it's value i.e.,

Code:
 
$seen{$a}=1
$seen{$b}=1
$seen{$c}=1
$seen{$d}=1
$seen{$a}=1 #already exists so would be discarded

however, on the last iteration when $curr is a again, your hash already has a key a with value as 1, so it won't allow a duplicate entry and last element of @allwords would be discarded

Code:
 
@allwords = keys %seen;

keys %seen would return ('a','b','c','d') and assign it to @allwords

hence, in short your code here would remove any duplicate entries in an array
Njoy!! Smilie

THANK YOU!!!

---------- Post updated at 11:39 ---------- Previous update was at 11:39 ----------

Quote:
Originally Posted by Klashxx
You can achieve the same result with map:
Code:
my %seen=map { $_ => 1 } @allwords; 
@allwords= keys %seen;

THANK YOU!!Smilie
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Help understanding perl script

Hello, A former sys admin placed this script on one of our boxes and it needs to be adjusted, but I'm not familiar with perl. Can someone help break this down for me? I'm particularly interested in the -mtime function. What's the time frame being referenced here. ... (5 Replies)
Discussion started by: bbbngowc
5 Replies

2. Shell Programming and Scripting

Help with perl code understanding

Hi, I need to understand below perl code, can some one advise me. perl -MDate::Parse -e'BEGIN{$main::now=time;$main::old=(time-60*30)}' -nE'if(/^(\w+\s+\d+\s+\d+:\d+:\d+)/) {$t=str2time $1; $t > $old && $t < $now && print}' (1 Reply)
Discussion started by: learnbash
1 Replies

3. Shell Programming and Scripting

understanding thread in perl

Hi all, I am trying to build threads which will go to localhost and list the files in given folder. #!/usr/bin/perl use threads; my $t1 = threads->new(\&sub1, 1); my $t2 = threads->new(\&sub2, 2); push(@threads,$t1); push(@threads,$t2); foreach... (5 Replies)
Discussion started by: PranavEcstasy
5 Replies

4. Programming

Understanding perl code

What is the difference between the two statements below? A: $a->{"$fruit"}->{"$color"}->{size} = $size B: $size = $a->{"$fruit"}->{"$color"}->{size} Please assist. Thanks! (0 Replies)
Discussion started by: onlinelearner02
0 Replies

5. Shell Programming and Scripting

Help understanding some Perl code.

Well, I found myself trying to fix some Perl code (Ive never done any Perl in my life) and I pinpointed the place where the bug could be. But to be sure I have to know what does a few line of code mean: $files_lim =~ (/^\d*$/) $files_lim =~ (/^\d*h$/) $files_age =~ s/h// The code where... (2 Replies)
Discussion started by: RedSpyder
2 Replies

6. Shell Programming and Scripting

Help understanding Perl code.

Well, I found myself trying to fix some Perl code (Ive never done any Perl in my life) and I pinpointed the place where the bug could be. But to be sure I have to know what does a few line of code mean: $files_lim =~ (/^\d*$/) $files_lim =~ (/^\d*h$/)$files_age =~ s/h//The code where this was... (0 Replies)
Discussion started by: RedSpyder
0 Replies

7. Shell Programming and Scripting

Understanding perl statement

can someone help me how to interpret this line? my ($class, $hashref) = @_; my $portfolio = {}; if ($hashref->{portfolio_id}) { ($portfolio) = GEmySQL->get ("select * from portfolio where portfolio.id=$hashref->{portfolio_id}"); } =============== Question: how do... (2 Replies)
Discussion started by: onlinelearner02
2 Replies

8. Shell Programming and Scripting

perl command understanding

Hi All, Can you please help me interpret the following command. Which I am not able to understand. Also can you please illustrate what it is used for. perl -pi -e 's/\015//g' text_file.dat Regards (3 Replies)
Discussion started by: rakesh.su30
3 Replies

9. UNIX for Dummies Questions & Answers

Perl Meta character understanding

Hello All, I have some expression: if (/^(\d\d\d\d\d\.\d\d\d\d\d\d)\s+(.+)$/) { warn "$argv0(" . __LINE__ . "): rbl2ts{$2} == '$rbl2ts{$2}' \$1==$1\n" if ($debug); $rbl2ts{$2} = $1 if (!defined($rbl2ts{$2}) or ($1 le $rbl2ts{$2})); warn "$argv0(" . __LINE__ . "):... (3 Replies)
Discussion started by: suvenduperl
3 Replies

10. Shell Programming and Scripting

Need help understanding perl script error

I solicited this site earlier this week and got a good answer for a perl Script so I made this script from what understood from the answers But now I have a bug and I'm stump. It doesn't parse correctly the Output it stays on the first line My $f2 and reprints in a endless loop I'm sure there... (3 Replies)
Discussion started by: Ex-Capsa
3 Replies
Login or Register to Ask a Question