ameezys has asked for the wisdom of the Perl Monks concerning the following question:
So I have an array called @input_array = n1 n2 n3 n4 n5. I want to store two values for each array called $A and $B. Meaning that for each input, example n1, will have two variable $A and $B. How do I do this? Can I use foreach.
Re: Value into array
by Marshall (Canon) on Apr 08, 2019 at 04:32 UTC
|
Sounds like what you need here is a 2-dimensional array, what Perl calls an Array of Array's.
@input_array = ( \@row1, \@row2, \@row3);
I couldn't find a link for you that I could post here that is both informative and also that I was sure was "public domain".
Try google on "Perl array of arrays".
Some code:
Note that in Perl array indices start at [0] not [1].
#!/usr/bin/perl;
use strict;
use warnings;
my @input_array = ( ["x","y"], ["L","M"], [2,45] );
foreach my $row (@input_array)
{
print "@$row\n";
}
print "\nanother way\n";
for (my $row=0; $row<@input_array; $row++)
{
for (my $column=0; $column <@{$input_array[$row]}; $column++)
{
print "$input_array[$row][$column] ";
}
print "\n";
}
print "\nyet, another way\n";
for (my $row=0; $row<3; $row++)
{
for (my $col =0; $col<2; $col++)
{
print "[$row][$col]=$input_array[$row][$col] "
}
print "\n";
}
__END__
x y
L M
2 45
another way
x y
L M
2 45
yet, another way
[0][0]=x [0][1]=y
[1][0]=L [1][1]=M
[2][0]=2 [2][1]=45
| [reply] [d/l] [select] |
Re: Value into array
by AnomalousMonk (Archbishop) on Apr 08, 2019 at 07:08 UTC
|
I don't fully understand exactly what you need, but here is an additional way to Marshall's to do what you may want:
c:\@Work\Perl\monks>perl -le
"use warnings;
use strict;
;;
use Data::Dumper;
;;
my @ra = (100, 200, 300, 400);
print Dumper \@ra;
;;
@ra = map { [ $_+1, $_-1 ] } @ra;
print Dumper \@ra;
"
$VAR1 = [
100,
200,
300,
400
];
$VAR1 = [
[
101,
99
],
[
201,
199
],
[
301,
299
],
[
401,
399
]
];
See the map built-in and the core (i.e., supplied with all standard Perl releases) module Data::Dumper.
Give a man a fish: <%-{-{-{-<
| [reply] [d/l] [select] |
|
@input_array = (N1,N2,N3,N6,N7);
A[N1] = 1
A[N2] = 1
A[N3] = 1
A[N6] = 1
A[N7] = 1
B[N1] = 1
B[N2] = 1
B[N3] = 1
B[N6] = 1
B[N7] = 1
Im trying to store the value for A and B of each data inside the array into 1. Meaning that the data N1 has two values inside it which is A and B. Somehow I couldn't figure out how to store the value.
| [reply] [d/l] |
|
use strict;
use warnings;
my %hash = (
N1 => { A => 1, B => 1},
N2 => { A => 1, B => 1},
N3 => { A => 1, B => 1},
N6 => { A => 1, B => 1},
N7 => { A => 1, B => 1},
);
# usage e.g.
print $hash{N3}{A}, "\n";
| [reply] [d/l] |
|
|
|
|
|
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
my %HoA = ( N1 => [undef],
N2 => [undef],
N3 => [undef],
N4 => [undef] );
print Dumper \%HoA;
# add to an existing row
push @{ $HoA{"N1"} }, "A", "B";
print Dumper \%HoA;
__END__
$ perl test.pl
$VAR1 = {
'N3' => [
undef
],
'N2' => [
undef
],
'N1' => [
undef
],
'N4' => [
undef
]
};
$VAR1 = {
'N3' => [
undef
],
'N2' => [
undef
],
'N1' => [
undef,
'A',
'B'
],
'N4' => [
undef
]
};
Is it possible to be looking for HASHES OF HASHES?
Hope this helps, let us know if this is not what you are looking for.
Seeking for Perl wisdom...on the process of learning...not there...yet!
| [reply] [d/l] [select] |
|
|