develooper Front page | perl.beginners | Postings from March 2002

Re: getting literal name of a variable

Thread Previous | Thread Next
From:
Jonathan E. Paton
Date:
March 30, 2002 09:40
Subject:
Re: getting literal name of a variable
Message ID:
20020330174026.97943.qmail@web14604.mail.yahoo.com
> I want to automatically print a variable's name.
> 
> For example:
> ###################################
> #!/usr/bin/perl
> use warnings;
> use strict;
> 
> my $string = '1,2,3,4';
> my @a = (my $var1, my $var2, my $var3, my $var4)= split (/,/, $string);
> foreach my $element (@a) {print "elementname"\t$element\n}
> ##################################
> 
> this prints:
> elementname 1
> elementname 2
> elementname 3
> elementname 4
> 
> I want:
> 
> 'var1' 1
> 'var2' 2
> 'var3' 3
> 'var4' 4
> 
> Is there a way of getting the variable's name as a literal automatically,
> without resorting to a hash?

There is no means of mapping a lexically scoped variable's value to it's name.  You can map names
to values, but not the other way around.  Even if you/anyone else can think of something I've
overlooked - it'd probably be ugly.

I came up with:

local $_ = 'Jonathan Paton,Scotland,jonathanpaton@yahoo.com';
my @field = qw(name lives email);
my @data = split /,/;

for(my $ctr=0; $ctr <= $#field; $ctr++) {
    print "$field[$ctr] = $data[$ctr]\n";
}

but that's UGLY.  What exactly is wrong with using hashes... if output order matters:

use constant NAME  => 0;
use constant LIVES => 1;
use constant EMAIL => 2;

my @data = split /,/;

print @data[NAME];

Jonathan Paton

__________________________________________________
Do You Yahoo!?
Everything you'll ever need on one web page
from News and Sport to Email and Music Charts
http://uk.my.yahoo.com

Thread Previous | Thread Next


nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About