SPUG: MORE INFO: Array Naming Question

Dan Ebert mathin at mathin.com
Wed Feb 4 11:31:13 CST 2004


Could you make the key like this:

my $base = 'storage_array_';

my $number = 1; # this can be the part that can be dynamic

my $key = $base . $number;

$hash{$key} = %date_based_hash;

On Wed, 2004-02-04 at 09:19, North, Walter wrote:
> > I curious to know what problem is trying to be solved by 
> > using a string
> > as the name of the variable.
> 
> Dan:
> 
> I collect some data from a storage array and read it into a hash
> with the date as the key from which I then produce a graph for perusal
> by management.
> 
> More storage arrays are on the way and I'd like to combine the data
> however I haven't been able to come up with how to create a hash
> with the storage array name as a hash that contains another hash
> of the data keyed by date.
> 
> So I figured I could turn out multiple hashes with the date as
> a key.
> 
> However I would prefer not to have to modify the script to add another
> hash each time we get another storage device.  Hence I would want
> to increment the name for example:
> 
> ST_ARRAY_1 and the next would be ST_ARRAY_2 etc.
> 
> A hash of hashes seems to be the superior method, but while I have
> done hashes of arrays I cannot seem to get a satisfactory hash of hashes.
> 
> Hence my question.
> 
> As Christopher and Jeremy pointed out using a variable name for a variable
> name is asking for trouble.
> 
> 
> > -----Original Message-----
> > From: Dan Ebert [mailto:mathin at mathin.com]
> > Sent: Wednesday, February 04, 2004 9:40 AM
> > Cc: spug
> > Subject: RE: SPUG: Array Naming Question
> > 
> > 
> > I curious to know what problem is trying to be solved by 
> > using a string
> > as the name of the variable.
> > 
> > Maybe you could use a hash where the string is the key and 
> > the value is
> > the array (or hash, or whatever)?
> > 
> > i.e.
> > 
> > my %names = (array1 => [1,2,3],
> > 	      array2 => [4,5,6]);
> > 
> > my $use_this = 'array1';
> > 
> > foreach( @{ $names{$use_this} } ) { print; }
> > 
> > 
> > 
> > Another possibility could be to use references.
> > 
> > my @array1 = (1,2,3);
> > my @array2 = (3,4,5);
> > 
> > my $arrayref = \@array1;
> > 
> > my $use_this = 'array1';
> > 
> > if($use_this eq 'array2') { $arrayref = \@array2; }
> > 
> > foreach(@$arrayref) { print; }
> > 
> > 
> > 
> > On Wed, 2004-02-04 at 08:13, Cantrall, Christopher W wrote:
> > > Also, MJD has an article on this subject.  
> > http://perl.plover.com/varvarname.html
> > > 
> > > 
> > > BeginQuote
> > > 
> > > The real root of the problem code is: It's fragile. You're 
> > mingling unlike things when you do this. And if two of those 
> > unlike things happen to have the same name, they'll collide 
> > and you'll get the wrong answer. So you end up having a whole 
> > long list of names which you have to be careful not to reuse, 
> > and if you screw up, you get a very bizarre error. This is 
> > precisely the problem that namespaces were invented to solve, 
> > and that's just what a hash is: A portable namespace.
> > > 
> > > ...
> > > 
> > > The real problem is that if your string contains something 
> > unexpected, it will sabotage a totally unrelated part of the 
> > program, and then you will have one hell of a time figuring 
> > out the bug.
> > > 
> > > EndQuote
> > > 
> > > 
> > > MJD has 3 articles on this.  Quite interesting.
> > > 
> > > HTH
> > > 
> > > ____________________________________________
> > > Chris Cantrall, Structural Engineer, 777
> > >     Christopher.W.Cantrall at Boeing.com
> > >   chris at cantrall.org
> > >     http://perlmonks.org/index.pl?node=Louis_Wu
> > >     http://spugwiki.perlocity.org/index.cgi?LouisWu
> > > 
> > > > -----Original Message-----
> > > > From: Jeremy G Kahn [mailto:kahn at cpan.org]
> > > > Sent: Wednesday, February 04, 2004 7:53 AM
> > > > To: North, Walter
> > > > Cc: spug
> > > > Subject: Re: SPUG: Array Naming Question
> > > > 
> > > > 
> > > > This is a good question, and a FAQ if you know where to 
> > look. The FAQ 
> > > > has an explanation for how you might want to go about 
> > doing this, and 
> > > > why it's probably a bad idea, and some suggestions for 
> > alternatives:
> > > > 
> > > > perldoc -q 'variable name':
> > > > 
> > > > Found in /usr/share/perl/5.8.2/pod/perlfaq7.pod
> > > >        How can I use a variable as a variable name?
> > > > 
> > > >                Beginners often think they want to have a variable
> > > >                contain the name of a variable.
> > > > 
> > > >                    $fred    = 23;
> > > >                    $varname = "fred";
> > > >                    ++$$varname;         # $fred now 24
> > > > 
> > > >                This works sometimes, but it is a very bad idea
> > > >                for two reasons.
> > > > 
> > > >                The first reason is that this technique only works
> > > >                on global variables.  That means that if $fred is
> > > >                a lexical variable created with my() in the above
> > > >                example, the code wouldn't work at all: you'd
> > > > ...
> > > > 
> > > > Hope that's useful.
> > > > 
> > > > 
> > > > --jeremy
> > > > 
> > > > North, Walter wrote:
> > > > 
> > > > >Good Morning all,
> > > > >
> > > > >Maybe this is a dumb question, but here goes anyway:
> > > > >
> > > > >Does anyone know if it possible to include a variable in, or 
> > > > use a variable
> > > > >as
> > > > >the name of an array or hash, and if so how would one do it?
> > > > >
> > > > >thanks in advance.
> > > > >
> > > > >
> > > > >----------------------------------------------------- 
> > > > >Walter North 406-444-2914 
> > > > >Operating Systems Programmer 
> > > > >wnorth (at) state (dot) mt (dot) us
> > > > >----------------------------------------------------- 
> > > > >
> > > > >_____________________________________________________________
> > > > >Seattle Perl Users Group Mailing List  
> > > > >POST TO: spug-list at mail.pm.org  http://spugwiki.perlocity.org
> > > > >ACCOUNT CONFIG: http://mail.pm.org/mailman/listinfo/spug-list
> > > > >MEETINGS: 3rd Tuesdays, U-District, Seattle WA
> > > > >WEB PAGE: http://www.seattleperl.org
> > > > >
> > > > >  
> > > > >
> > > > 
> > > > 
> > > > _____________________________________________________________
> > > > Seattle Perl Users Group Mailing List  
> > > > POST TO: spug-list at mail.pm.org  http://spugwiki.perlocity.org
> > > > ACCOUNT CONFIG: http://mail.pm.org/mailman/listinfo/spug-list
> > > > MEETINGS: 3rd Tuesdays, U-District, Seattle WA
> > > > WEB PAGE: http://www.seattleperl.org
> > > > 
> > > > 
> > > _____________________________________________________________
> > > Seattle Perl Users Group Mailing List  
> > > POST TO: spug-list at mail.pm.org  http://spugwiki.perlocity.org
> > > ACCOUNT CONFIG: http://mail.pm.org/mailman/listinfo/spug-list
> > > MEETINGS: 3rd Tuesdays, U-District, Seattle WA
> > > WEB PAGE: http://www.seattleperl.org
> > > 
> > _____________________________________________________________
> > Seattle Perl Users Group Mailing List  
> > POST TO: spug-list at mail.pm.org  http://spugwiki.perlocity.org
> > ACCOUNT CONFIG: http://mail.pm.org/mailman/listinfo/spug-list
> > MEETINGS: 3rd Tuesdays, U-District, Seattle WA
> > WEB PAGE: http://www.seattleperl.org
> > 
> > 
> _____________________________________________________________
> Seattle Perl Users Group Mailing List  
> POST TO: spug-list at mail.pm.org  http://spugwiki.perlocity.org
> ACCOUNT CONFIG: http://mail.pm.org/mailman/listinfo/spug-list
> MEETINGS: 3rd Tuesdays, U-District, Seattle WA
> WEB PAGE: http://www.seattleperl.org
> 



More information about the spug-list mailing list