perl - how work while loop on this program
I have this code but I don't understand how it works specifically this $counts{$user}{$program}++;
my %counts;
open my $IN, '<', 'SESSION.txt' or die;
while (<$IN>) {
next if length ($_) < 51;
my ($sid, $user, $terminal, $program) = unpack 'A9 @11 A25 @37 A15 @53 A25';
next if $sid eq '---------'; # you need some way to filter out bogus or header rows
$program =~ s/(.+//; # based on your example, turn toto (fifi) into toto
$counts{$user}{$program}++; #how that work ?
}
#close $IN;
while (my ($user, $ref) = each %counts) {
while (my ($program, $count) = each %$ref) {
print "User = $count $user with program $programn";
}
}
perl
add a comment |
I have this code but I don't understand how it works specifically this $counts{$user}{$program}++;
my %counts;
open my $IN, '<', 'SESSION.txt' or die;
while (<$IN>) {
next if length ($_) < 51;
my ($sid, $user, $terminal, $program) = unpack 'A9 @11 A25 @37 A15 @53 A25';
next if $sid eq '---------'; # you need some way to filter out bogus or header rows
$program =~ s/(.+//; # based on your example, turn toto (fifi) into toto
$counts{$user}{$program}++; #how that work ?
}
#close $IN;
while (my ($user, $ref) = each %counts) {
while (my ($program, $count) = each %$ref) {
print "User = $count $user with program $programn";
}
}
perl
1
Hi and welcome to Stack Overflow, please take a time to go through the welcome tour to know your way around here (and also to earn your first badge), read how to create a Minimal, Complete, and Verifiable example and also check How to Ask Good Questions so you increase your chances to get feedback and useful answers.
– jess
Jan 2 at 14:35
add a comment |
I have this code but I don't understand how it works specifically this $counts{$user}{$program}++;
my %counts;
open my $IN, '<', 'SESSION.txt' or die;
while (<$IN>) {
next if length ($_) < 51;
my ($sid, $user, $terminal, $program) = unpack 'A9 @11 A25 @37 A15 @53 A25';
next if $sid eq '---------'; # you need some way to filter out bogus or header rows
$program =~ s/(.+//; # based on your example, turn toto (fifi) into toto
$counts{$user}{$program}++; #how that work ?
}
#close $IN;
while (my ($user, $ref) = each %counts) {
while (my ($program, $count) = each %$ref) {
print "User = $count $user with program $programn";
}
}
perl
I have this code but I don't understand how it works specifically this $counts{$user}{$program}++;
my %counts;
open my $IN, '<', 'SESSION.txt' or die;
while (<$IN>) {
next if length ($_) < 51;
my ($sid, $user, $terminal, $program) = unpack 'A9 @11 A25 @37 A15 @53 A25';
next if $sid eq '---------'; # you need some way to filter out bogus or header rows
$program =~ s/(.+//; # based on your example, turn toto (fifi) into toto
$counts{$user}{$program}++; #how that work ?
}
#close $IN;
while (my ($user, $ref) = each %counts) {
while (my ($program, $count) = each %$ref) {
print "User = $count $user with program $programn";
}
}
perl
perl
edited Jan 2 at 16:31
WhatsThePoint
2,25162139
2,25162139
asked Jan 2 at 14:32


dfg ertdfg ert
95
95
1
Hi and welcome to Stack Overflow, please take a time to go through the welcome tour to know your way around here (and also to earn your first badge), read how to create a Minimal, Complete, and Verifiable example and also check How to Ask Good Questions so you increase your chances to get feedback and useful answers.
– jess
Jan 2 at 14:35
add a comment |
1
Hi and welcome to Stack Overflow, please take a time to go through the welcome tour to know your way around here (and also to earn your first badge), read how to create a Minimal, Complete, and Verifiable example and also check How to Ask Good Questions so you increase your chances to get feedback and useful answers.
– jess
Jan 2 at 14:35
1
1
Hi and welcome to Stack Overflow, please take a time to go through the welcome tour to know your way around here (and also to earn your first badge), read how to create a Minimal, Complete, and Verifiable example and also check How to Ask Good Questions so you increase your chances to get feedback and useful answers.
– jess
Jan 2 at 14:35
Hi and welcome to Stack Overflow, please take a time to go through the welcome tour to know your way around here (and also to earn your first badge), read how to create a Minimal, Complete, and Verifiable example and also check How to Ask Good Questions so you increase your chances to get feedback and useful answers.
– jess
Jan 2 at 14:35
add a comment |
1 Answer
1
active
oldest
votes
$counts{$user}{$program}++;
increments the value stored at key $program
in a nested hash which is stored (by reference) as the value of $counts{$user}
.
When perl sees the expression $counts{$user}{$program}
it will create the (nested) hash stored in $counts{$user}
if it does not exist yet. This is called 'autovivification'. perl will also create a key $program
in this (nested) hash if it does not exist yet and set its value to undef.
If the value at $counts{$user}{$program}
is not yet defined when you call ++
on it, perl will assume, you want a number in this slot and initialize it with 0.
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54008150%2fperl-how-work-while-loop-on-this-program%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
$counts{$user}{$program}++;
increments the value stored at key $program
in a nested hash which is stored (by reference) as the value of $counts{$user}
.
When perl sees the expression $counts{$user}{$program}
it will create the (nested) hash stored in $counts{$user}
if it does not exist yet. This is called 'autovivification'. perl will also create a key $program
in this (nested) hash if it does not exist yet and set its value to undef.
If the value at $counts{$user}{$program}
is not yet defined when you call ++
on it, perl will assume, you want a number in this slot and initialize it with 0.
add a comment |
$counts{$user}{$program}++;
increments the value stored at key $program
in a nested hash which is stored (by reference) as the value of $counts{$user}
.
When perl sees the expression $counts{$user}{$program}
it will create the (nested) hash stored in $counts{$user}
if it does not exist yet. This is called 'autovivification'. perl will also create a key $program
in this (nested) hash if it does not exist yet and set its value to undef.
If the value at $counts{$user}{$program}
is not yet defined when you call ++
on it, perl will assume, you want a number in this slot and initialize it with 0.
add a comment |
$counts{$user}{$program}++;
increments the value stored at key $program
in a nested hash which is stored (by reference) as the value of $counts{$user}
.
When perl sees the expression $counts{$user}{$program}
it will create the (nested) hash stored in $counts{$user}
if it does not exist yet. This is called 'autovivification'. perl will also create a key $program
in this (nested) hash if it does not exist yet and set its value to undef.
If the value at $counts{$user}{$program}
is not yet defined when you call ++
on it, perl will assume, you want a number in this slot and initialize it with 0.
$counts{$user}{$program}++;
increments the value stored at key $program
in a nested hash which is stored (by reference) as the value of $counts{$user}
.
When perl sees the expression $counts{$user}{$program}
it will create the (nested) hash stored in $counts{$user}
if it does not exist yet. This is called 'autovivification'. perl will also create a key $program
in this (nested) hash if it does not exist yet and set its value to undef.
If the value at $counts{$user}{$program}
is not yet defined when you call ++
on it, perl will assume, you want a number in this slot and initialize it with 0.
answered Jan 2 at 15:14
clampclamp
36116
36116
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54008150%2fperl-how-work-while-loop-on-this-program%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
1
Hi and welcome to Stack Overflow, please take a time to go through the welcome tour to know your way around here (and also to earn your first badge), read how to create a Minimal, Complete, and Verifiable example and also check How to Ask Good Questions so you increase your chances to get feedback and useful answers.
– jess
Jan 2 at 14:35